[Skiboot] [PATCH 01/14] hdat: Add new fields to IPL params structure

Oliver O'Halloran oohall at gmail.com
Thu Jan 12 17:15:32 AEDT 2017


On Thu, Jan 12, 2017 at 5:07 PM, Vasant Hegde
<hegdevasant at linux.vnet.ibm.com> wrote:
> On 01/12/2017 09:24 AM, Oliver O'Halloran wrote:
>>
>> From: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
>>
>> Add new fields to sys params structure and update sys family for p9.
>>
>> In P9 the compatible string is supplied by hostboot through the HDAT.
>> This patch add support for using these strings to set the compatible
>> property in the device tree rather than using the machine ID number
>> scheme traditionally used in the HDAT.
>>
>> [removed ibm,firenze from, add some prints - Oliver]
>> Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
>> [Folded Oliver's changes to original patch - Vasant]
>> Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
>> ---
>>   hdata/spira.c | 63
>> +++++++++++++++++++++++++++++++++++++----------------------
>>   hdata/spira.h | 28 +++++++++++++++++++++++++-
>>   2 files changed, 67 insertions(+), 24 deletions(-)
>>
>> diff --git a/hdata/spira.c b/hdata/spira.c
>> index f87aa2712023..a19b4db92a8a 100644
>> --- a/hdata/spira.c
>> +++ b/hdata/spira.c
>> @@ -756,8 +756,6 @@ static void add_nx(void)
>>   static void add_iplparams_sys_params(const void *iplp, struct dt_node
>> *node)
>>   {
>>         const struct iplparams_sysparams *p;
>> -       u32 sys_type;
>> -       const char *sys_family;
>>         const struct HDIF_common_hdr *hdif = iplp;
>>         u16 version = be16_to_cpu(hdif->version);
>>
>> @@ -776,29 +774,48 @@ static void add_iplparams_sys_params(const void
>> *iplp, struct dt_node *node)
>>
>>         dt_add_property_nstr(node, "ibm,sys-model", p->sys_model, 4);
>>
>> -       /* Compatible is 2 entries: ibm,powernv and ibm,<platform>
>> +       /*
>> +        * Compatible has up to three entries:
>> +        *      "ibm,powernv", the system family and system type.
>> +        *
>> +        * On P9 and above the family and type strings come from the HDAT
>> +        * directly. On P8 we find it from the system ID numbers.
>>          */
>> -       sys_type = be32_to_cpu(p->system_type);
>> -       switch(sys_type >> 28) {
>> -       case 0:
>> -               sys_family = "ibm,squadrons";
>> -               break;
>> -       case 1:
>> -               sys_family = "ibm,eclipz";
>> -               break;
>> -       case 2:
>> -               sys_family = "ibm,apollo";
>> -               break;
>> -       case 3:
>> -               sys_family = "ibm,firenze";
>> -               break;
>> -       default:
>> -               sys_family = NULL;
>> -               prerror("IPLPARAMS: Unknown system family\n");
>> -               break;
>> +       if (proc_gen >= proc_gen_p9) {
>> +               dt_add_property_strings(dt_root, "compatible",
>> "ibm,powernv",
>> +                                       p->sys_family_str,
>> p->sys_type_str);
>> +
>> +               prlog(PR_INFO, "IPLPARAMS: v0x70 Platform family/type:
>> %s/%s\n",
>> +                     p->sys_family_str, p->sys_type_str);
>> +       } else {
>> +               u32 sys_type = be32_to_cpu(p->system_type);
>> +               const char *sys_family;
>> +
>> +               switch (sys_type >> 28) {
>> +               case 0:
>> +                       sys_family = "ibm,squadrons";
>> +                       break;
>> +               case 1:
>> +                       sys_family = "ibm,eclipz";
>> +                       break;
>> +               case 2:
>> +                       sys_family = "ibm,apollo";
>> +                       break;
>> +               case 3:
>> +                       sys_family = "ibm,firenze";
>> +                       break;
>> +               default:
>> +                       sys_family = NULL;
>> +                       prerror("IPLPARAMS: Unknown system family\n");
>> +                       break;
>> +               }
>> +
>> +               dt_add_property_strings(dt_root, "compatible",
>> "ibm,powernv",
>> +                                       sys_family);
>> +               prlog(PR_INFO,
>> +                     "IPLPARAMS: Legacy platform family: %s"
>> +                     " (sys_type=0x%08x)\n", sys_family, sys_type);
>
>
> Now like me you are also started breaking test cases ;-)
>
> Can you please update test case?
>
> --- hdata/test/p81-811.spira.dt 2017-01-12 11:23:31.798738346 +0530
> +++ -   2017-01-12 11:31:17.888269642 +0530
> @@ -59,6 +59,7 @@
>  CORE[19]: HW_PROC_ID=23 PROC_CHIP_ID=3 EC=0x21 OK
>  CORE[19]: PIR=-267911168 RES=-267911168 OK (8 threads)
>      Cache: I=32 D=64/512/8192/0
> +IPLPARAMS: Legacy platform family: ibm,firenze (sys_type=0x30110000)
>  IPLPARAMS: 1 serial ports in array
>  IPLPARAMS: Serial 0 rsrc: 2a00 loc: U78CB.001.WZS00AL-P1-C1-T1
>  MS VPD: Total MB of RAM: 0x20000

Heh, I noticed this about a minute after I sent it. Oh well.

>
>
>>         }
>> -       dt_add_property_strings(dt_root, "compatible", "ibm,powernv",
>> -                               sys_family);
>>
>>         /* Grab nest frequency when available */
>>         if (version >= 0x005b) {
>> diff --git a/hdata/spira.h b/hdata/spira.h
>> index eae7ac909d7c..b04a3df33f73 100644
>> --- a/hdata/spira.h
>> +++ b/hdata/spira.h
>> @@ -323,6 +323,17 @@ struct iplparams_sysparams {
>>         uint8_t         hw_page_table_size;     /* >= 0x59 */
>>         __be16          hv_disp_wheel;          /* >= 0x58 */
>>         __be32          nest_freq_mhz;          /* >= 0x5b */
>> +       uint8_t         split_core_mode;        /* >= 0x5c */
>> +       uint8_t         reserved[3];
>> +       uint8_t         sys_vendor[64];         /* >= 0x5f */
>> +       /* >= 0x60 */
>> +       __be16          sys_sec_setting;
>> +       __be16          tpm_config_bit;
>> +       __be16          tpm_drawer;
>> +       __be16          reserved2;
>> +       uint8_t         hw_key_hash[64];
>> +       uint8_t         sys_family_str[64];     /* vendor,name */
>> +       uint8_t         sys_type_str[64];       /* vendor,type */
>>   } __packed;
>>
>>   /* Idata index 1: IPL parameters */
>> @@ -351,7 +362,11 @@ struct iplparams_iplparams {
>>         uint8_t         huge_page_size;
>>   #define IPLPARAMS_HUGE_PG_SIZE_16G    0
>>         uint8_t         num_vlan_switches;
>> -       __be64          reserved2;
>> +       __be32          reserved2;
>> +       __be32          enlarge_io;     /* >= 0x5a */
>> +       uint8_t         core_config;
>> +#define IPLPARAMS_CORE_NORMAL  0x00
>> +#define IPLPARAMS_CORE_FUSE    0x01
>>   };
>>
>>   /* Idata index 4: Platform Dump Descriptor */
>> @@ -461,6 +476,17 @@ struct msvpd_pmover_bsr_synchro {
>>
>>   /* Idata index 4: UE Address Array */
>>
>> +/* Idata index 5: Hostboot reserved memory address range */
>> +#define MSVPD_IDATA_HB_RESERVED_MEM    5
>> +struct msvpd_hb_reserved_mem {
>> +       __be32          node_instance;
>> +       __be64          start_addr;
>> +       __be64          end_addr;
>> +       __be32          label_size;
>> +       uint8_t         label[64];
>> +       __be64          reserved;
>> +};
>> +
>
>
> I think we should move this hunk to next patch as its related to hostboot
> memory. Otherwise I'm fine with this patch.

Looks like I squashed this into the wrong patch. I'll fix it in the respin.


More information about the Skiboot mailing list