aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasant Hegde <hegdevasant@linux.vnet.ibm.com>2019-07-12 16:47:41 +0530
committerOliver O'Halloran <oohall@gmail.com>2019-08-15 17:52:30 +1000
commit0b667811f2d1748d4fd904ba1d84da7ed7987f2e (patch)
tree3dbe160cbfe0162647888dace7a795bbf127716d
parent9d57eb465222b33c317fde6f7c0d15ef255f989a (diff)
downloadskiboot-0b667811f2d1748d4fd904ba1d84da7ed7987f2e.zip
skiboot-0b667811f2d1748d4fd904ba1d84da7ed7987f2e.tar.gz
skiboot-0b667811f2d1748d4fd904ba1d84da7ed7987f2e.tar.bz2
hdata: Define various DUMP related structures
- MDDT is used by OPAL to pass destination memory details to hostboot. - MDRT is used by hostboot to pass post dump result table to OPAL. - Processor dump area is used to capture architected register data. Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> [oliver: rebased] Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
-rw-r--r--hdata/spira.c1
-rw-r--r--hdata/spira.h3
-rw-r--r--include/opal-dump.h67
3 files changed, 70 insertions, 1 deletions
diff --git a/hdata/spira.c b/hdata/spira.c
index 396c222..b2c9615 100644
--- a/hdata/spira.c
+++ b/hdata/spira.c
@@ -1573,6 +1573,7 @@ static void fixup_spira(void)
spira.ntuples.mdump_src = spirah.ntuples.mdump_src;
spira.ntuples.mdump_dst = spirah.ntuples.mdump_dst;
spira.ntuples.mdump_res = spirah.ntuples.mdump_res;
+ spira.ntuples.proc_dump_area = spirah.ntuples.proc_dump_area;
spira.ntuples.pcia = spiras->ntuples.pcia;
spira.ntuples.proc_chip = spiras->ntuples.proc_chip;
spira.ntuples.hs_data = spiras->ntuples.hs_data;
diff --git a/hdata/spira.h b/hdata/spira.h
index 72f0ad9..963b0ab 100644
--- a/hdata/spira.h
+++ b/hdata/spira.h
@@ -63,6 +63,7 @@ struct spira_ntuples {
struct spira_ntuple hs_data; /* 0x320 */
struct spira_ntuple ipmi_sensor; /* 0x360 */
struct spira_ntuple node_stb_data; /* 0x380 */
+ struct spira_ntuple proc_dump_area; /* 0x400 */
};
struct spira {
@@ -76,7 +77,7 @@ struct spira {
*
* According to FSP engineers, this is an okay thing to do.
*/
- u8 reserved[0x80];
+ u8 reserved[0x60];
} __packed __align(0x100);
extern struct spira spira;
diff --git a/include/opal-dump.h b/include/opal-dump.h
index e746a37..e7c0ad5 100644
--- a/include/opal-dump.h
+++ b/include/opal-dump.h
@@ -39,4 +39,71 @@ struct mdst_table {
__be32 size;
} __packed;
+/* Memory dump destination table (MDDT) */
+struct mddt_table {
+ __be64 addr;
+ uint8_t data_region;
+ uint8_t dump_type;
+ __be16 reserved;
+ __be32 size;
+} __packed;
+
+/*
+ * Memory dump result table (MDRT)
+ *
+ * List of the memory ranges that have been included in the dump. This table is
+ * filled by hostboot and passed to OPAL on second boot. OPAL/payload will use
+ * this table to extract the dump.
+ */
+struct mdrt_table {
+ __be64 src_addr;
+ __be64 dest_addr;
+ uint8_t data_region;
+ uint8_t dump_type;
+ __be16 reserved;
+ __be32 size;
+ __be64 padding;
+} __packed;
+
+/*
+ * Processor Dump Area
+ *
+ * This contains the information needed for having processor
+ * state captured during a platform dump.
+ */
+struct proc_dump_area {
+ __be32 thread_size; /* Size of each thread register entry */
+#define PROC_DUMP_AREA_FORMAT_P9 0x1 /* P9 format */
+ uint8_t version; /* P9 - 0x1 */
+ uint8_t reserved[11];
+ __be64 alloc_addr; /* Destination memory to place register data */
+ __be32 reserved2;
+ __be32 alloc_size; /* Allocated size */
+ __be64 dest_addr; /* Destination address */
+ __be32 reserved3;
+ __be32 act_size; /* Actual data size */
+} __packed;
+
+struct proc_reg_data_hdr {
+ /* PIR value of the thread */
+ __be32 pir;
+ /* 0x00 - 0x0F - The corresponding stop state of the core */
+ uint8_t core_state;
+ uint8_t reserved[3];
+
+ uint32_t offset; /* Offset to Register Entries array */
+ uint32_t ecnt; /* Number of entries */
+ uint32_t esize; /* Alloc size of each array entry in bytes */
+ uint32_t eactsz; /* Actual size of each array entry in bytes */
+} __packed;
+
+/* Architected register data content */
+#define ARCH_REG_TYPE_GPR 0x01
+#define ARCH_REG_TYPE_SPR 0x02
+struct proc_reg_data {
+ uint32_t reg_type; /* ARCH_REG_TYPE_* */
+ uint32_t reg_num;
+ uint64_t reg_val;
+} __packed;
+
#endif /* __OPAL_DUMP_H */