[U-Boot] [PATCH v2 2/2] imx_common: detect USB serial downloader reliably
Stefan Agner
stefan at agner.ch
Sat Sep 9 00:16:40 UTC 2017
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.agner at 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.agner at toradex.com>
>> Acked-by: Marcel Ziswiler <marcel.ziswiler at toradex.com>
>> Tested-by: Fabio Estevam <fabio.estevam at 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 */
>>
More information about the U-Boot
mailing list