[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