[OpenBIOS] [PATCH] ppc: move init-program client stack to 1:1 virt to phys mapped memory

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Sun Aug 26 15:20:07 CEST 2018


On 17/08/18 10:35, Mark Cave-Ayland wrote:

> The default context used by init-program is allocated from the OpenBIOS
> heap which uses a different virt to phys mapping to avoid having to
> physically relocate the PROM on startup for PPC machines.
> 
> It seems that the OpenBSD bootloader isn't happy with this change
> introduced by the context rework, most likely because there is an
> assumption that the client stack is mapped 1:1 virt to phys.
> 
> Fix this by overriding the default context stack during init-program
> to a location just under the MMU hash table (SDR1) which was its
> previous hard-coded location in 1:1 virt to phys mapped memory, and
> allow OpenBSD to boot.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
> ---
>  arch/ppc/qemu/context.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/arch/ppc/qemu/context.c b/arch/ppc/qemu/context.c
> index 03ca173..06e0122 100644
> --- a/arch/ppc/qemu/context.c
> +++ b/arch/ppc/qemu/context.c
> @@ -16,6 +16,7 @@
>  #include "libopenbios/ofmem.h"
>  #include "libopenbios/initprogram.h"
>  #include "libopenbios/sys_info.h"
> +#include "arch/ppc/processor.h"
>  
>  #define MAIN_STACK_SIZE 16384
>  #define IMAGE_STACK_SIZE 4096*2
> @@ -232,6 +233,14 @@ arch_init_program(void)
>      ctx->regs[REG_R6] = 0;
>      ctx->regs[REG_R7] = 0;
>  
> +    /* Override the stack in the default context: the OpenBSD bootloader
> +       fails soon after setting up virt to phys mappings with the default
> +       stack. My best guess is that this is because the malloc() heap
> +       doesn't have a 1:1 virt to phys mapping. So for the moment we use
> +       the original (pre-context) location just under the MMU hash table
> +       (SDR1) which is mapped 1:1 and makes the bootloader happy. */
> +    ctx->sp = mfsdr1() - 32768 - 65536;
> +
>      /* Set param */
>      feval("load-state >ls.param @");
>      param = POP();

Applied to master.


ATB,

Mark.



More information about the OpenBIOS mailing list