[Skiboot] [PATCH] hdat: add support for system and type strings
Oliver O'Halloran
oohall at gmail.com
Mon Oct 10 19:41:41 AEDT 2016
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.
Cc: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
---
hdata/spira.c | 59 ++++++++++++++++++++++++++++++++++++-----------------------
hdata/spira.h | 11 +++++++++++
2 files changed, 47 insertions(+), 23 deletions(-)
diff --git a/hdata/spira.c b/hdata/spira.c
index 592197e7685b..c83146ab0991 100644
--- a/hdata/spira.c
+++ b/hdata/spira.c
@@ -752,8 +752,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);
@@ -772,29 +770,44 @@ 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 (version >= 0x70) {
+ dt_add_property_strings(dt_root, "compatible",
+ "ibm,powernv", 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:
+ case 4: /* HACK: this is actually "ibm,p9", but there's no
+ * useful destinction between the two right now */
+ 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);
}
- 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 eabf7f953ab7..b2863342f5a5 100644
--- a/hdata/spira.h
+++ b/hdata/spira.h
@@ -321,6 +321,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 reserved1[3];
+ uint8_t vendor_name[64]; /* >= 0x5f */
+ __be16 sys_sec_settings; /* >= 0x60 */
+ __be16 tpm_config;
+ __be16 tmps_per_drawer;
+ __be16 reserved2;
+ uint8_t hw_hash_keys;
+ uint8_t sys_family_str[64]; /* >= 0x70 */
+ uint8_t sys_type_str[64];
+
} __packed;
/* Idata index 1: IPL parameters */
--
2.5.5
More information about the Skiboot
mailing list