am335x_spl_bch - SPL NAND loading hang on power on only
Kevin Baker
kbaker at gmail.com
Tue Aug 31 02:55:16 CEST 2021
Hi all,
I am working on updating our version of u-boot, and came across something
weird - the SPL hangs after "Trying to load NAND" on the first power-on
boot, but after a watchdog reset or power-on reset, the NAND works fine.
U-Boot SPL 2021.01-00010-g8c91cf967b-dirty (Aug 30 2021 - 19:03:45
-0500)
Trying to boot from NAND <<<< hangs here until watchdog reset
After checking more common issues - pinmux/config/timing/NAND connections,
etc. and printf-tracing it, it is actually hanging after board_nand_init
and at this call to select_chip before getting to NAND_CMD_RESET:
drivers/mtd/nand/raw/am335x_spl_bch.c: nand_init()
...
board_nand_init(&nand_chip);
if (nand_chip.select_chip)
nand_chip.select_chip(mtd, 0); <<<< stuck here ??? <<<<
/* NAND chip may require reset after power-on */
nand_command(0, 0, 0, NAND_CMD_RESET);
...
Somehow, the first power up, nand_chip.select_chip is set to 0xFFFFFFFF, so
it hangs at that point. Whereas future power-on resets have the location
cleared to 0, so it works fine...
Explicitly setting select_chip to NULL in the call to board_nand_init for
omap_gpmc makes everything work fine:
drivers/mtd/nand/raw/omap_gpmc.c: board_nand_init()
...
writel(gpmc_config, &gpmc_cfg->config)
+ nand->select_chip = NULL;
+
nand->IO_ADDR_R = (void __iomem *)&gpmc_cfg->cs[cs].nand_dat;
...
But now I am worried about other things not being cleared out properly at
reset... The am335x SPL NAND driver is pretty old and presumably
well-tested code, so I was kinda surprised at this fix working. Would
anyone know if a configuration setting, compiler setting or similar
contributes to this? Or is it some artifact of the power-up state of the
board?
Is there a better way of 'clearing' the static nand_chip struct in
am335x_spl_bch.c, or is there really a missing setup of this function
pointer somewhere for am335x_spl_bch/omap_gpmc?
This is against TI's u-boot @ d77252021a85c72d7ff9a4e151b81c4b4b9e1205 ,
with a Variscite VAR-SOM-AM33 module. Just wanted to check with the list to
see if I am missing something...
Thanks,
Kevin
More information about the U-Boot
mailing list