[RESEND PATCH v2] arm64: zynqmp: Support semihosting boot method

Michal Simek michal.simek at amd.com
Fri Feb 23 08:46:14 CET 2024



On 2/22/24 21:05, Sean Anderson wrote:
> Currently, when we boot from JTAG we try to boot U-Boot from RAM.
> However, this is a bit tricky to time, since the debugger has to wait
> for SPL to initialize RAM before it can load U-Boot. This can result in
> long waits, since occasionally initializing RAM (and other things in
> psu_init) takes a long time to complete and the debugger must wait for
> this worst case.
> 
> Support semihosting if it is enabled, as it lets U-Boot tell the
> debugger when we are ready for the image. This means we don't have to
> wait any more than necessary. We don't change the default config to
> ensure we don't break compatibility with existing debuggers that don't
> expect us to hit semihosting breakpoints.
> 
> Signed-off-by: Sean Anderson <sean.anderson at linux.dev>
> ---
> I'm resending this from my linux.dev email as my regular email is
> mangling my patches.
> 
> Changes in v2:
> - Fix typo in subject
> 
>   arch/arm/mach-zynqmp/spl.c | 10 ++++++++--
>   1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/mach-zynqmp/spl.c b/arch/arm/mach-zynqmp/spl.c
> index a0f35f36faa..5af735aa5ce 100644
> --- a/arch/arm/mach-zynqmp/spl.c
> +++ b/arch/arm/mach-zynqmp/spl.c
> @@ -9,6 +9,7 @@
>   #include <image.h>
>   #include <init.h>
>   #include <log.h>
> +#include <semihosting.h>
>   #include <spl.h>
>   #include <linux/delay.h>
>   
> @@ -66,6 +67,11 @@ void spl_board_init(void)
>   }
>   #endif
>   
> +static u32 jtag_boot_device(void)
> +{
> +	return semihosting_enabled() ? BOOT_DEVICE_SMH : BOOT_DEVICE_RAM;
> +}
> +
>   void board_boot_order(u32 *spl_boot_list)
>   {
>   	spl_boot_list[0] = spl_boot_device();
> @@ -75,7 +81,7 @@ void board_boot_order(u32 *spl_boot_list)
>   	if (spl_boot_list[0] == BOOT_DEVICE_MMC2)
>   		spl_boot_list[1] = BOOT_DEVICE_MMC1;
>   
> -	spl_boot_list[2] = BOOT_DEVICE_RAM;
> +	spl_boot_list[2] = jtag_boot_device();
>   }
>   
>   u32 spl_boot_device(void)
> @@ -97,7 +103,7 @@ u32 spl_boot_device(void)
>   
>   	switch (bootmode) {
>   	case JTAG_MODE:
> -		return BOOT_DEVICE_RAM;
> +		return jtag_boot_device();
>   #ifdef CONFIG_SPL_MMC
>   	case SD_MODE1:
>   	case SD1_LSHFT_MODE: /* not working on silicon v1 */


Applied.
M


More information about the U-Boot mailing list