[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