[Skiboot] [PATCH] Detect fused core mode and bail out
Joel Stanley
joel at jms.id.au
Wed May 6 23:35:02 AEST 2020
On Wed, 6 May 2020 at 10:57, Vaidyanathan Srinivasan
<svaidy at linux.ibm.com> wrote:
>
> From: Joel Stanley <joel at jms.id.au>
>
> Fused code mode is currently not supported in OPAL. Continuing to
> boot the system would result in errors at later stages of boot.
>
> Wait for console to be up and print message for developers to check
> and fix the system modes.
>
> Signed-off-by: Vaidyanathan Srinivasan <svaidy at linux.ibm.com>
> Signed-off-by: Joel Stanley <joel at jms.id.au>
> ---
> Test on ZZ:
> [ 160.055440456,7] CPU: Boot CPU PIR is 0x0840 PVR is 0x004e0203
> ...
> ...
> [ 171.356626043,3] NUVOTON: i2c device inaccessible
> [ 171.356627241,5] TPM: tpm node 0x3052d768 disabled
> [ 171.356628427,6] STB: no compatible tpm device found!
> [ 171.356630080,5] Trying to load OPAL LID 80f00103...
> [ 171.356631982,6] OPAL: Using FSP OPAL console
> [ 171.356632943,3] CPU: Detected unsupported fused core mode
> [ 171.356634425,3] ***********************************************
> [ 171.356635414,3] < assert failed at core/init.c:1285 >
>
> Test in Fleetwood with additional PVR patches:
> [ 438.337801715,7] CPU: Boot CPU PIR is 0x0110 PVR is 0x004e2102
> ...
> ...
> [ 441.222264932,3] CPU: Detected unsupported fused core mode
> [ 441.222266127,3] ***********************************************
> [ 441.222266980,3] < assert failed at core/init.c:1285 >
>
> This minimal patch can be included in skiboot stable streams to help
> developers detect and fix unsupported modes.
Cool. I tested it on this machine:
[ 96.493391427,7] CPU: Boot CPU PIR is 0x0030 PVR is 0x004e0202
...
[ 96.498644199,5] CHIP: Chip ID 0000 type: P9N DD2.21
[ 96.498700280,5] CHIP: Chip ID 0008 type: P9N DD2.21
[ 96.499290145,5] PLAT: Using virtual UART
[ 96.499595656,5] PLAT: Detected Witherspoon platform
...
[ 98.179946233,3] CPU: Detected unsupported fused core mode
[ 98.179976245,3] ***********************************************
[ 98.180013135,3] < assert failed at core/init.c:1289 >
So it does what I was after. Thanks!
Tested-by: Joel Stanley <joel at jms.id.au>
>
> --Vaidy
> ---
> core/init.c | 4 ++++
> include/processor.h | 16 ++++++++++++++++
> 2 files changed, 20 insertions(+)
>
> diff --git a/core/init.c b/core/init.c
> index 595d087f..89240f60 100644
> --- a/core/init.c
> +++ b/core/init.c
> @@ -1280,6 +1280,10 @@ void __noreturn __nomcount main_cpu_entry(const void *fdt)
> /* Install the OPAL Console handlers */
> init_opal_console();
>
> + if(is_fused_core(mfspr(SPR_PVR))) {
> + prerror("CPU: Detected unsupported fused core mode\n");
> + abort();
> + }
> /*
> * Some platforms set a flag to wait for SBE validation to be
> * performed by the BMC. If this occurs it leaves the SBE in a
> diff --git a/include/processor.h b/include/processor.h
> index 57c2ee13..42002fc0 100644
> --- a/include/processor.h
> +++ b/include/processor.h
> @@ -173,10 +173,12 @@
>
> /* PVR bits */
> #define SPR_PVR_TYPE 0xffff0000
> +#define SPR_PVR_CHIP_TYPE 0x0000f000
> #define SPR_PVR_VERS_MAJ 0x00000f00
> #define SPR_PVR_VERS_MIN 0x000000ff
>
> #define PVR_TYPE(_pvr) GETFIELD(SPR_PVR_TYPE, _pvr)
> +#define PVR_CHIP_TYPE(_pvr) GETFIELD(SPR_PVR_CHIP_TYPE, _pvr)
> #define PVR_VERS_MAJ(_pvr) GETFIELD(SPR_PVR_VERS_MAJ, _pvr)
> #define PVR_VERS_MIN(_pvr) GETFIELD(SPR_PVR_VERS_MIN, _pvr)
>
> @@ -228,6 +230,20 @@ static inline bool is_power9n(uint32_t version)
> return true;
> }
>
> +static inline bool is_fused_core(uint32_t version)
> +{
> + if (PVR_TYPE(version) != PVR_TYPE_P9)
> + return false;
> +
> + switch(PVR_CHIP_TYPE(version)) {
> + case 0:
> + case 2:
> + return true;
> + default:
> + return false;
> + }
> +}
> +
> #ifndef __TEST__
>
> /*
> --
> 2.26.2
>
More information about the Skiboot
mailing list