blob: bc1b8768db40b0709ebf5b65622c7ab1e7b63603 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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 */
|