From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Nelson Date: Wed, 13 Sep 2017 22:24:33 -0700 Subject: [U-Boot] [PATCH v3 2/2] imx_common: detect USB serial downloader reliably In-Reply-To: <20170913212945.5659-2-stefan@agner.ch> References: <20170913212945.5659-1-stefan@agner.ch> <20170913212945.5659-2-stefan@agner.ch> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Stefan, Thanks for this patch. On 09/13/2017 02:29 PM, Stefan Agner wrote: > From: Stefan Agner > > 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 > Acked-by: Marcel Ziswiler > Tested-by: Fabio Estevam > --- > > Changes in v4: > - Rename macro to is_usbotg_phy_active() > > Changes in v3: > - Fix spelling and grammar > > 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..534cc6504d 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 decided to use the > + * serial downloader as a fall back (primary boot source failed). > + * > + * 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) initialize the USB PHY... > + */ > + if (is_otgusb_phy_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 */ > Reviewed-by: Eric Nelson