[Skiboot] [PATCH v7 04/22] hdata: Define various DUMP related tables

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Mon May 13 19:52:09 AEST 2019


On 05/09/2019 06:25 AM, Michael Neuling wrote:
> On Sat, 2019-04-13 at 14:45 +0530, Vasant Hegde wrote:
>> - 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 at linux.vnet.ibm.com>
>> ---
>>   hdata/spira.c       |  1 +
>>   hdata/spira.h       |  5 ++--
>>   include/opal-dump.h | 67
>> +++++++++++++++++++++++++++++++++++++++++++++++++++++
>>   3 files changed, 71 insertions(+), 2 deletions(-)
>>
>> diff --git a/hdata/spira.c b/hdata/spira.c
>> index e3b8be08e..69fd91531 100644
>> --- a/hdata/spira.c
>> +++ b/hdata/spira.c
>> @@ -1683,6 +1683,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 41159d2ba..3ee23afdf 100644
>> --- a/hdata/spira.h
>> +++ b/hdata/spira.h
>> @@ -1,4 +1,4 @@
>> -/* Copyright 2013-2017 IBM Corp.
>> +/* Copyright 2013-2019 IBM Corp.
>>    *
>>    * Licensed under the Apache License, Version 2.0 (the "License");
>>    * you may not use this file except in compliance with the License.
>> @@ -76,6 +76,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 {
>> @@ -89,7 +90,7 @@ struct spira {
>>   	 *
>>   	 * According to FSP engineers, this is an okay thing to do.
>>   	 */
>> -	u8			reserved[0x80];
>> +	u8			reserved[0x60];
> 
> Why is this changing?

This shows remaining free space in spira structure.
Whenever we add new ntuple we adjust this variable.

> 
>>   } __packed __align(0x100);
>>   
>>   extern struct spira spira;
>> diff --git a/include/opal-dump.h b/include/opal-dump.h
>> index 2baa770dd..a35520fbc 100644
>> --- a/include/opal-dump.h
>> +++ b/include/opal-dump.h
>> @@ -55,4 +55,71 @@ struct mdst_table {
>>   	__be32	size;
>>   } __packed;
>>   
>> +/* Memory dump destination table (MDDT) */
>> +struct mddt_table {
>> +	__be64	addr;
>> +	uint8_t	data_region;	/* Same as mdst_table->data_region */
>> +	uint8_t dump_type;	/* Same as mdst_table->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;	/* Same as mdst_table->data_region */
>> +	uint8_t dump_type;	/* Same as mdst_table->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 */
> 
> This is P9 only?

Right now yes. its P9 only. No support on P8.

> 
>> +	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
> 
> What about VSX registers?

Right now we are collecting only GPR/SPR ..which are needed for debugging OPAL 
core and vmcore. If we need more registers for debugging, we can add it later.

> 
> I assume all these structures are defined elsewhere, but they are very sparse.
> Like this below one, could just be all 32 GPRs in one dump, rather than
> specifying them one at a time.

This is all defined in HDAT specification including what registers SBE/hostboot 
will collect.

-Vasant



More information about the Skiboot mailing list