2015-04-14 20:07 GMT+02:00 Matt Porter <mpor...@konsulko.com>:
>
> On ARM v7M, the processor will return to ARM mode when executing
> a blx instruction with bit 0 of the address == 0. Always set it
> to 1 to stay in thumb mode.
>
> Signed-off-by: Matt Porter <mpor...@konsulko.com>
> ---
>  common/cmd_boot.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/common/cmd_boot.c b/common/cmd_boot.c
> index 8f2e070..20ce652 100644
> --- a/common/cmd_boot.c
> +++ b/common/cmd_boot.c
> @@ -38,6 +38,10 @@ static int do_go(cmd_tbl_t *cmdtp, int flag, int argc, 
> char * const argv[])
>          * pass address parameter as argv[0] (aka command name),
>          * and all remaining args
>          */
> +#ifdef CONFIG_CPU_V7M
> +       /* For ARM V7M, set bit zero to stay in Thumb mode */
> +       addr++;
> +#endif
>         rc = do_go_exec ((void *)addr, argc - 1, argv + 1);
>         if (rc != 0) rcode = 1;
>
> --
> 2.1.0
>
>

I think addr |= 1 would be better - there is always a possibility that
kernel image has the zero bit already set (this is the case in my own
Buildroot build setup I am using for STM32F4 builds). Anyways -
keeping this bit set should be the responsibility of kernel image
build process so such machine specific quirk can be kept out of the
common code.

/Kamil
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to