工具/软件:
“spl_nand.c"中“中的“spl_nand_read"函“函数使用 nand_page_size () 来获取 NAND 页面大小,但它不会在 SPL 中初始化。
https://git.ti.com/cgit/ti-u-boot/ti-u-boot/tree/common/spl/spl_nand.c#n62
static ulong spl_nand_read(struct spl_load_info *load, ulong offs, ulong size,
void *dst)
{
int err;
ulong sector;
debug("%s: offs %lx, size %lx, dst %p\n",
__func__, offs, size, dst);
sector = *(int *)load->priv;
offs = sector + nand_spl_adjust_offset(sector, offs - sector);
err = nand_spl_load_image(offs, size, dst);
spl_set_bl_len(load, nand_page_size());
if (err)
return 0;
return size;
}
该修复程序在 drivers/mtd/nand/raw/am335x_spl_bch.c 中设置为 config_SYS_NAND_PAGE_SIZE (以 nand_init () 表示) 、
使 nand_page_size() API 在 SPL 中工作。
diff --git a/drivers/mtd/nand/raw/am335x_spl_bch.c b/drivers/mtd/nand/raw/am335x_spl_bch.c
index 4b50f351d35..cb10fb9ac49 100644
--- a/drivers/mtd/nand/raw/am335x_spl_bch.c
+++ b/drivers/mtd/nand/raw/am335x_spl_bch.c
@@ -209,6 +209,9 @@ void nand_init(void)
(void __iomem *)CFG_SYS_NAND_BASE;
board_nand_init(&nand_chip);
+ // Ensure SPL knows the page size, so nand_page_size() works in SPL.
+ mtd->writesize = CONFIG_SYS_NAND_PAGE_SIZE;
+
if (nand_chip.select_chip)
nand_chip.select_chip(mtd, 0);