Discussion:
[U-Boot] [PATCH] nand: fix up badblock skipping
Jiri Valek
2018-10-19 08:15:55 UTC
Permalink
From: Jiri Valek <***@2n.cz>

Currently the badblock skipping fails. SPL loader fails to boot from NAND.
End up on message "SPL: failed to boot from all boot devices"

Signed-off-by: Jiri Valek <***@seznam.cz>
---

drivers/mtd/nand/raw/mxs_nand_spl.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/mtd/nand/raw/mxs_nand_spl.c b/drivers/mtd/nand/raw/mxs_nand_spl.c
index 2d7bbe83cc..56618c95dc 100644
--- a/drivers/mtd/nand/raw/mxs_nand_spl.c
+++ b/drivers/mtd/nand/raw/mxs_nand_spl.c
@@ -239,6 +239,7 @@ int nand_spl_load_image(uint32_t offs, unsigned int size, void *buf)
*/
while (is_badblock(mtd, offs, 1)) {
page = page + nand_page_per_block;
+ offs = offs + mtd.erasesize;
/* Check i we've reached the end of flash. */
if (page >= mtd->size >> chip->page_shift)
return -ENOMEM;
--
2.11.0
Miquel Raynal
2018-10-24 13:56:16 UTC
Permalink
Hi Jiri,
Post by Jiri Valek
Currently the badblock skipping fails. SPL loader fails to boot from NAND.
End up on message "SPL: failed to boot from all boot devices"
---
drivers/mtd/nand/raw/mxs_nand_spl.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/mtd/nand/raw/mxs_nand_spl.c b/drivers/mtd/nand/raw/mxs_nand_spl.c
index 2d7bbe83cc..56618c95dc 100644
--- a/drivers/mtd/nand/raw/mxs_nand_spl.c
+++ b/drivers/mtd/nand/raw/mxs_nand_spl.c
@@ -239,6 +239,7 @@ int nand_spl_load_image(uint32_t offs, unsigned int size, void *buf)
*/
while (is_badblock(mtd, offs, 1)) {
page = page + nand_page_per_block;
+ offs = offs + mtd.erasesize;
/* Check i we've reached the end of flash. */
if (page >= mtd->size >> chip->page_shift)
return -ENOMEM;
Reviewed-by: Miquel Raynal <***@bootlin.com>

Thanks,
Miquèl
Stefano Babic
2018-12-08 16:16:49 UTC
Permalink
Hi Jiri, Miquel,
Post by Miquel Raynal
Hi Jiri,
Post by Jiri Valek
Currently the badblock skipping fails. SPL loader fails to boot from NAND.
End up on message "SPL: failed to boot from all boot devices"
---
drivers/mtd/nand/raw/mxs_nand_spl.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/mtd/nand/raw/mxs_nand_spl.c b/drivers/mtd/nand/raw/mxs_nand_spl.c
index 2d7bbe83cc..56618c95dc 100644
--- a/drivers/mtd/nand/raw/mxs_nand_spl.c
+++ b/drivers/mtd/nand/raw/mxs_nand_spl.c
@@ -239,6 +239,7 @@ int nand_spl_load_image(uint32_t offs, unsigned int size, void *buf)
*/
while (is_badblock(mtd, offs, 1)) {
page = page + nand_page_per_block;
+ offs = offs + mtd.erasesize;
/* Check i we've reached the end of flash. */
if (page >= mtd->size >> chip->page_shift)
return -ENOMEM;
I agree that secto must be skipped, but implementation looks wrong. mtd
is a pointer, and the above line should be off + mtd->erasesize. Do you
build with it ? I tried to apply it, as expected it cannot be compiled
clean.

Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: ***@denx.de
=====================================================================
Loading...