[Skiboot] [PATCH v8 09/24] hdata: Create /ibm, opal/dump device tree node
Vasant Hegde
hegdevasant at linux.vnet.ibm.com
Mon Jun 17 03:10:09 AEST 2019
We use MPIPL system parameter to detect whether MPIPL is supported or not.
If its supported create new device tree node (/ibm,opal/dump) to pass all
dump related information to kernel. This patch creates new node and populates
below properties:
- compatible - dump version (ibm,opal-dump)
- fw-load-area - Memory used by OPAL to load kernel/initrd from PNOR
(KERNEL_LOAD_BASE & INITRAMFS_LOAD_BASE)
This is the temporary memory used by OPAL during boot.
Later Linux kernel is free to use this memory. We will
pass this information to Linux. If Linux kernel is using
these memory, it will make sure to create destination
memory to preserve content during MPIPL.
Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
---
hdata/spira.c | 24 ++++++++++++++++++++++++
hdata/spira.h | 1 +
2 files changed, 25 insertions(+)
diff --git a/hdata/spira.c b/hdata/spira.c
index b5ec20db9..d2ad8e168 100644
--- a/hdata/spira.c
+++ b/hdata/spira.c
@@ -934,6 +934,26 @@ static void dt_init_secureboot_node(const struct iplparams_sysparams *sysparams)
dt_add_property_cells(node, "hw-key-hash-size", hw_key_hash_size);
}
+static void add_opal_dump_node(void)
+{
+ u64 fw_load_area[4];
+ struct dt_node *node;
+
+ if (proc_gen < proc_gen_p9)
+ return;
+
+ opal_node = dt_new_check(dt_root, "ibm,opal");
+ node = dt_new(opal_node, "dump");
+ assert(node);
+ dt_add_property_string(node, "compatible", "ibm,opal-dump");
+
+ fw_load_area[0] = cpu_to_be64((u64)KERNEL_LOAD_BASE);
+ fw_load_area[1] = cpu_to_be64(KERNEL_LOAD_SIZE);
+ fw_load_area[2] = cpu_to_be64((u64)INITRAMFS_LOAD_BASE);
+ fw_load_area[3] = cpu_to_be64(INITRAMFS_LOAD_SIZE);
+ dt_add_property(node, "fw-load-area", fw_load_area, sizeof(fw_load_area));
+}
+
static void add_iplparams_sys_params(const void *iplp, struct dt_node *node)
{
const struct iplparams_sysparams *p;
@@ -1021,6 +1041,10 @@ static void add_iplparams_sys_params(const void *iplp, struct dt_node *node)
if (sys_attributes & SYS_ATTR_RISK_LEVEL)
dt_add_property(node, "elevated-risk-level", NULL, 0);
+ /* Populate OPAL dump node */
+ if (sys_attributes & SYS_ATTR_MPIPL_SUPPORTED)
+ add_opal_dump_node();
+
if (version >= 0x60 && proc_gen >= proc_gen_p9)
dt_init_secureboot_node(p);
}
diff --git a/hdata/spira.h b/hdata/spira.h
index 84bbcfee0..d29632821 100644
--- a/hdata/spira.h
+++ b/hdata/spira.h
@@ -364,6 +364,7 @@ struct iplparams_sysparams {
__be32 sys_eco_mode;
#define SYS_ATTR_MULTIPLE_TPM PPC_BIT32(0)
#define SYS_ATTR_RISK_LEVEL PPC_BIT32(3)
+#define SYS_ATTR_MPIPL_SUPPORTED PPC_BIT32(4)
__be32 sys_attributes;
__be32 mem_scrubbing;
__be16 cur_spl_value;
--
2.14.3
More information about the Skiboot
mailing list