On 2017-09-08 16:41, Eric Nelson wrote: > Hi Stefan, > > On 09/08/2017 04:35 PM, Stefan Agner wrote: >> From: Stefan Agner <stefan.ag...@toradex.com> >> >> The current mechanism using SCR/GPR registers work well when >> the serial downloader boot mode has been selected explicitly >> (either via boot mode pins or using bmode command). However, >> in case the system entered boot ROM due to unbootable primary >> boot devices (e.g. empty eMMC), the SPL fails to detect that >> it has been downloaded through serial loader and tries to >> continue booting from eMMC: >> Trying to boot from MMC1 >> mmc_load_image_raw_sector: mmc block read error >> SPL: failed to boot from all boot devices >> ### ERROR ### Please RESET the board ### >> >> The only known way to reliably detect USB serial downloader >> is by checking the USB PHY receiver block power state... >> >> Signed-off-by: Stefan Agner <stefan.ag...@toradex.com> >> Acked-by: Marcel Ziswiler <marcel.ziswi...@toradex.com> >> Tested-by: Fabio Estevam <fabio.este...@nxp.com> >> --- >> >> Changes in v2: >> - Add comment that we infer boot ROM behavior from USB PHY state >> >> arch/arm/mach-imx/spl.c | 12 ++++++++++++ >> 1 file changed, 12 insertions(+) >> >> diff --git a/arch/arm/mach-imx/spl.c b/arch/arm/mach-imx/spl.c >> index 258578ac25..f3fec81de7 100644 >> --- a/arch/arm/mach-imx/spl.c >> +++ b/arch/arm/mach-imx/spl.c >> @@ -31,6 +31,18 @@ u32 spl_boot_device(void) >> if (((bmode >> 24) & 0x03) == 0x01) /* Serial Downloader */ >> return BOOT_DEVICE_BOARD; >> + /* >> + * The above method does not detect that the boot ROM used >> + * serial downloader in case the boot ROM descided to use the >> + * serial downloader as a fall back (primary boot source failed). >> + * > > Nit: should be "did not initialize" instead of "initialized".
Sorry, don't get that. Below I write "did not (yet) initialized"... -- Stefan > > Otherwise, this is a nice comment that describes the situation. > >> + * Infer that the boot ROM used the USB serial downloader by >> + * checking whether the USB PHY is currently active... This >> + * assumes that SPL did not (yet) initialized the USB PHY... >> + */ >> + if (is_usbphy_active()) >> + return BOOT_DEVICE_BOARD; >> + >> /* BOOT_CFG1[7:4] - see IMX6DQRM Table 8-8 */ >> switch ((reg & IMX6_BMODE_MASK) >> IMX6_BMODE_SHIFT) { >> /* EIM: See 8.5.1, Table 8-9 */ >> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot