[Skiboot] [PATCH v3 3/4] hdat: Grab system model name from HDAT when available

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Fri Jan 13 19:38:25 AEDT 2017


Latest spec added system model information to IPL PARAMS ntuple.
Grab this information when available instead of using hardcoded
table (machine_table).

Its better to parse all IPL params in one place. But on P8 we depend
on model information ..which we get from sysvpd_parse(). Hence for now
I've added code inside sysvpd_parse().

Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
---
 hdata/vpd.c | 42 ++++++++++++++++++++++++++++++++++--------
 1 file changed, 34 insertions(+), 8 deletions(-)

diff --git a/hdata/vpd.c b/hdata/vpd.c
index a463170..a42f1f5 100644
--- a/hdata/vpd.c
+++ b/hdata/vpd.c
@@ -598,6 +598,38 @@ struct dt_node *dt_add_vpd_node(const struct HDIF_common_hdr *hdr,
 	return node;
 }
 
+static void dt_add_model_name(char *model)
+{
+	const char *model_name = NULL;
+	const struct machine_info *mi;
+	const struct iplparams_sysparams *p;
+	const struct HDIF_common_hdr *iplp;
+
+	iplp = get_hdif(&spira.ntuples.ipl_parms, "IPLPMS");
+	if (!iplp)
+		goto def_model;
+
+	p = HDIF_get_idata(iplp, IPLPARAMS_SYSPARAMS, NULL);
+	if (!CHECK_SPPTR(p))
+		goto def_model;
+
+	if (be16_to_cpu(iplp->version) >= 0x60)
+		model_name = p->sys_type_str;
+
+def_model:
+	if (!model_name || model_name[0] == '\0') {
+		mi = machine_info_lookup(model);
+		if (mi) {
+			model_name = mi->name;
+		} else {
+			model_name = "Unknown";
+			prlog(PR_WARNING, "VPD: Model name %s not known\n", model);
+		}
+	}
+
+	dt_add_property_string(dt_root, "model-name", model_name);
+}
+
 static void sysvpd_parse(void)
 {
 	const char *model;
@@ -611,7 +643,6 @@ static void sysvpd_parse(void)
 	struct dt_node *dt_vpd;
 	const struct spira_fru_id *fru_id;
 	struct HDIF_common_hdr *sysvpd_hdr;
-	const struct machine_info *mi;
 
 	sysvpd_hdr = get_hdif(&spira.ntuples.system_vpd, SYSVPD_HDIF_SIG);
 	if (!sysvpd_hdr)
@@ -640,13 +671,8 @@ static void sysvpd_parse(void)
 		goto no_sysvpd;
 	memcpy(str, model, sz);
 	dt_add_property_string(dt_root, "model", str);
-	mi = machine_info_lookup(str);
-	if (mi) {
-		dt_add_property_string(dt_root, "model-name", mi->name);
-	} else {
-		dt_add_property_string(dt_root, "model-name", "Unknown");
-		prlog(PR_WARNING, "VPD: Model name %s not known\n", str);
-	}
+
+	dt_add_model_name(str);
 
 	free(str);
 
-- 
2.5.5



More information about the Skiboot mailing list