Skip to content

Commit

Permalink
hdata: Split MDST 'type' field to accommodate MPIPL
Browse files Browse the repository at this point in the history
The MPIPL facility needs to store region and type information
corresponding with each MDST entry.
  - data region : dump data regions (like DUMP_REGION_* )
  - dump type   : Reflects MDST entry usage (used by SYSDUMP -OR- FADUMP)

The existing type field is currently not used by FSP and/or firmware, so it
is safe to re-purpose it.

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 af98c56 commit 9d57eb4
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 11 deletions.
6 changes: 4 additions & 2 deletions hdata/spira.c
Expand Up @@ -86,12 +86,14 @@ extern struct mdst_table init_mdst_table[];
__section(".mdst.data") struct mdst_table init_mdst_table[2] = {
{
.addr = CPU_TO_BE64(INMEM_CON_START | HRMOR_BIT),
.type = CPU_TO_BE32(DUMP_REGION_CONSOLE),
.data_region = DUMP_REGION_CONSOLE,
.dump_type = DUMP_TYPE_SYSDUMP,
.size = CPU_TO_BE32(INMEM_CON_LEN),
},
{
.addr = CPU_TO_BE64(HBRT_CON_START | HRMOR_BIT),
.type = CPU_TO_BE32(DUMP_REGION_HBRT_LOG),
.data_region = DUMP_REGION_HBRT_LOG,
.dump_type = DUMP_TYPE_SYSDUMP,
.size = CPU_TO_BE32(HBRT_CON_LEN),
},
};
Expand Down
8 changes: 4 additions & 4 deletions hw/fsp/fsp-sysdump.c
Expand Up @@ -100,7 +100,7 @@ static int dump_region_tce_map(void)
fsp_tce_map(PSI_DMA_HYP_DUMP + t_size, (void *)addr, size);

/* Add entry to MDST table */
mdst_table[i].type = dump_mem_region[i].type;
mdst_table[i].data_region = dump_mem_region[i].data_region;
mdst_table[i].size = dump_mem_region[i].size;
mdst_table[i].addr = cpu_to_be64(PSI_DMA_HYP_DUMP + t_size);

Expand Down Expand Up @@ -180,7 +180,7 @@ static int dump_region_del_entry(uint32_t id)
lock(&mdst_lock);

for (i = 0; i < cur_mdst_entry; i++) {
if (be32_to_cpu(dump_mem_region[i].type) != id)
if (dump_mem_region[i].data_region != id)
continue;

found = true;
Expand All @@ -200,7 +200,7 @@ static int dump_region_del_entry(uint32_t id)
for ( ; i < cur_mdst_entry - 1; i++)
dump_mem_region[i] = dump_mem_region[i + 1];

dump_mem_region[i].type = 0;
dump_mem_region[i].data_region = 0;
cur_mdst_entry--;

del_out:
Expand Down Expand Up @@ -237,7 +237,7 @@ static int __dump_region_add_entry(uint32_t id, uint64_t addr, uint32_t size)
}

/* Add entry to dump memory region table */
dump_mem_region[cur_mdst_entry].type = cpu_to_be32(id);
dump_mem_region[cur_mdst_entry].data_region = (u8)cpu_to_be32(id);
dump_mem_region[cur_mdst_entry].addr = cpu_to_be64(addr);
dump_mem_region[cur_mdst_entry].size = cpu_to_be32(size);

Expand Down
18 changes: 13 additions & 5 deletions include/opal-dump.h
Expand Up @@ -7,28 +7,36 @@
/*
* Dump region ids
*
* 0x01 - 0x7F : OPAL
* 0x01 - 0x3F : OPAL
* 0x40 - 0x7F : Reserved for future use
* 0x80 - 0xFF : Kernel
*
*/
#define DUMP_REGION_OPAL_START 0x01
#define DUMP_REGION_OPAL_END 0x7F
#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

/* Mainstore memory to be captured by FSP SYSDUMP */
#define DUMP_TYPE_SYSDUMP 0xF5
/* Mainstore memory to preserve during IPL */
#define DUMP_TYPE_MPIPL 0x00

/*
* Sapphire Memory Dump Source Table
* 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;
__be32 type; /* DUMP_REGION_* */
uint8_t data_region; /* DUMP_REGION_* */
uint8_t dump_type; /* DUMP_TYPE_* */
__be16 reserved;
__be32 size;
};
} __packed;

#endif /* __OPAL_DUMP_H */

0 comments on commit 9d57eb4

Please sign in to comment.