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

Oliver O'Halloran oohall at gmail.com
Thu Jan 12 14:54:00 AEDT 2017


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);
 	}
-	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;
+};
+
 /* Child index 0: MS area child structure */
 #define MSVPD_CHILD_MS_AREAS		0
 
-- 
2.7.4



More information about the Skiboot mailing list