[U-Boot] [PATCH v2 2/2] ARM: mach-mvebu: handle fall-back to UART boot

Stefan Roese sr at denx.de
Wed Sep 19 12:16:37 UTC 2018


On 17.08.2018 10:47, Chris Packham wrote:
> The bootROM in the Armada-38x (and similar) SoC has two modes for UART
> boot. The first is when the normal boot media is blank (or otherwise
> missing the kwb header). The second is when the boot sequence has been
> interrupted with the magic byte sequence on the UART lines.
> 
> In the first mode the bootROM routine and error code register will
> indicate that there was an error booting from the configured media in
> bits 7:0. In the second mode there is no error to indicate but the boot
> source is provided via bits 31:28.
> 
> Handle both situations so that kwboot can be used for both boot
> strapping a blank board and for intercepting a regular boot sequence.
> 
> Signed-off-by: Chris Packham <judge.packham at gmail.com>
> ---
> I think this probably applies to more than just the A38X but I've been
> conservative in restricting this for now. If other Marvell SoCs are
> found to have the same behaviour we can extend this to cover them.
> 
> Changes in v2:
> - new
> 
>   arch/arm/mach-mvebu/include/mach/soc.h |  2 ++
>   arch/arm/mach-mvebu/spl.c              | 10 ++++++++++
>   2 files changed, 12 insertions(+)
> 
> diff --git a/arch/arm/mach-mvebu/include/mach/soc.h b/arch/arm/mach-mvebu/include/mach/soc.h
> index 660dd148abc5..6e2e14efe0b7 100644
> --- a/arch/arm/mach-mvebu/include/mach/soc.h
> +++ b/arch/arm/mach-mvebu/include/mach/soc.h
> @@ -114,6 +114,8 @@
>   #define BOOTROM_ERR_MODE_OFFS	28
>   #define BOOTROM_ERR_MODE_MASK	(0xf << BOOTROM_ERR_MODE_OFFS)
>   #define BOOTROM_ERR_MODE_UART	0x6
> +#define BOOTROM_ERR_CODE_OFFS	0
> +#define BOOTROM_ERR_CODE_MASK	(0xf << BOOTROM_ERR_CODE_OFFS)
>   
>   #if defined(CONFIG_ARMADA_375)
>   /* SAR values for Armada 375 */
> diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
> index 4c3933b8354d..9dd7c84b6874 100644
> --- a/arch/arm/mach-mvebu/spl.c
> +++ b/arch/arm/mach-mvebu/spl.c
> @@ -28,6 +28,16 @@ static u32 get_boot_device(void)
>   	if (boot_device == BOOTROM_ERR_MODE_UART)
>   		return BOOT_DEVICE_UART;
>   
> +#ifdef CONFIG_ARMADA_38X
> +	/*
> +	 * If the bootrom error code contains any other than zeros it's an
> +	 * error condition and the bootROM has fallen back to UART boot
> +	 */
> +	boot_device = (val & BOOTROM_ERR_CODE_MASK) >> BOOTROM_ERR_CODE_OFFS;
> +	if (boot_device)
> +		return BOOT_DEVICE_UART;
> +#endif
> +
>   	/*
>   	 * Now check the SAR register for the strapped boot-device
>   	 */
> 

Applied to u-boot-marvell/master

Thanks,
Stefan


More information about the U-Boot mailing list