From 58384aae5b124fe9eca17c9f6bc4c7eae24d7adb Mon Sep 17 00:00:00 2001 From: Yi Zeng Date: Wed, 13 Dec 2017 15:55:43 +0800 Subject: [PATCH] nand: add a error handler in aml_nand_add_partition PD#156335: nand: add a error handler in aml_nand_add_partition add a error handler in aml_nand_add_partition to avoid the endless loop, when dts config a over size partition. Change-Id: I8375990283bc6b36a09e09a37d041ebd929990d6 Signed-off-by: Yi Zeng --- arch/arm64/boot/dts/amlogic/gxl_p401_2g.dts | 2 +- drivers/amlogic/mtd/aml_nand.c | 6 ++++++ drivers/amlogic/mtd/mtd_driver.c | 3 ++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/amlogic/gxl_p401_2g.dts b/arch/arm64/boot/dts/amlogic/gxl_p401_2g.dts index ef472f242f6a..f8d85f079f6f 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p401_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p401_2g.dts @@ -328,7 +328,7 @@ }; system{ offset=<0x0 0x0>; - size=<0x0 0xDC40000>; + size=<0x0 0xDC00000>; }; data{ offset=<0xffffffff 0xffffffff>; diff --git a/drivers/amlogic/mtd/aml_nand.c b/drivers/amlogic/mtd/aml_nand.c index 1ddc6660c2f9..04e697ab3799 100644 --- a/drivers/amlogic/mtd/aml_nand.c +++ b/drivers/amlogic/mtd/aml_nand.c @@ -434,6 +434,12 @@ static int aml_nand_add_partition(struct aml_nand_chip *aml_chip) start_blk = 0; do { offset = adjust_offset + start_blk * mtd->erasesize; + if (offset > mtd->size) { + pr_info("%s %d error : over the nand size!!!\n", + __func__, __LINE__); + WARN_ON(1); + return -ENOMEM; + } error = mtd->_block_isbad(mtd, offset); if (error == FACTORY_BAD_BLOCK_ERROR) { pr_info("%s:%d factory bad addr=%llx\n", diff --git a/drivers/amlogic/mtd/mtd_driver.c b/drivers/amlogic/mtd/mtd_driver.c index d7373bc5861c..db5a7378b3c8 100644 --- a/drivers/amlogic/mtd/mtd_driver.c +++ b/drivers/amlogic/mtd/mtd_driver.c @@ -259,7 +259,8 @@ static int mtd_nand_probe(struct platform_device *pdev) /*prase dtb and get device(part) information*/ prase_get_dtb_nand_parameter(aml_nand_dev, pdev); - nand_init(pdev); + err = nand_init(pdev); + pr_info("%s %d , err = %d\n", __func__, __LINE__, err); exit_error: return err;