Skip to content

Commit

Permalink
hdata: Define various DUMP related structures
Browse files Browse the repository at this point in the history
- 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>
  • Loading branch information
Vasant Hegde authored and oohal committed Aug 15, 2019
1 parent 9d57eb4 commit 0b66781
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 1 deletion.
1 change: 1 addition & 0 deletions hdata/spira.c
Expand Up @@ -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;
Expand Down
3 changes: 2 additions & 1 deletion hdata/spira.h
Expand Up @@ -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 {
Expand All @@ -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;
Expand Down
67 changes: 67 additions & 0 deletions include/opal-dump.h
Expand Up @@ -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 */

0 comments on commit 0b66781

Please sign in to comment.