[PATCH] powerpc/rtas: fix early boot failure.

Christophe Leroy christophe.leroy at c-s.fr
Mon Apr 1 22:14:13 AEDT 2019


Michael,

Looks like you missed this fix for rc3.

Christophe

Le 25/03/2019 à 09:43, Christophe Leroy a écrit :
> Commit 0df977eafc79 ("powerpc/6xx: Don't use SPRN_SPRG2 for storing
> stack pointer while in RTAS") changes the code to use a field in
> thread struct to store the stack pointer while in RTAS instead of
> using SPRN_SPRG2. It therefore converts all places which were
> manipulating SPRN_SPRG2 to use that field. During early startup,
> the zeroing of SPRN_SPRG2 has been replaced by a zeroing of that
> field in thread struct. But at least in start_here, that's done
> wrongly because it used the physical address of the fields while
> MMU is on at that time.
> 
> So the virtual address of the field should be used instead, but in
> the meantime, thread struct has already been zeroised and initialised
> so we can just drop this initialisation.
> 
> Reported-by: Larry Finger <Larry.Finger at lwfinger.net>
> Fixes: 0df977eafc79 ("powerpc/6xx: Don't use SPRN_SPRG2 for storing stack pointer while in RTAS")
> Signed-off-by: Christophe Leroy <christophe.leroy at c-s.fr>
> ---
>   arch/powerpc/kernel/head_32.S | 8 --------
>   1 file changed, 8 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
> index 48051c8977c5..e25b615e9f9e 100644
> --- a/arch/powerpc/kernel/head_32.S
> +++ b/arch/powerpc/kernel/head_32.S
> @@ -851,10 +851,6 @@ __secondary_start:
>   	tophys(r4,r2)
>   	addi	r4,r4,THREAD	/* phys address of our thread_struct */
>   	mtspr	SPRN_SPRG_THREAD,r4
> -#ifdef CONFIG_PPC_RTAS
> -	li	r3,0
> -	stw	r3, RTAS_SP(r4)		/* 0 => not in RTAS */
> -#endif
>   	lis	r4, (swapper_pg_dir - PAGE_OFFSET)@h
>   	ori	r4, r4, (swapper_pg_dir - PAGE_OFFSET)@l
>   	mtspr	SPRN_SPRG_PGDIR, r4
> @@ -941,10 +937,6 @@ start_here:
>   	tophys(r4,r2)
>   	addi	r4,r4,THREAD	/* init task's THREAD */
>   	mtspr	SPRN_SPRG_THREAD,r4
> -#ifdef CONFIG_PPC_RTAS
> -	li	r3,0
> -	stw	r3, RTAS_SP(r4)		/* 0 => not in RTAS */
> -#endif
>   	lis	r4, (swapper_pg_dir - PAGE_OFFSET)@h
>   	ori	r4, r4, (swapper_pg_dir - PAGE_OFFSET)@l
>   	mtspr	SPRN_SPRG_PGDIR, r4
> 


More information about the Linuxppc-dev mailing list