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

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Thu Jan 12 17:07:44 AEDT 2017


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

>   	}
> -	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.

-Vasant



More information about the Skiboot mailing list