diff options
Diffstat (limited to 'roms/skiboot/include/opal-dump.h')
-rw-r--r-- | roms/skiboot/include/opal-dump.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/roms/skiboot/include/opal-dump.h b/roms/skiboot/include/opal-dump.h new file mode 100644 index 000000000..bc1b8768d --- /dev/null +++ b/roms/skiboot/include/opal-dump.h @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +/* Copyright 2013-2015 IBM Corp. */ + +#ifndef __OPAL_DUMP_H +#define __OPAL_DUMP_H + +/* + * Dump region ids + * + * 0x01 - 0x3F : OPAL + * 0x40 - 0x7F : Reserved for future use + * 0x80 - 0xFF : Kernel + * + */ +#define DUMP_REGION_OPAL_START 0x01 +#define DUMP_REGION_OPAL_END 0x3F +#define DUMP_REGION_HOST_START OPAL_DUMP_REGION_HOST_START +#define DUMP_REGION_HOST_END OPAL_DUMP_REGION_HOST_END + +#define DUMP_REGION_CONSOLE 0x01 +#define DUMP_REGION_HBRT_LOG 0x02 +#define DUMP_REGION_OPAL_MEMORY 0x03 +#define DUMP_REGION_KERNEL 0x80 + +/* Mainstore memory to be captured by FSP SYSDUMP */ +#define DUMP_TYPE_SYSDUMP 0xF5 +/* Mainstore memory to preserve during IPL */ +#define DUMP_TYPE_MPIPL 0x00 + +/* + * Memory Dump Source Table + * + * Format of this table is same as Memory Dump Source Table (MDST) + * defined in HDAT spec. + */ +struct mdst_table { + __be64 addr; + uint8_t data_region; /* DUMP_REGION_* */ + uint8_t dump_type; /* DUMP_TYPE_* */ + __be16 reserved; + __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; + +/* Metadata to capture before triggering MPIPL */ +struct mpipl_metadata { + /* Crashing PIR is required to create OPAL dump */ + uint32_t crashing_pir; + /* Kernel expects OPAL to presrve tag and pass it back via OPAL API */ + uint64_t kernel_tag; + /* Post MPIPL kernel boot memory size */ + uint64_t boot_mem_size; +} __packed; + +/* init opal dump */ +extern void opal_mpipl_init(void); + +/* Save metadata before triggering MPIPL */ +void opal_mpipl_save_crashing_pir(void); + +/* Reserve memory to capture OPAL dump */ +extern void opal_mpipl_reserve_mem(void); + +/* Check MPIPL enabled or not */ +extern bool is_mpipl_enabled(void); + +#endif /* __OPAL_DUMP_H */ |