diff mbox

[Zesty] UBUNTU: SAUCE: powerpc/powernv: Tell OPAL about our MMU mode on POWER9

Message ID 257fb62e-f7ba-aa1c-8868-3033a4394d7f@canonical.com
State New
Headers show

Commit Message

Stefan Bader July 18, 2017, 7:11 a.m. UTC
On 18.07.2017 03:05, Michael Ellerman wrote:
> Breno Leitao <leitao@debian.org> writes:
> 
>> diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
>> index e0f856bfbfe8..a3b6de84f49c 100644
>> --- a/arch/powerpc/platforms/powernv/opal.c
>> +++ b/arch/powerpc/platforms/powernv/opal.c
>> @@ -66,11 +68,24 @@ void opal_configure_cores(void)
>>  	 * but it might clobber a bunch.
>>  	 */
>>  #ifdef __BIG_ENDIAN__
>> -	opal_reinit_cpus(OPAL_REINIT_CPUS_HILE_BE);
>> +	reinit_flags |= OPAL_REINIT_CPUS_HILE_BE;
>>  #else
>> -	opal_reinit_cpus(OPAL_REINIT_CPUS_HILE_LE);
>> +	reinit_flags |= OPAL_REINIT_CPUS_HILE_LE;
>>  #endif
>>  
>> +	/*
>> +	 * POWER9 always support running hash:
>> +	 *  ie. Host hash  supports  hash guests
>> +	 *      Host radix supports  hash/radix guests
>> +	 */
>> +	if (cpu_has_feature(CPU_FTR_ARCH_300)) {
> 
> This is wrong. It can break booting on bare-metal Power8 machines with
> some versions of firmware.
> 
> Fix here:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?h=fixes&id=a70b487b07cf4201bc6702e7f646fa593b23009f
> 
> http://patchwork.ozlabs.org/patch/789381/

Ok, that is in linux-next by now (see attached).

-Stefan
> 
> 
> cheers
>

Comments

Kleber Sacilotto de Souza July 18, 2017, 7:42 a.m. UTC | #1
On 07/18/17 09:11, Stefan Bader wrote:
> On 18.07.2017 03:05, Michael Ellerman wrote:
>> Breno Leitao <leitao@debian.org> writes:
>>
>>> diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
>>> index e0f856bfbfe8..a3b6de84f49c 100644
>>> --- a/arch/powerpc/platforms/powernv/opal.c
>>> +++ b/arch/powerpc/platforms/powernv/opal.c
>>> @@ -66,11 +68,24 @@ void opal_configure_cores(void)
>>>  	 * but it might clobber a bunch.
>>>  	 */
>>>  #ifdef __BIG_ENDIAN__
>>> -	opal_reinit_cpus(OPAL_REINIT_CPUS_HILE_BE);
>>> +	reinit_flags |= OPAL_REINIT_CPUS_HILE_BE;
>>>  #else
>>> -	opal_reinit_cpus(OPAL_REINIT_CPUS_HILE_LE);
>>> +	reinit_flags |= OPAL_REINIT_CPUS_HILE_LE;
>>>  #endif
>>>  
>>> +	/*
>>> +	 * POWER9 always support running hash:
>>> +	 *  ie. Host hash  supports  hash guests
>>> +	 *      Host radix supports  hash/radix guests
>>> +	 */
>>> +	if (cpu_has_feature(CPU_FTR_ARCH_300)) {
>>
>> This is wrong. It can break booting on bare-metal Power8 machines with
>> some versions of firmware.
>>
>> Fix here:
>>
>> https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?h=fixes&id=a70b487b07cf4201bc6702e7f646fa593b23009f
>>
>> http://patchwork.ozlabs.org/patch/789381/
> 
> Ok, that is in linux-next by now (see attached).
> 
> -Stefan

Attached patch (powerpc/powernv: Fix boot on Power8 bare metal due to
opal_configure_cores()) acked and applied to zesty/master-next branch.

Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
Seth Forshee July 18, 2017, 12:24 p.m. UTC | #2
On Tue, Jul 18, 2017 at 09:42:59AM +0200, Kleber Souza wrote:
> On 07/18/17 09:11, Stefan Bader wrote:
> > On 18.07.2017 03:05, Michael Ellerman wrote:
> >> Breno Leitao <leitao@debian.org> writes:
> >>
> >>> diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
> >>> index e0f856bfbfe8..a3b6de84f49c 100644
> >>> --- a/arch/powerpc/platforms/powernv/opal.c
> >>> +++ b/arch/powerpc/platforms/powernv/opal.c
> >>> @@ -66,11 +68,24 @@ void opal_configure_cores(void)
> >>>  	 * but it might clobber a bunch.
> >>>  	 */
> >>>  #ifdef __BIG_ENDIAN__
> >>> -	opal_reinit_cpus(OPAL_REINIT_CPUS_HILE_BE);
> >>> +	reinit_flags |= OPAL_REINIT_CPUS_HILE_BE;
> >>>  #else
> >>> -	opal_reinit_cpus(OPAL_REINIT_CPUS_HILE_LE);
> >>> +	reinit_flags |= OPAL_REINIT_CPUS_HILE_LE;
> >>>  #endif
> >>>  
> >>> +	/*
> >>> +	 * POWER9 always support running hash:
> >>> +	 *  ie. Host hash  supports  hash guests
> >>> +	 *      Host radix supports  hash/radix guests
> >>> +	 */
> >>> +	if (cpu_has_feature(CPU_FTR_ARCH_300)) {
> >>
> >> This is wrong. It can break booting on bare-metal Power8 machines with
> >> some versions of firmware.
> >>
> >> Fix here:
> >>
> >> https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?h=fixes&id=a70b487b07cf4201bc6702e7f646fa593b23009f
> >>
> >> http://patchwork.ozlabs.org/patch/789381/
> > 
> > Ok, that is in linux-next by now (see attached).
> > 
> > -Stefan
> 
> Attached patch (powerpc/powernv: Fix boot on Power8 bare metal due to
> opal_configure_cores()) acked and applied to zesty/master-next branch.

Also applied to artful/master-next and unstable/master.
diff mbox

Patch

From a70b487b07cf4201bc6702e7f646fa593b23009f Mon Sep 17 00:00:00 2001
From: Michael Ellerman <mpe@ellerman.id.au>
Date: Mon, 17 Jul 2017 21:19:01 +1000
Subject: [PATCH] powerpc/powernv: Fix boot on Power8 bare metal due to
 opal_configure_cores()

In commit 1c0eaf0f56d6 ("powerpc/powernv: Tell OPAL about our MMU mode
on POWER9"), we added additional flags to the OPAL call to configure
CPUs at boot.

These flags only work on Power9 firmwares, and worse can cause boot
failures on Power8 machines, so we check for CPU_FTR_ARCH_300 (aka POWER9)
before adding the extra flags.

Unfortunately we forgot that opal_configure_cores() is called before
the CPU feature checks are dynamically patched, meaning the check
always returns true.

We definitely need to do something to make the CPU feature checks less
prone to bugs like this, but for now the minimal fix is to use
early_cpu_has_feature().

Reported-and-tested-by: Abdul Haleem <abdhalee@linux.vnet.ibm.com>
Fixes: 1c0eaf0f56d6 ("powerpc/powernv: Tell OPAL about our MMU mode on POWER9")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

BugLink: http://bugs.launchpad.net/bugs/1702159

(cherry-picked from commit a70b487b07cf4201bc6702e7f646fa593b23009f linux-next)
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
---
 arch/powerpc/platforms/powernv/opal.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
index 9b87abb..cad6b57 100644
--- a/arch/powerpc/platforms/powernv/opal.c
+++ b/arch/powerpc/platforms/powernv/opal.c
@@ -78,7 +78,7 @@  void opal_configure_cores(void)
 	 *  ie. Host hash  supports  hash guests
 	 *      Host radix supports  hash/radix guests
 	 */
-	if (cpu_has_feature(CPU_FTR_ARCH_300)) {
+	if (early_cpu_has_feature(CPU_FTR_ARCH_300)) {
 		reinit_flags |= OPAL_REINIT_CPUS_MMU_HASH;
 		if (early_radix_enabled())
 			reinit_flags |= OPAL_REINIT_CPUS_MMU_RADIX;
-- 
2.7.4