[PATCH 02/10] bsps/arm: Support recent bootloaders starting kernel in HYP mode

Pavel Pisa pisa at cmp.felk.cvut.cz
Mon Jul 4 09:13:47 UTC 2016


Minor correction

On Monday 04 of July 2016 10:45:53 Pavel Pisa wrote:
> >
> > 	mov	r0, r4		/* original cpsr value */
> > 	mov	r1, r5		/* machine type number or ~0 for DT boot */
> > 	mov	r2, r6		/* physical address of ATAGs or DTB */
> >
> > before call to bsp_start_hook_1. And I liked the idea that
> > both (all) calls have same prototype.
>
> The approach is not to be done easily. There is
>
> bsp_vector_table_copy
>
> 	ldmia	r1!, {r2-r9}
> 	stmia	r0!, {r2-r9}
> 	ldmia	r1!, {r2-r9}
> 	stmia	r0!, {r2-r9}
>
> before
>
> 	bl	bsp_start_hook_1
>
> so that would require to add
>
> diff --git a/c/src/lib/libbsp/arm/shared/start/start.S
> b/c/src/lib/libbsp/arm/shared/start/start.S index 0848fff..8b9ec6b 100644
> --- a/c/src/lib/libbsp/arm/shared/start/start.S
> +++ b/c/src/lib/libbsp/arm/shared/start/start.S
> @@ -325,6 +325,8 @@ bsp_start_hook_0_done:
>          * vectors and the pointers to the default exception handlers.
>          */
>
> +       stmdb   sp!, {r4, r5, r6}
> +
>         ldr     r0, =bsp_vector_table_begin
>         adr     r1, bsp_start_vector_table_begin
>         cmp     r0, r1
> @@ -336,6 +338,8 @@ bsp_start_hook_0_done:
>
>  bsp_vector_table_copy_done:
>
> +       ldmia   sp!, {r0, r1, r2}
> +
>         SWITCH_FROM_ARM_TO_THUMB        r0

Has to be changed to other register

        SWITCH_FROM_ARM_TO_THUMB        r3

>
>         /* Branch to start hook 1 */
>
> So I am not sure if gain worth this price. The complete
> updated patch on on GitHub

with fix included

https://github.com/ppisa/rtems/commit/25a7041bca92e4f7a8b9a4906e0ee2b1955faac4

checked to pass correct initial PSR on RPi2 starting in HYP mode.

Best wishes,

            Pavel


More information about the devel mailing list