public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v1 1/1] MdePkg/Include: Add ARM specific definitions for CPER
@ 2022-02-08  6:16 Ming Huang
  2022-02-08 17:01 ` [edk2-devel] " Ard Biesheuvel
  0 siblings, 1 reply; 3+ messages in thread
From: Ming Huang @ 2022-02-08  6:16 UTC (permalink / raw)
  To: devel, sami.mujawar, ardb+tianocore, jiewen.yao,
	supreeth.venkatesh
  Cc: ming.huang-, Ming Huang

These definitions are added according UEFI spec.

Signed-off-by: Ming Huang <huangming@linux.alibaba.com>
---
 MdePkg/Include/Guid/Cper.h | 544 ++++++++++++++++++++
 1 file changed, 544 insertions(+)

diff --git a/MdePkg/Include/Guid/Cper.h b/MdePkg/Include/Guid/Cper.h
index deb96d4af9..715d3b6bb0 100644
--- a/MdePkg/Include/Guid/Cper.h
+++ b/MdePkg/Include/Guid/Cper.h
@@ -736,6 +736,550 @@ typedef struct {
 
 #endif
 
+#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
+///
+/// ARM and AARCH64 Specific definitions.
+///
+
+///
+/// The validation bit mask indicates which fields in the processor error
+/// structure are valid.
+///@{
+#define EFI_ERROR_SECTION_MPIDR_VALID               BIT0
+#define EFI_ERROR_SECTION_AFFINITY_LEVEL_VALID      BIT1
+#define EFI_ERROR_SECTION_RUNNING_STATE_VALID       BIT2
+#define EFI_ERROR_SECTION_VENDOR_SPEC_VALID         BIT3
+///@}
+
+//
+// ARM Processor Error Section
+//
+typedef struct {
+	UINT32	ValidFields;
+	UINT16	ErrorInfoNum;
+	UINT16	ContextInfoNum;
+	UINT32	SectionLength;
+	UINT8	  AffinityLevel;
+	UINT8	  Reserved[3];
+	UINT64	Mpidr;
+	UINT64	Midr;
+	UINT32	RunningState;
+	UINT32	PsciState;
+} EFI_ARM_PROCESSOR_ERROR_SECTION;
+
+///
+/// The validation bit mask indicates which fields in the processor error data
+/// structure are valid.
+///@{
+#define EFI_ERROR_DATA_MULTIPLE_ERROR_VALID      BIT0
+#define EFI_ERROR_DATA_FLAGS_VALID               BIT1
+#define EFI_ERROR_DATA_ERROR_INFO_VALID          BIT2
+#define EFI_ERROR_DATA_VIRTUAL_ADDRESS_VALID     BIT3
+#define EFI_ERROR_DATA_PHYSICAL_ADDRESS_VALID    BIT3
+///@}
+
+///
+/// The Type error in the processor error data structure.
+///@{
+#define EFI_ERROR_DATA_TYPE_CACHE                0
+#define EFI_ERROR_DATA_TYPE_TLB                  1
+#define EFI_ERROR_DATA_TYPE_BUS                  2
+#define EFI_ERROR_DATA_TYPE_VENDOR_SPEC          3
+///@}
+
+///
+/// The options of multiple error in the processor error data structure.
+///@{
+#define EFI_ERROR_DATA_ERROR_SINGLE              0
+#define EFI_ERROR_DATA_ERROR_MULTIPLE            1
+///@}
+
+///
+/// The options of flags in the processor error data structure.
+///@{
+#define EFI_ERROR_DATA_FLAG_FIRST_ERROR           BIT0
+#define EFI_ERROR_DATA_FLAG_LAST_ERROR            BIT1
+#define EFI_ERROR_DATA_FLAG_PROPAGATED            BIT2
+#define EFI_ERROR_DATA_FLAG_OVERFLOW              BIT3
+///@}
+
+//
+// ARM Processor Error Information Structure
+//
+typedef struct {
+	UINT8	  Version;
+	UINT8	  Length;
+	UINT16  ValidFields;
+	UINT8	  Type;
+	UINT16  MultipleError;
+	UINT8	  Flags;
+	UINT64  ErrorInfo;
+	UINT64  VirtualFaultAddress;
+	UINT64  PhysicalFaultAddress;
+} EFI_ARM_PROCESSOR_ERROR_DATA;
+
+//
+///
+/// The validation bit mask indicates which fields in the Cache info structure
+/// are valid.
+///@{
+#define EFI_CACHE_INFO_TRANSACTION_TYPE_VALID       BIT0
+#define EFI_CACHE_INFO_OPERATION_VALID              BIT1
+#define EFI_CACHE_INFO_LEVEL_VALID                  BIT2
+#define EFI_CACHE_INFO_CONTEXT_CORRUPT_VALID        BIT3
+#define EFI_CACHE_INFO_CORRECTED_VALID              BIT4
+#define EFI_CACHE_INFO_PRECISE_PC_VALID             BIT5
+#define EFI_CACHE_INFO_RESTARTABLE_PC_VALID         BIT6
+///@}
+
+///
+/// Type of cache error in the Cache info structure
+///@{
+#define EFI_CACHE_INFO_ERROR_TYPE_INSTRUCTION       0
+#define EFI_CACHE_INFO_ERROR_TYPE_DATA_ACCESS       1
+#define EFI_CACHE_INFO_ERROR_TYPE_GENERIC           2
+///@}
+
+///
+/// Type of cache operation that caused the error in the Cache info structure
+///@{
+#define EFI_CACHE_INFO_OPERATION_TYPE_GENERIC                 0
+#define EFI_CACHE_INFO_OPERATION_TYPE_GENERIC_READ            1
+#define EFI_CACHE_INFO_OPERATION_TYPE_GENERIC_WRITE           2
+#define EFI_CACHE_INFO_OPERATION_TYPE_DATA_READ               3
+#define EFI_CACHE_INFO_OPERATION_TYPE_DATA_WRITE              4
+#define EFI_CACHE_INFO_OPERATION_TYPE_INSTRUCTION_FETCH       5
+#define EFI_CACHE_INFO_OPERATION_TYPE_PREFETCH                6
+#define EFI_CACHE_INFO_OPERATION_TYPE_EVICTION                7
+#define EFI_CACHE_INFO_OPERATION_TYPE_SNOOPING                8
+#define EFI_CACHE_INFO_OPERATION_TYPE_SNOOPED                 9
+#define EFI_CACHE_INFO_OPERATION_TYPE_MANAGEMENT              10
+///@}
+
+///
+/// Options of Processor context in the Cache info structure
+///@{
+#define EFI_CACHE_INFO_CONTEXT_NOT_CORRUPTED       0
+#define EFI_CACHE_INFO_CONTEXT_CORRUPTED           1
+///@}
+
+///
+/// Error severity in the Cache info structure
+///@{
+#define EFI_CACHE_INFO_ERROR_SEVERITY_UnCORRECTED  0
+#define EFI_CACHE_INFO_ERROR_SEVERITY_CORRECTED    1
+///@}
+
+//
+// ARM Processor Cache Error Structure
+//
+typedef struct {
+	UINT64  ValidBit:16;
+  UINT64  CacheType:2;
+  UINT64  Operation:4;
+  UINT64  CacheLevel:3;
+  UINT64  ContextCorrupt:1;
+  UINT64  Corrected:1;
+  UINT64  PrecisePc:1;
+  UINT64  RestartablePc:1;
+  UINT64  Reserved:35;
+} EFI_ARM_PROCESSOR_CACHE_ERROR_INFO;
+
+///
+/// The validation bit mask indicates which fields in the tlb info structure
+/// are valid.
+///@{
+#define EFI_TLB_INFO_TRANSACTION_TYPE_VALID       BIT0
+#define EFI_TLB_INFO_OPERATION_VALID              BIT1
+#define EFI_TLB_INFO_LEVEL_VALID                  BIT2
+#define EFI_TLB_INFO_CONTEXT_CORRUPT_VALID        BIT3
+#define EFI_TLB_INFO_CORRECTED_VALID              BIT4
+#define EFI_TLB_INFO_PRECISE_PC_VALID             BIT5
+#define EFI_TLB_INFO_RESTARTABLE_PC_VALID         BIT6
+///@}
+
+///
+/// Type of cache error in the tlb info structure
+///@{
+#define EFI_TLB_INFO_ERROR_TYPE_INSTRUCTION       0
+#define EFI_TLB_INFO_ERROR_TYPE_DATA_ACCESS       1
+#define EFI_TLB_INFO_ERROR_TYPE_GENERIC           2
+///@}
+
+///
+/// Type of cache operation that caused the error in the tlb info structure
+///@{
+#define EFI_TLB_INFO_OPERATION_TYPE_GENERIC                 0
+#define EFI_TLB_INFO_OPERATION_TYPE_GENERIC_READ            1
+#define EFI_TLB_INFO_OPERATION_TYPE_GENERIC_WRITE           2
+#define EFI_TLB_INFO_OPERATION_TYPE_DATA_READ               3
+#define EFI_TLB_INFO_OPERATION_TYPE_DATA_WRITE              4
+#define EFI_TLB_INFO_OPERATION_TYPE_INSTRUCTION_FETCH       5
+#define EFI_TLB_INFO_OPERATION_TYPE_PREFETCH                6
+#define EFI_TLB_INFO_OPERATION_TYPE_LOCAL_MO                7
+#define EFI_TLB_INFO_OPERATION_TYPE_EXTERNAL_MO             8
+///@}
+
+///
+/// Options of Processor context in the tlb info structure
+///@{
+#define EFI_TLB_INFO_CONTEXT_NOT_CORRUPTED       0
+#define EFI_TLB_INFO_CONTEXT_CORRUPTED           1
+///@}
+
+///
+/// Error severity in the tlb info structure
+///@{
+#define EFI_TLB_INFO_ERROR_SEVERITY_UnCORRECTED  0
+#define EFI_TLB_INFO_ERROR_SEVERITY_CORRECTED    1
+///@}
+
+//
+// ARM Processor tlb Error Structure
+//
+typedef struct {
+	UINT64  ValidBit:16;
+  UINT64  TlbType:2;
+  UINT64  Operation:4;
+  UINT64  TlbLevel:3;
+  UINT64  ContextCorrupt:1;
+  UINT64  Corrected:1;
+  UINT64  PrecisePc:1;
+  UINT64  RestartablePc:1;
+  UINT64  Reserved:35;
+} EFI_ARM_PROCESSOR_TLB_ERROR_INFO;
+
+///
+/// The validation bit mask indicates which fields in the Bus info structure
+/// are valid.
+///@{
+#define EFI_BUS_INFO_TRANSACTION_TYPE_VALID       BIT0
+#define EFI_BUS_INFO_OPERATION_VALID              BIT1
+#define EFI_BUS_INFO_LEVEL_VALID                  BIT2
+#define EFI_BUS_INFO_CONTEXT_CORRUPT_VALID        BIT3
+#define EFI_BUS_INFO_CORRECTED_VALID              BIT4
+#define EFI_BUS_INFO_PRECISE_PC_VALID             BIT5
+#define EFI_BUS_INFO_RESTARTABLE_PC_VALID         BIT6
+#define EFI_BUS_INFO_PARTICIPATION_TYPE_VALID     BIT7
+#define EFI_BUS_INFO_TIMEOUT_VALID                BIT8
+#define EFI_BUS_INFO_ADDRESS_SPACE_VALID          BIT9
+#define EFI_BUS_INFO_MEMORY_ATTRIBUTES_VALID      BIT10
+#define EFI_BUS_INFO_ACCESS_MODE_VALID            BIT11
+///@}
+
+///
+/// Type of cache error in the BUS info structure
+///@{
+#define EFI_BUS_INFO_ERROR_TYPE_INSTRUCTION       0
+#define EFI_BUS_INFO_ERROR_TYPE_DATA_ACCESS       1
+#define EFI_BUS_INFO_ERROR_TYPE_GENERIC           2
+///@}
+
+///
+/// Type of cache operation that caused the error in the BUS info structure
+///@{
+#define EFI_BUS_INFO_OPERATION_TYPE_GENERIC           0
+#define EFI_BUS_INFO_OPERATION_TYPE_GENERIC_READ      1
+#define EFI_BUS_INFO_OPERATION_TYPE_GENERIC_WRITE     2
+#define EFI_BUS_INFO_OPERATION_TYPE_DATA_READ         3
+#define EFI_BUS_INFO_OPERATION_TYPE_DATA_WRITE        4
+#define EFI_BUS_INFO_OPERATION_TYPE_INSTRUCTION_FETCH 5
+#define EFI_BUS_INFO_OPERATION_TYPE_PREFETCH          6
+///@}
+
+///
+/// Options of Processor context in the BUS info structure
+///@{
+#define EFI_BUS_INFO_CONTEXT_NOT_CORRUPTED       0
+#define EFI_BUS_INFO_CONTEXT_CORRUPTED           1
+///@}
+
+///
+/// Error severity in the BUS info structure
+///@{
+#define EFI_BUS_INFO_ERROR_SEVERITY_CORRECTED    0
+#define EFI_BUS_INFO_ERROR_SEVERITY_UnCORRECTED  1
+///@}
+
+///
+/// Type of participation in the BUS info structure
+///@{
+#define EFI_BUS_INFO_PARTICIPATION_ORIGINATED    0
+#define EFI_BUS_INFO_PARTICIPATION_RESPONDED     1
+#define EFI_BUS_INFO_PARTICIPATION_OBSERVED      2
+#define EFI_BUS_INFO_PARTICIPATION_GENERIC       3
+///@}
+
+///
+/// Address space in the BUS info structure
+///@{
+#define EFI_BUS_INFO_EXTERNAL_MEMORY_ACCESS      0
+#define EFI_BUS_INFO_INTERNAL_MEMORY_ACCESS      1
+#define EFI_BUS_INFO_DEVICE_MEMORY_ACCESS        2
+///@}
+
+///
+/// Address mode in the BUS info structure
+///@{
+#define EFI_BUS_INFO_ACCESS_MODE_SECURE          0
+#define EFI_BUS_INFO_ACCESS_MODE_NORMAL          1
+///@}
+
+//
+// ARM Processor Bus Error Structure
+//
+typedef struct {
+	UINT64  ValidBit:16;
+  UINT64  BusType:2;
+  UINT64  Operation:4;
+  UINT64  Level:3;
+  UINT64  ContextCorrupt:1;
+  UINT64  Corrected:1;
+  UINT64  PrecisePc:1;
+  UINT64  RestartablePc:1;
+  UINT64  ParticipationType:2;
+  UINT64  Timeout:1;
+  UINT64  AddressSpace:2;
+  UINT64  MemAccessAttributes:9;
+  UINT64  AccessMode:1;
+  UINT64  Reserved:20;
+} EFI_ARM_PROCESSOR_BUS_ERROR_INFO;
+
+///
+/// Register context type in the processor context data structure
+///@{
+#define EFI_CONTEXT_DATA_TYPE_AARCH32_GPRS       0
+#define EFI_CONTEXT_DATA_TYPE_AARCH32_EL1        1
+#define EFI_CONTEXT_DATA_TYPE_AARCH32_EL2        2
+#define EFI_CONTEXT_DATA_TYPE_AARCH32_SECURE     3
+#define EFI_CONTEXT_DATA_TYPE_AARCH64_GPRS       4
+#define EFI_CONTEXT_DATA_TYPE_AARCH64_EL1        5
+#define EFI_CONTEXT_DATA_TYPE_AARCH64_EL2        6
+#define EFI_CONTEXT_DATA_TYPE_AARCH64_EL3        7
+#define EFI_CONTEXT_DATA_TYPE_MISC               8
+///@}
+
+//
+// ARM Processor Context Information Structure, UEFI v2.7 sec N.2.4.4.2
+//
+typedef struct {
+	UINT16  Version;
+	UINT16  ContextType;
+	UINT32  Size;
+} EFI_ARM_PROCESSOR_CONTEXT_DATA;
+
+//
+// ARMv8 AArch32 GPRs(Generic Purpose Registers)
+//
+typedef struct {
+	UINT32  R0;
+	UINT32  R1;
+	UINT32  R2;
+	UINT32  R3;
+	UINT32  R4;
+	UINT32  R5;
+	UINT32  R6;
+	UINT32  R7;
+	UINT32  R8;
+	UINT32  R9;
+	UINT32  R10;
+	UINT32  R11;
+	UINT32  R12;
+	UINT32  R13;
+	UINT32  R13;
+	UINT32  R15;
+} EFI_CONTEXT_ARMV8_AARCH32_GPRS;
+
+//
+// ARMv8 AArch32 GPRs(Generic Purpose Registers) (Type 0)
+//
+typedef struct {
+	UINT32  R0;
+	UINT32  R1;
+	UINT32  R2;
+	UINT32  R3;
+	UINT32  R4;
+	UINT32  R5;
+	UINT32  R6;
+	UINT32  R7;
+	UINT32  R8;
+	UINT32  R9;
+	UINT32  R10;
+	UINT32  R11;
+	UINT32  R12;
+	UINT32  R13;
+	UINT32  R13;
+	UINT32  R15;
+} EFI_CONTEXT_ARMV8_AARCH32_GPRS;
+
+//
+// ARM AArch32 EL1 Context system registers(Type 1)
+//
+typedef struct {
+	UINT32  DFAR;
+	UINT32  DFSR;
+	UINT32  IFAR;
+	UINT32  ISR;
+	UINT32  MAIR0;
+	UINT32  MAIR1;
+	UINT32  MIDR;
+	UINT32  MPIDR;
+	UINT32  NMRR;
+	UINT32  PRRR;
+	UINT32  SCTLR;
+	UINT32  SPSR;
+	UINT32  SPSR_ABT;
+	UINT32  SPSR_FIQ;
+	UINT32  SPSR_IRQ;
+	UINT32  SPSR_SVC;
+	UINT32  SPSR_UND;
+	UINT32  TPIDRPRW;
+	UINT32  TPIDRURO;
+	UINT32  TPIDRURW;
+	UINT32  TTBCR;
+	UINT32  TTBR0;
+	UINT32  TTBR1;
+	UINT32  DACR;
+} EFI_CONTEXT_ARM_AARCH32_EL1;
+
+//
+// ARM AArch32 EL2 Context system registers(Type 2)
+//
+typedef struct {
+	UINT32  ELR_HYP;
+	UINT32  HAMAIR0;
+	UINT32  HAMAIR1;
+	UINT32  HCR;
+	UINT32  HCR2;
+	UINT32  HDF_AR;
+	UINT32  DIF_AR;
+	UINT32  HPF_AR;
+	UINT32  HSR;
+	UINT32  HTCR;
+	UINT32  HTPIDR;
+	UINT32  HTTBR;
+	UINT32  SPSR_HYP;
+	UINT32  VTCR;
+	UINT32  VTTBR;
+	UINT32  DACR32_EL2;
+} EFI_CONTEXT_ARM_AARCH32_EL2;
+
+//
+// ARM AArch32 secure Context system registers(Type 3)
+//
+typedef struct {
+  UINT32  SCRLR;
+  UINT32  SPSR_MON;
+} EFI_CONTEXT_ARM_AARCH32_SECURE;
+
+//
+// ARMv8 AArch64 GPRs(Generic Purpose Registers) (Type 4)
+//
+typedef struct {
+  UINT64  X0;
+  UINT64  X1;
+  UINT64  X2;
+  UINT64  X3;
+  UINT64  X4;
+  UINT64  X5;
+  UINT64  X6;
+  UINT64  X7;
+  UINT64  X8;
+  UINT64  X9;
+  UINT64  X10;
+  UINT64  X11;
+  UINT64  X12;
+  UINT64  X13;
+  UINT64  X14;
+  UINT64  X15;
+  UINT64  X16;
+  UINT64  X17;
+  UINT64  X18;
+  UINT64  X19;
+  UINT64  X20;
+  UINT64  X21;
+  UINT64  X22;
+  UINT64  X23;
+  UINT64  X24;
+  UINT64  X25;
+  UINT64  X26;
+  UINT64  X27;
+  UINT64  X28;
+  UINT64  X29;
+  UINT64  X30;
+  UINT64  SP;
+} EFI_CONTEXT_ARMV8_AARCH64_GPRS;
+
+//
+// ARM AArch64 EL1 (Type 5)
+//
+typedef struct {
+  UINT64  ELR_EL1;
+  UINT64  ESR_EL1;
+  UINT64  FAR_EL1;
+  UINT64  ISR_EL1;
+  UINT64  MAIR_EL1;
+  UINT64  MDIR_EL1;
+  UINT64  MPIDR_EL1;
+  UINT64  SCTLR_EL1;
+  UINT64  SP_EL0;
+  UINT64  SP_EL1;
+  UINT64  SPSR_EL1;
+  UINT64  TCR_EL1;
+  UINT64  TPIDR_EL0;
+  UINT64  TPIDR_EL1;
+  UINT64  TPIDRRO_EL0;
+  UINT64  TTBR0_EL1;
+  UINT64  TTBR1_EL1;
+} EFI_CONTEXT_ARM_AARCH64_EL1;
+
+//
+// ARM AArch64 EL2 (Type 6)
+//
+typedef struct {
+  UINT64  ELR_EL2;
+  UINT64  ESR_EL2;
+  UINT64  FAR_EL2;
+  UINT64  HACR_EL2;
+  UINT64  HCR_EL2;
+  UINT64  HPFAR_EL2;
+  UINT64  MAIR_EL2;
+  UINT64  SCTLR_EL2;
+  UINT64  SP_EL2;
+  UINT64  SPSR_EL2;
+  UINT64  TCR_EL2;
+  UINT64  TPIDR_EL2;
+  UINT64  TTBR0_EL2;
+  UINT64  VTCR_EL2;
+  UINT64  VTTBR_EL2;
+} EFI_CONTEXT_ARM_AARCH64_EL2;
+
+//
+// ARM AArch64 EL3 (Type 7)
+//
+typedef struct {
+  UINT64  ELR_EL3;
+  UINT64  ESR_EL3;
+  UINT64  FAR_EL3;
+  UINT64  MAIR_EL3;
+  UINT64  SCTLR_EL3;
+  UINT64  SP_EL3;
+  UINT64  SPSR_EL3;
+  UINT64  TCR_EL3;
+  UINT64  TPIDR_EL3;
+  UINT64  TTBR0_EL3;
+} EFI_CONTEXT_ARM_AARCH64_EL3;
+
+//
+// ARM Misc context system register (Type 8)
+//
+typedef struct {
+  UINT16  MRSEncoding;
+  UINT64  Value;
+} EFI_CONTEXT_ARM_MISC;
+
+#endif
+
 ///
 /// Error Status Fields
 ///
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [edk2-devel] [PATCH v1 1/1] MdePkg/Include: Add ARM specific definitions for CPER
  2022-02-08  6:16 [PATCH v1 1/1] MdePkg/Include: Add ARM specific definitions for CPER Ming Huang
@ 2022-02-08 17:01 ` Ard Biesheuvel
  2022-02-09  1:54   ` Ming Huang
  0 siblings, 1 reply; 3+ messages in thread
From: Ard Biesheuvel @ 2022-02-08 17:01 UTC (permalink / raw)
  To: edk2-devel-groups-io, Ming Huang
  Cc: Sami Mujawar, Ard Biesheuvel, Jiewen Yao, Supreeth Venkatesh,
	ming.huang-

On Tue, 8 Feb 2022 at 07:16, Ming Huang <huangming@linux.alibaba.com> wrote:
>
> These definitions are added according UEFI spec.
>
> Signed-off-by: Ming Huang <huangming@linux.alibaba.com>
> ---
>  MdePkg/Include/Guid/Cper.h | 544 ++++++++++++++++++++
>  1 file changed, 544 insertions(+)
>
> diff --git a/MdePkg/Include/Guid/Cper.h b/MdePkg/Include/Guid/Cper.h
> index deb96d4af9..715d3b6bb0 100644
> --- a/MdePkg/Include/Guid/Cper.h
> +++ b/MdePkg/Include/Guid/Cper.h
> @@ -736,6 +736,550 @@ typedef struct {
>
>  #endif
>
> +#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
> +///
> +/// ARM and AARCH64 Specific definitions.
> +///
> +
> +///
> +/// The validation bit mask indicates which fields in the processor error
> +/// structure are valid.
> +///@{
> +#define EFI_ERROR_SECTION_MPIDR_VALID               BIT0
> +#define EFI_ERROR_SECTION_AFFINITY_LEVEL_VALID      BIT1
> +#define EFI_ERROR_SECTION_RUNNING_STATE_VALID       BIT2
> +#define EFI_ERROR_SECTION_VENDOR_SPEC_VALID         BIT3
> +///@}
> +
> +//
> +// ARM Processor Error Section
> +//
> +typedef struct {
> +       UINT32  ValidFields;
> +       UINT16  ErrorInfoNum;
> +       UINT16  ContextInfoNum;
> +       UINT32  SectionLength;
> +       UINT8     AffinityLevel;
> +       UINT8     Reserved[3];

Please use consistent indentation.

> +       UINT64  Mpidr;
> +       UINT64  Midr;
> +       UINT32  RunningState;
> +       UINT32  PsciState;
> +} EFI_ARM_PROCESSOR_ERROR_SECTION;
> +
> +///
> +/// The validation bit mask indicates which fields in the processor error data
> +/// structure are valid.
> +///@{
> +#define EFI_ERROR_DATA_MULTIPLE_ERROR_VALID      BIT0
> +#define EFI_ERROR_DATA_FLAGS_VALID               BIT1
> +#define EFI_ERROR_DATA_ERROR_INFO_VALID          BIT2
> +#define EFI_ERROR_DATA_VIRTUAL_ADDRESS_VALID     BIT3
> +#define EFI_ERROR_DATA_PHYSICAL_ADDRESS_VALID    BIT3
> +///@}
> +
> +///
> +/// The Type error in the processor error data structure.
> +///@{
> +#define EFI_ERROR_DATA_TYPE_CACHE                0
> +#define EFI_ERROR_DATA_TYPE_TLB                  1
> +#define EFI_ERROR_DATA_TYPE_BUS                  2
> +#define EFI_ERROR_DATA_TYPE_VENDOR_SPEC          3
> +///@}
> +
> +///
> +/// The options of multiple error in the processor error data structure.
> +///@{
> +#define EFI_ERROR_DATA_ERROR_SINGLE              0
> +#define EFI_ERROR_DATA_ERROR_MULTIPLE            1
> +///@}
> +
> +///
> +/// The options of flags in the processor error data structure.
> +///@{
> +#define EFI_ERROR_DATA_FLAG_FIRST_ERROR           BIT0
> +#define EFI_ERROR_DATA_FLAG_LAST_ERROR            BIT1
> +#define EFI_ERROR_DATA_FLAG_PROPAGATED            BIT2
> +#define EFI_ERROR_DATA_FLAG_OVERFLOW              BIT3
> +///@}
> +
> +//
> +// ARM Processor Error Information Structure
> +//
> +typedef struct {
> +       UINT8     Version;
> +       UINT8     Length;
> +       UINT16  ValidFields;
> +       UINT8     Type;
> +       UINT16  MultipleError;
> +       UINT8     Flags;

Here too

> +       UINT64  ErrorInfo;
> +       UINT64  VirtualFaultAddress;
> +       UINT64  PhysicalFaultAddress;
> +} EFI_ARM_PROCESSOR_ERROR_DATA;
> +
> +//
> +///
> +/// The validation bit mask indicates which fields in the Cache info structure
> +/// are valid.
> +///@{
> +#define EFI_CACHE_INFO_TRANSACTION_TYPE_VALID       BIT0
> +#define EFI_CACHE_INFO_OPERATION_VALID              BIT1
> +#define EFI_CACHE_INFO_LEVEL_VALID                  BIT2
> +#define EFI_CACHE_INFO_CONTEXT_CORRUPT_VALID        BIT3
> +#define EFI_CACHE_INFO_CORRECTED_VALID              BIT4
> +#define EFI_CACHE_INFO_PRECISE_PC_VALID             BIT5
> +#define EFI_CACHE_INFO_RESTARTABLE_PC_VALID         BIT6
> +///@}
> +
> +///
> +/// Type of cache error in the Cache info structure
> +///@{
> +#define EFI_CACHE_INFO_ERROR_TYPE_INSTRUCTION       0
> +#define EFI_CACHE_INFO_ERROR_TYPE_DATA_ACCESS       1
> +#define EFI_CACHE_INFO_ERROR_TYPE_GENERIC           2
> +///@}
> +
> +///
> +/// Type of cache operation that caused the error in the Cache info structure
> +///@{
> +#define EFI_CACHE_INFO_OPERATION_TYPE_GENERIC                 0
> +#define EFI_CACHE_INFO_OPERATION_TYPE_GENERIC_READ            1
> +#define EFI_CACHE_INFO_OPERATION_TYPE_GENERIC_WRITE           2
> +#define EFI_CACHE_INFO_OPERATION_TYPE_DATA_READ               3
> +#define EFI_CACHE_INFO_OPERATION_TYPE_DATA_WRITE              4
> +#define EFI_CACHE_INFO_OPERATION_TYPE_INSTRUCTION_FETCH       5
> +#define EFI_CACHE_INFO_OPERATION_TYPE_PREFETCH                6
> +#define EFI_CACHE_INFO_OPERATION_TYPE_EVICTION                7
> +#define EFI_CACHE_INFO_OPERATION_TYPE_SNOOPING                8
> +#define EFI_CACHE_INFO_OPERATION_TYPE_SNOOPED                 9
> +#define EFI_CACHE_INFO_OPERATION_TYPE_MANAGEMENT              10
> +///@}
> +
> +///
> +/// Options of Processor context in the Cache info structure
> +///@{
> +#define EFI_CACHE_INFO_CONTEXT_NOT_CORRUPTED       0
> +#define EFI_CACHE_INFO_CONTEXT_CORRUPTED           1
> +///@}
> +
> +///
> +/// Error severity in the Cache info structure
> +///@{
> +#define EFI_CACHE_INFO_ERROR_SEVERITY_UnCORRECTED  0
> +#define EFI_CACHE_INFO_ERROR_SEVERITY_CORRECTED    1
> +///@}
> +
> +//
> +// ARM Processor Cache Error Structure
> +//
> +typedef struct {
> +       UINT64  ValidBit:16;

and here

> +  UINT64  CacheType:2;
> +  UINT64  Operation:4;
> +  UINT64  CacheLevel:3;
> +  UINT64  ContextCorrupt:1;
> +  UINT64  Corrected:1;
> +  UINT64  PrecisePc:1;
> +  UINT64  RestartablePc:1;
> +  UINT64  Reserved:35;
> +} EFI_ARM_PROCESSOR_CACHE_ERROR_INFO;
> +
> +///
> +/// The validation bit mask indicates which fields in the tlb info structure
> +/// are valid.
> +///@{
> +#define EFI_TLB_INFO_TRANSACTION_TYPE_VALID       BIT0
> +#define EFI_TLB_INFO_OPERATION_VALID              BIT1
> +#define EFI_TLB_INFO_LEVEL_VALID                  BIT2
> +#define EFI_TLB_INFO_CONTEXT_CORRUPT_VALID        BIT3
> +#define EFI_TLB_INFO_CORRECTED_VALID              BIT4
> +#define EFI_TLB_INFO_PRECISE_PC_VALID             BIT5
> +#define EFI_TLB_INFO_RESTARTABLE_PC_VALID         BIT6
> +///@}
> +
> +///
> +/// Type of cache error in the tlb info structure
> +///@{
> +#define EFI_TLB_INFO_ERROR_TYPE_INSTRUCTION       0
> +#define EFI_TLB_INFO_ERROR_TYPE_DATA_ACCESS       1
> +#define EFI_TLB_INFO_ERROR_TYPE_GENERIC           2
> +///@}
> +
> +///
> +/// Type of cache operation that caused the error in the tlb info structure
> +///@{
> +#define EFI_TLB_INFO_OPERATION_TYPE_GENERIC                 0
> +#define EFI_TLB_INFO_OPERATION_TYPE_GENERIC_READ            1
> +#define EFI_TLB_INFO_OPERATION_TYPE_GENERIC_WRITE           2
> +#define EFI_TLB_INFO_OPERATION_TYPE_DATA_READ               3
> +#define EFI_TLB_INFO_OPERATION_TYPE_DATA_WRITE              4
> +#define EFI_TLB_INFO_OPERATION_TYPE_INSTRUCTION_FETCH       5
> +#define EFI_TLB_INFO_OPERATION_TYPE_PREFETCH                6
> +#define EFI_TLB_INFO_OPERATION_TYPE_LOCAL_MO                7
> +#define EFI_TLB_INFO_OPERATION_TYPE_EXTERNAL_MO             8
> +///@}
> +
> +///
> +/// Options of Processor context in the tlb info structure
> +///@{
> +#define EFI_TLB_INFO_CONTEXT_NOT_CORRUPTED       0
> +#define EFI_TLB_INFO_CONTEXT_CORRUPTED           1
> +///@}
> +
> +///
> +/// Error severity in the tlb info structure
> +///@{
> +#define EFI_TLB_INFO_ERROR_SEVERITY_UnCORRECTED  0
> +#define EFI_TLB_INFO_ERROR_SEVERITY_CORRECTED    1
> +///@}
> +
> +//
> +// ARM Processor tlb Error Structure
> +//
> +typedef struct {
> +       UINT64  ValidBit:16;

and here

> +  UINT64  TlbType:2;
> +  UINT64  Operation:4;
> +  UINT64  TlbLevel:3;
> +  UINT64  ContextCorrupt:1;
> +  UINT64  Corrected:1;
> +  UINT64  PrecisePc:1;
> +  UINT64  RestartablePc:1;
> +  UINT64  Reserved:35;
> +} EFI_ARM_PROCESSOR_TLB_ERROR_INFO;
> +
> +///
> +/// The validation bit mask indicates which fields in the Bus info structure
> +/// are valid.
> +///@{
> +#define EFI_BUS_INFO_TRANSACTION_TYPE_VALID       BIT0
> +#define EFI_BUS_INFO_OPERATION_VALID              BIT1
> +#define EFI_BUS_INFO_LEVEL_VALID                  BIT2
> +#define EFI_BUS_INFO_CONTEXT_CORRUPT_VALID        BIT3
> +#define EFI_BUS_INFO_CORRECTED_VALID              BIT4
> +#define EFI_BUS_INFO_PRECISE_PC_VALID             BIT5
> +#define EFI_BUS_INFO_RESTARTABLE_PC_VALID         BIT6
> +#define EFI_BUS_INFO_PARTICIPATION_TYPE_VALID     BIT7
> +#define EFI_BUS_INFO_TIMEOUT_VALID                BIT8
> +#define EFI_BUS_INFO_ADDRESS_SPACE_VALID          BIT9
> +#define EFI_BUS_INFO_MEMORY_ATTRIBUTES_VALID      BIT10
> +#define EFI_BUS_INFO_ACCESS_MODE_VALID            BIT11
> +///@}
> +
> +///
> +/// Type of cache error in the BUS info structure
> +///@{
> +#define EFI_BUS_INFO_ERROR_TYPE_INSTRUCTION       0
> +#define EFI_BUS_INFO_ERROR_TYPE_DATA_ACCESS       1
> +#define EFI_BUS_INFO_ERROR_TYPE_GENERIC           2
> +///@}
> +
> +///
> +/// Type of cache operation that caused the error in the BUS info structure
> +///@{
> +#define EFI_BUS_INFO_OPERATION_TYPE_GENERIC           0
> +#define EFI_BUS_INFO_OPERATION_TYPE_GENERIC_READ      1
> +#define EFI_BUS_INFO_OPERATION_TYPE_GENERIC_WRITE     2
> +#define EFI_BUS_INFO_OPERATION_TYPE_DATA_READ         3
> +#define EFI_BUS_INFO_OPERATION_TYPE_DATA_WRITE        4
> +#define EFI_BUS_INFO_OPERATION_TYPE_INSTRUCTION_FETCH 5
> +#define EFI_BUS_INFO_OPERATION_TYPE_PREFETCH          6
> +///@}
> +
> +///
> +/// Options of Processor context in the BUS info structure
> +///@{
> +#define EFI_BUS_INFO_CONTEXT_NOT_CORRUPTED       0
> +#define EFI_BUS_INFO_CONTEXT_CORRUPTED           1
> +///@}
> +
> +///
> +/// Error severity in the BUS info structure
> +///@{
> +#define EFI_BUS_INFO_ERROR_SEVERITY_CORRECTED    0
> +#define EFI_BUS_INFO_ERROR_SEVERITY_UnCORRECTED  1
> +///@}
> +
> +///
> +/// Type of participation in the BUS info structure
> +///@{
> +#define EFI_BUS_INFO_PARTICIPATION_ORIGINATED    0
> +#define EFI_BUS_INFO_PARTICIPATION_RESPONDED     1
> +#define EFI_BUS_INFO_PARTICIPATION_OBSERVED      2
> +#define EFI_BUS_INFO_PARTICIPATION_GENERIC       3
> +///@}
> +
> +///
> +/// Address space in the BUS info structure
> +///@{
> +#define EFI_BUS_INFO_EXTERNAL_MEMORY_ACCESS      0
> +#define EFI_BUS_INFO_INTERNAL_MEMORY_ACCESS      1
> +#define EFI_BUS_INFO_DEVICE_MEMORY_ACCESS        2
> +///@}
> +
> +///
> +/// Address mode in the BUS info structure
> +///@{
> +#define EFI_BUS_INFO_ACCESS_MODE_SECURE          0
> +#define EFI_BUS_INFO_ACCESS_MODE_NORMAL          1
> +///@}
> +
> +//
> +// ARM Processor Bus Error Structure
> +//
> +typedef struct {
> +       UINT64  ValidBit:16;
> +  UINT64  BusType:2;
> +  UINT64  Operation:4;
> +  UINT64  Level:3;
> +  UINT64  ContextCorrupt:1;
> +  UINT64  Corrected:1;
> +  UINT64  PrecisePc:1;
> +  UINT64  RestartablePc:1;
> +  UINT64  ParticipationType:2;
> +  UINT64  Timeout:1;
> +  UINT64  AddressSpace:2;
> +  UINT64  MemAccessAttributes:9;
> +  UINT64  AccessMode:1;
> +  UINT64  Reserved:20;
> +} EFI_ARM_PROCESSOR_BUS_ERROR_INFO;
> +
> +///
> +/// Register context type in the processor context data structure
> +///@{
> +#define EFI_CONTEXT_DATA_TYPE_AARCH32_GPRS       0
> +#define EFI_CONTEXT_DATA_TYPE_AARCH32_EL1        1
> +#define EFI_CONTEXT_DATA_TYPE_AARCH32_EL2        2
> +#define EFI_CONTEXT_DATA_TYPE_AARCH32_SECURE     3
> +#define EFI_CONTEXT_DATA_TYPE_AARCH64_GPRS       4
> +#define EFI_CONTEXT_DATA_TYPE_AARCH64_EL1        5
> +#define EFI_CONTEXT_DATA_TYPE_AARCH64_EL2        6
> +#define EFI_CONTEXT_DATA_TYPE_AARCH64_EL3        7
> +#define EFI_CONTEXT_DATA_TYPE_MISC               8
> +///@}
> +
> +//
> +// ARM Processor Context Information Structure, UEFI v2.7 sec N.2.4.4.2
> +//
> +typedef struct {
> +       UINT16  Version;
> +       UINT16  ContextType;
> +       UINT32  Size;
> +} EFI_ARM_PROCESSOR_CONTEXT_DATA;
> +
> +//
> +// ARMv8 AArch32 GPRs(Generic Purpose Registers)
> +//
> +typedef struct {
> +       UINT32  R0;
> +       UINT32  R1;
> +       UINT32  R2;
> +       UINT32  R3;
> +       UINT32  R4;
> +       UINT32  R5;
> +       UINT32  R6;
> +       UINT32  R7;
> +       UINT32  R8;
> +       UINT32  R9;
> +       UINT32  R10;
> +       UINT32  R11;
> +       UINT32  R12;
> +       UINT32  R13;
> +       UINT32  R13;
> +       UINT32  R15;
> +} EFI_CONTEXT_ARMV8_AARCH32_GPRS;
> +
> +//
> +// ARMv8 AArch32 GPRs(Generic Purpose Registers) (Type 0)
> +//
> +typedef struct {
> +       UINT32  R0;
> +       UINT32  R1;
> +       UINT32  R2;
> +       UINT32  R3;
> +       UINT32  R4;
> +       UINT32  R5;
> +       UINT32  R6;
> +       UINT32  R7;
> +       UINT32  R8;
> +       UINT32  R9;
> +       UINT32  R10;
> +       UINT32  R11;
> +       UINT32  R12;
> +       UINT32  R13;
> +       UINT32  R13;
> +       UINT32  R15;
> +} EFI_CONTEXT_ARMV8_AARCH32_GPRS;
> +

Why is this duplicated?

> +//
> +// ARM AArch32 EL1 Context system registers(Type 1)
> +//
> +typedef struct {
> +       UINT32  DFAR;
> +       UINT32  DFSR;
> +       UINT32  IFAR;
> +       UINT32  ISR;
> +       UINT32  MAIR0;
> +       UINT32  MAIR1;
> +       UINT32  MIDR;
> +       UINT32  MPIDR;
> +       UINT32  NMRR;
> +       UINT32  PRRR;
> +       UINT32  SCTLR;
> +       UINT32  SPSR;
> +       UINT32  SPSR_ABT;
> +       UINT32  SPSR_FIQ;
> +       UINT32  SPSR_IRQ;
> +       UINT32  SPSR_SVC;
> +       UINT32  SPSR_UND;
> +       UINT32  TPIDRPRW;
> +       UINT32  TPIDRURO;
> +       UINT32  TPIDRURW;
> +       UINT32  TTBCR;
> +       UINT32  TTBR0;
> +       UINT32  TTBR1;
> +       UINT32  DACR;
> +} EFI_CONTEXT_ARM_AARCH32_EL1;
> +
> +//
> +// ARM AArch32 EL2 Context system registers(Type 2)
> +//
> +typedef struct {
> +       UINT32  ELR_HYP;
> +       UINT32  HAMAIR0;
> +       UINT32  HAMAIR1;
> +       UINT32  HCR;
> +       UINT32  HCR2;
> +       UINT32  HDF_AR;
> +       UINT32  DIF_AR;
> +       UINT32  HPF_AR;
> +       UINT32  HSR;
> +       UINT32  HTCR;
> +       UINT32  HTPIDR;
> +       UINT32  HTTBR;
> +       UINT32  SPSR_HYP;
> +       UINT32  VTCR;
> +       UINT32  VTTBR;
> +       UINT32  DACR32_EL2;
> +} EFI_CONTEXT_ARM_AARCH32_EL2;
> +
> +//
> +// ARM AArch32 secure Context system registers(Type 3)
> +//
> +typedef struct {
> +  UINT32  SCRLR;
> +  UINT32  SPSR_MON;
> +} EFI_CONTEXT_ARM_AARCH32_SECURE;
> +
> +//
> +// ARMv8 AArch64 GPRs(Generic Purpose Registers) (Type 4)
> +//
> +typedef struct {
> +  UINT64  X0;
> +  UINT64  X1;
> +  UINT64  X2;
> +  UINT64  X3;
> +  UINT64  X4;
> +  UINT64  X5;
> +  UINT64  X6;
> +  UINT64  X7;
> +  UINT64  X8;
> +  UINT64  X9;
> +  UINT64  X10;
> +  UINT64  X11;
> +  UINT64  X12;
> +  UINT64  X13;
> +  UINT64  X14;
> +  UINT64  X15;
> +  UINT64  X16;
> +  UINT64  X17;
> +  UINT64  X18;
> +  UINT64  X19;
> +  UINT64  X20;
> +  UINT64  X21;
> +  UINT64  X22;
> +  UINT64  X23;
> +  UINT64  X24;
> +  UINT64  X25;
> +  UINT64  X26;
> +  UINT64  X27;
> +  UINT64  X28;
> +  UINT64  X29;
> +  UINT64  X30;
> +  UINT64  SP;
> +} EFI_CONTEXT_ARMV8_AARCH64_GPRS;
> +
> +//
> +// ARM AArch64 EL1 (Type 5)
> +//
> +typedef struct {
> +  UINT64  ELR_EL1;
> +  UINT64  ESR_EL1;
> +  UINT64  FAR_EL1;
> +  UINT64  ISR_EL1;
> +  UINT64  MAIR_EL1;
> +  UINT64  MDIR_EL1;
> +  UINT64  MPIDR_EL1;
> +  UINT64  SCTLR_EL1;
> +  UINT64  SP_EL0;
> +  UINT64  SP_EL1;
> +  UINT64  SPSR_EL1;
> +  UINT64  TCR_EL1;
> +  UINT64  TPIDR_EL0;
> +  UINT64  TPIDR_EL1;
> +  UINT64  TPIDRRO_EL0;
> +  UINT64  TTBR0_EL1;
> +  UINT64  TTBR1_EL1;
> +} EFI_CONTEXT_ARM_AARCH64_EL1;
> +
> +//
> +// ARM AArch64 EL2 (Type 6)
> +//
> +typedef struct {
> +  UINT64  ELR_EL2;
> +  UINT64  ESR_EL2;
> +  UINT64  FAR_EL2;
> +  UINT64  HACR_EL2;
> +  UINT64  HCR_EL2;
> +  UINT64  HPFAR_EL2;
> +  UINT64  MAIR_EL2;
> +  UINT64  SCTLR_EL2;
> +  UINT64  SP_EL2;
> +  UINT64  SPSR_EL2;
> +  UINT64  TCR_EL2;
> +  UINT64  TPIDR_EL2;
> +  UINT64  TTBR0_EL2;
> +  UINT64  VTCR_EL2;
> +  UINT64  VTTBR_EL2;
> +} EFI_CONTEXT_ARM_AARCH64_EL2;
> +
> +//
> +// ARM AArch64 EL3 (Type 7)
> +//
> +typedef struct {
> +  UINT64  ELR_EL3;
> +  UINT64  ESR_EL3;
> +  UINT64  FAR_EL3;
> +  UINT64  MAIR_EL3;
> +  UINT64  SCTLR_EL3;
> +  UINT64  SP_EL3;
> +  UINT64  SPSR_EL3;
> +  UINT64  TCR_EL3;
> +  UINT64  TPIDR_EL3;
> +  UINT64  TTBR0_EL3;
> +} EFI_CONTEXT_ARM_AARCH64_EL3;
> +
> +//
> +// ARM Misc context system register (Type 8)
> +//
> +typedef struct {
> +  UINT16  MRSEncoding;
> +  UINT64  Value;
> +} EFI_CONTEXT_ARM_MISC;
> +
> +#endif
> +
>  ///
>  /// Error Status Fields
>  ///
> --
> 2.17.1
>
>
>
> 
>
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [edk2-devel] [PATCH v1 1/1] MdePkg/Include: Add ARM specific definitions for CPER
  2022-02-08 17:01 ` [edk2-devel] " Ard Biesheuvel
@ 2022-02-09  1:54   ` Ming Huang
  0 siblings, 0 replies; 3+ messages in thread
From: Ming Huang @ 2022-02-09  1:54 UTC (permalink / raw)
  To: Ard Biesheuvel, edk2-devel-groups-io
  Cc: Sami Mujawar, Ard Biesheuvel, Jiewen Yao, Supreeth Venkatesh,
	ming.huang-



在 2/9/22 1:01 AM, Ard Biesheuvel 写道:
> On Tue, 8 Feb 2022 at 07:16, Ming Huang <huangming@linux.alibaba.com> wrote:
>>
>> These definitions are added according UEFI spec.
>>
>> Signed-off-by: Ming Huang <huangming@linux.alibaba.com>
>> ---
>>  MdePkg/Include/Guid/Cper.h | 544 ++++++++++++++++++++
>>  1 file changed, 544 insertions(+)
>>
>> diff --git a/MdePkg/Include/Guid/Cper.h b/MdePkg/Include/Guid/Cper.h
>> index deb96d4af9..715d3b6bb0 100644
>> --- a/MdePkg/Include/Guid/Cper.h
>> +++ b/MdePkg/Include/Guid/Cper.h
>> @@ -736,6 +736,550 @@ typedef struct {
>>
>>  #endif
>>
>> +#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
>> +///
>> +/// ARM and AARCH64 Specific definitions.
>> +///
>> +
>> +///
>> +/// The validation bit mask indicates which fields in the processor error
>> +/// structure are valid.
>> +///@{
>> +#define EFI_ERROR_SECTION_MPIDR_VALID               BIT0
>> +#define EFI_ERROR_SECTION_AFFINITY_LEVEL_VALID      BIT1
>> +#define EFI_ERROR_SECTION_RUNNING_STATE_VALID       BIT2
>> +#define EFI_ERROR_SECTION_VENDOR_SPEC_VALID         BIT3
>> +///@}
>> +
>> +//
>> +// ARM Processor Error Section
>> +//
>> +typedef struct {
>> +       UINT32  ValidFields;
>> +       UINT16  ErrorInfoNum;
>> +       UINT16  ContextInfoNum;
>> +       UINT32  SectionLength;
>> +       UINT8     AffinityLevel;
>> +       UINT8     Reserved[3];
> 
> Please use consistent indentation.

Modify it in v2.

> 
>> +       UINT64  Mpidr;
>> +       UINT64  Midr;
>> +       UINT32  RunningState;
>> +       UINT32  PsciState;
>> +} EFI_ARM_PROCESSOR_ERROR_SECTION;
>> +
>> +///
>> +/// The validation bit mask indicates which fields in the processor error data
>> +/// structure are valid.
>> +///@{
>> +#define EFI_ERROR_DATA_MULTIPLE_ERROR_VALID      BIT0
>> +#define EFI_ERROR_DATA_FLAGS_VALID               BIT1
>> +#define EFI_ERROR_DATA_ERROR_INFO_VALID          BIT2
>> +#define EFI_ERROR_DATA_VIRTUAL_ADDRESS_VALID     BIT3
>> +#define EFI_ERROR_DATA_PHYSICAL_ADDRESS_VALID    BIT3
>> +///@}
>> +
>> +///
>> +/// The Type error in the processor error data structure.
>> +///@{
>> +#define EFI_ERROR_DATA_TYPE_CACHE                0
>> +#define EFI_ERROR_DATA_TYPE_TLB                  1
>> +#define EFI_ERROR_DATA_TYPE_BUS                  2
>> +#define EFI_ERROR_DATA_TYPE_VENDOR_SPEC          3
>> +///@}
>> +
>> +///
>> +/// The options of multiple error in the processor error data structure.
>> +///@{
>> +#define EFI_ERROR_DATA_ERROR_SINGLE              0
>> +#define EFI_ERROR_DATA_ERROR_MULTIPLE            1
>> +///@}
>> +
>> +///
>> +/// The options of flags in the processor error data structure.
>> +///@{
>> +#define EFI_ERROR_DATA_FLAG_FIRST_ERROR           BIT0
>> +#define EFI_ERROR_DATA_FLAG_LAST_ERROR            BIT1
>> +#define EFI_ERROR_DATA_FLAG_PROPAGATED            BIT2
>> +#define EFI_ERROR_DATA_FLAG_OVERFLOW              BIT3
>> +///@}
>> +
>> +//
>> +// ARM Processor Error Information Structure
>> +//
>> +typedef struct {
>> +       UINT8     Version;
>> +       UINT8     Length;
>> +       UINT16  ValidFields;
>> +       UINT8     Type;
>> +       UINT16  MultipleError;
>> +       UINT8     Flags;
> 
> Here too

Modify it in v2.

> 
>> +       UINT64  ErrorInfo;
>> +       UINT64  VirtualFaultAddress;
>> +       UINT64  PhysicalFaultAddress;
>> +} EFI_ARM_PROCESSOR_ERROR_DATA;
>> +
>> +//
>> +///
>> +/// The validation bit mask indicates which fields in the Cache info structure
>> +/// are valid.
>> +///@{
>> +#define EFI_CACHE_INFO_TRANSACTION_TYPE_VALID       BIT0
>> +#define EFI_CACHE_INFO_OPERATION_VALID              BIT1
>> +#define EFI_CACHE_INFO_LEVEL_VALID                  BIT2
>> +#define EFI_CACHE_INFO_CONTEXT_CORRUPT_VALID        BIT3
>> +#define EFI_CACHE_INFO_CORRECTED_VALID              BIT4
>> +#define EFI_CACHE_INFO_PRECISE_PC_VALID             BIT5
>> +#define EFI_CACHE_INFO_RESTARTABLE_PC_VALID         BIT6
>> +///@}
>> +
>> +///
>> +/// Type of cache error in the Cache info structure
>> +///@{
>> +#define EFI_CACHE_INFO_ERROR_TYPE_INSTRUCTION       0
>> +#define EFI_CACHE_INFO_ERROR_TYPE_DATA_ACCESS       1
>> +#define EFI_CACHE_INFO_ERROR_TYPE_GENERIC           2
>> +///@}
>> +
>> +///
>> +/// Type of cache operation that caused the error in the Cache info structure
>> +///@{
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_GENERIC                 0
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_GENERIC_READ            1
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_GENERIC_WRITE           2
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_DATA_READ               3
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_DATA_WRITE              4
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_INSTRUCTION_FETCH       5
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_PREFETCH                6
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_EVICTION                7
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_SNOOPING                8
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_SNOOPED                 9
>> +#define EFI_CACHE_INFO_OPERATION_TYPE_MANAGEMENT              10
>> +///@}
>> +
>> +///
>> +/// Options of Processor context in the Cache info structure
>> +///@{
>> +#define EFI_CACHE_INFO_CONTEXT_NOT_CORRUPTED       0
>> +#define EFI_CACHE_INFO_CONTEXT_CORRUPTED           1
>> +///@}
>> +
>> +///
>> +/// Error severity in the Cache info structure
>> +///@{
>> +#define EFI_CACHE_INFO_ERROR_SEVERITY_UnCORRECTED  0
>> +#define EFI_CACHE_INFO_ERROR_SEVERITY_CORRECTED    1
>> +///@}
>> +
>> +//
>> +// ARM Processor Cache Error Structure
>> +//
>> +typedef struct {
>> +       UINT64  ValidBit:16;
> 
> and here

Modify it in v2.

> 
>> +  UINT64  CacheType:2;
>> +  UINT64  Operation:4;
>> +  UINT64  CacheLevel:3;
>> +  UINT64  ContextCorrupt:1;
>> +  UINT64  Corrected:1;
>> +  UINT64  PrecisePc:1;
>> +  UINT64  RestartablePc:1;
>> +  UINT64  Reserved:35;
>> +} EFI_ARM_PROCESSOR_CACHE_ERROR_INFO;
>> +
>> +///
>> +/// The validation bit mask indicates which fields in the tlb info structure
>> +/// are valid.
>> +///@{
>> +#define EFI_TLB_INFO_TRANSACTION_TYPE_VALID       BIT0
>> +#define EFI_TLB_INFO_OPERATION_VALID              BIT1
>> +#define EFI_TLB_INFO_LEVEL_VALID                  BIT2
>> +#define EFI_TLB_INFO_CONTEXT_CORRUPT_VALID        BIT3
>> +#define EFI_TLB_INFO_CORRECTED_VALID              BIT4
>> +#define EFI_TLB_INFO_PRECISE_PC_VALID             BIT5
>> +#define EFI_TLB_INFO_RESTARTABLE_PC_VALID         BIT6
>> +///@}
>> +
>> +///
>> +/// Type of cache error in the tlb info structure
>> +///@{
>> +#define EFI_TLB_INFO_ERROR_TYPE_INSTRUCTION       0
>> +#define EFI_TLB_INFO_ERROR_TYPE_DATA_ACCESS       1
>> +#define EFI_TLB_INFO_ERROR_TYPE_GENERIC           2
>> +///@}
>> +
>> +///
>> +/// Type of cache operation that caused the error in the tlb info structure
>> +///@{
>> +#define EFI_TLB_INFO_OPERATION_TYPE_GENERIC                 0
>> +#define EFI_TLB_INFO_OPERATION_TYPE_GENERIC_READ            1
>> +#define EFI_TLB_INFO_OPERATION_TYPE_GENERIC_WRITE           2
>> +#define EFI_TLB_INFO_OPERATION_TYPE_DATA_READ               3
>> +#define EFI_TLB_INFO_OPERATION_TYPE_DATA_WRITE              4
>> +#define EFI_TLB_INFO_OPERATION_TYPE_INSTRUCTION_FETCH       5
>> +#define EFI_TLB_INFO_OPERATION_TYPE_PREFETCH                6
>> +#define EFI_TLB_INFO_OPERATION_TYPE_LOCAL_MO                7
>> +#define EFI_TLB_INFO_OPERATION_TYPE_EXTERNAL_MO             8
>> +///@}
>> +
>> +///
>> +/// Options of Processor context in the tlb info structure
>> +///@{
>> +#define EFI_TLB_INFO_CONTEXT_NOT_CORRUPTED       0
>> +#define EFI_TLB_INFO_CONTEXT_CORRUPTED           1
>> +///@}
>> +
>> +///
>> +/// Error severity in the tlb info structure
>> +///@{
>> +#define EFI_TLB_INFO_ERROR_SEVERITY_UnCORRECTED  0
>> +#define EFI_TLB_INFO_ERROR_SEVERITY_CORRECTED    1
>> +///@}
>> +
>> +//
>> +// ARM Processor tlb Error Structure
>> +//
>> +typedef struct {
>> +       UINT64  ValidBit:16;
> 
> and here

Modify it in v2.

> 
>> +  UINT64  TlbType:2;
>> +  UINT64  Operation:4;
>> +  UINT64  TlbLevel:3;
>> +  UINT64  ContextCorrupt:1;
>> +  UINT64  Corrected:1;
>> +  UINT64  PrecisePc:1;
>> +  UINT64  RestartablePc:1;
>> +  UINT64  Reserved:35;
>> +} EFI_ARM_PROCESSOR_TLB_ERROR_INFO;
>> +
>> +///
>> +/// The validation bit mask indicates which fields in the Bus info structure
>> +/// are valid.
>> +///@{
>> +#define EFI_BUS_INFO_TRANSACTION_TYPE_VALID       BIT0
>> +#define EFI_BUS_INFO_OPERATION_VALID              BIT1
>> +#define EFI_BUS_INFO_LEVEL_VALID                  BIT2
>> +#define EFI_BUS_INFO_CONTEXT_CORRUPT_VALID        BIT3
>> +#define EFI_BUS_INFO_CORRECTED_VALID              BIT4
>> +#define EFI_BUS_INFO_PRECISE_PC_VALID             BIT5
>> +#define EFI_BUS_INFO_RESTARTABLE_PC_VALID         BIT6
>> +#define EFI_BUS_INFO_PARTICIPATION_TYPE_VALID     BIT7
>> +#define EFI_BUS_INFO_TIMEOUT_VALID                BIT8
>> +#define EFI_BUS_INFO_ADDRESS_SPACE_VALID          BIT9
>> +#define EFI_BUS_INFO_MEMORY_ATTRIBUTES_VALID      BIT10
>> +#define EFI_BUS_INFO_ACCESS_MODE_VALID            BIT11
>> +///@}
>> +
>> +///
>> +/// Type of cache error in the BUS info structure
>> +///@{
>> +#define EFI_BUS_INFO_ERROR_TYPE_INSTRUCTION       0
>> +#define EFI_BUS_INFO_ERROR_TYPE_DATA_ACCESS       1
>> +#define EFI_BUS_INFO_ERROR_TYPE_GENERIC           2
>> +///@}
>> +
>> +///
>> +/// Type of cache operation that caused the error in the BUS info structure
>> +///@{
>> +#define EFI_BUS_INFO_OPERATION_TYPE_GENERIC           0
>> +#define EFI_BUS_INFO_OPERATION_TYPE_GENERIC_READ      1
>> +#define EFI_BUS_INFO_OPERATION_TYPE_GENERIC_WRITE     2
>> +#define EFI_BUS_INFO_OPERATION_TYPE_DATA_READ         3
>> +#define EFI_BUS_INFO_OPERATION_TYPE_DATA_WRITE        4
>> +#define EFI_BUS_INFO_OPERATION_TYPE_INSTRUCTION_FETCH 5
>> +#define EFI_BUS_INFO_OPERATION_TYPE_PREFETCH          6
>> +///@}
>> +
>> +///
>> +/// Options of Processor context in the BUS info structure
>> +///@{
>> +#define EFI_BUS_INFO_CONTEXT_NOT_CORRUPTED       0
>> +#define EFI_BUS_INFO_CONTEXT_CORRUPTED           1
>> +///@}
>> +
>> +///
>> +/// Error severity in the BUS info structure
>> +///@{
>> +#define EFI_BUS_INFO_ERROR_SEVERITY_CORRECTED    0
>> +#define EFI_BUS_INFO_ERROR_SEVERITY_UnCORRECTED  1
>> +///@}
>> +
>> +///
>> +/// Type of participation in the BUS info structure
>> +///@{
>> +#define EFI_BUS_INFO_PARTICIPATION_ORIGINATED    0
>> +#define EFI_BUS_INFO_PARTICIPATION_RESPONDED     1
>> +#define EFI_BUS_INFO_PARTICIPATION_OBSERVED      2
>> +#define EFI_BUS_INFO_PARTICIPATION_GENERIC       3
>> +///@}
>> +
>> +///
>> +/// Address space in the BUS info structure
>> +///@{
>> +#define EFI_BUS_INFO_EXTERNAL_MEMORY_ACCESS      0
>> +#define EFI_BUS_INFO_INTERNAL_MEMORY_ACCESS      1
>> +#define EFI_BUS_INFO_DEVICE_MEMORY_ACCESS        2
>> +///@}
>> +
>> +///
>> +/// Address mode in the BUS info structure
>> +///@{
>> +#define EFI_BUS_INFO_ACCESS_MODE_SECURE          0
>> +#define EFI_BUS_INFO_ACCESS_MODE_NORMAL          1
>> +///@}
>> +
>> +//
>> +// ARM Processor Bus Error Structure
>> +//
>> +typedef struct {
>> +       UINT64  ValidBit:16;
>> +  UINT64  BusType:2;
>> +  UINT64  Operation:4;
>> +  UINT64  Level:3;
>> +  UINT64  ContextCorrupt:1;
>> +  UINT64  Corrected:1;
>> +  UINT64  PrecisePc:1;
>> +  UINT64  RestartablePc:1;
>> +  UINT64  ParticipationType:2;
>> +  UINT64  Timeout:1;
>> +  UINT64  AddressSpace:2;
>> +  UINT64  MemAccessAttributes:9;
>> +  UINT64  AccessMode:1;
>> +  UINT64  Reserved:20;
>> +} EFI_ARM_PROCESSOR_BUS_ERROR_INFO;
>> +
>> +///
>> +/// Register context type in the processor context data structure
>> +///@{
>> +#define EFI_CONTEXT_DATA_TYPE_AARCH32_GPRS       0
>> +#define EFI_CONTEXT_DATA_TYPE_AARCH32_EL1        1
>> +#define EFI_CONTEXT_DATA_TYPE_AARCH32_EL2        2
>> +#define EFI_CONTEXT_DATA_TYPE_AARCH32_SECURE     3
>> +#define EFI_CONTEXT_DATA_TYPE_AARCH64_GPRS       4
>> +#define EFI_CONTEXT_DATA_TYPE_AARCH64_EL1        5
>> +#define EFI_CONTEXT_DATA_TYPE_AARCH64_EL2        6
>> +#define EFI_CONTEXT_DATA_TYPE_AARCH64_EL3        7
>> +#define EFI_CONTEXT_DATA_TYPE_MISC               8
>> +///@}
>> +
>> +//
>> +// ARM Processor Context Information Structure, UEFI v2.7 sec N.2.4.4.2
>> +//
>> +typedef struct {
>> +       UINT16  Version;
>> +       UINT16  ContextType;
>> +       UINT32  Size;
>> +} EFI_ARM_PROCESSOR_CONTEXT_DATA;
>> +
>> +//
>> +// ARMv8 AArch32 GPRs(Generic Purpose Registers)
>> +//
>> +typedef struct {
>> +       UINT32  R0;
>> +       UINT32  R1;
>> +       UINT32  R2;
>> +       UINT32  R3;
>> +       UINT32  R4;
>> +       UINT32  R5;
>> +       UINT32  R6;
>> +       UINT32  R7;
>> +       UINT32  R8;
>> +       UINT32  R9;
>> +       UINT32  R10;
>> +       UINT32  R11;
>> +       UINT32  R12;
>> +       UINT32  R13;
>> +       UINT32  R13;
>> +       UINT32  R15;
>> +} EFI_CONTEXT_ARMV8_AARCH32_GPRS;
>> +
>> +//
>> +// ARMv8 AArch32 GPRs(Generic Purpose Registers) (Type 0)
>> +//
>> +typedef struct {
>> +       UINT32  R0;
>> +       UINT32  R1;
>> +       UINT32  R2;
>> +       UINT32  R3;
>> +       UINT32  R4;
>> +       UINT32  R5;
>> +       UINT32  R6;
>> +       UINT32  R7;
>> +       UINT32  R8;
>> +       UINT32  R9;
>> +       UINT32  R10;
>> +       UINT32  R11;
>> +       UINT32  R12;
>> +       UINT32  R13;
>> +       UINT32  R13;
>> +       UINT32  R15;
>> +} EFI_CONTEXT_ARMV8_AARCH32_GPRS;
>> +
> 
> Why is this duplicated?

This is should be deleted in v2.

Thanks,
Ming

> 
>> +//
>> +// ARM AArch32 EL1 Context system registers(Type 1)
>> +//
>> +typedef struct {
>> +       UINT32  DFAR;
>> +       UINT32  DFSR;
>> +       UINT32  IFAR;
>> +       UINT32  ISR;
>> +       UINT32  MAIR0;
>> +       UINT32  MAIR1;
>> +       UINT32  MIDR;
>> +       UINT32  MPIDR;
>> +       UINT32  NMRR;
>> +       UINT32  PRRR;
>> +       UINT32  SCTLR;
>> +       UINT32  SPSR;
>> +       UINT32  SPSR_ABT;
>> +       UINT32  SPSR_FIQ;
>> +       UINT32  SPSR_IRQ;
>> +       UINT32  SPSR_SVC;
>> +       UINT32  SPSR_UND;
>> +       UINT32  TPIDRPRW;
>> +       UINT32  TPIDRURO;
>> +       UINT32  TPIDRURW;
>> +       UINT32  TTBCR;
>> +       UINT32  TTBR0;
>> +       UINT32  TTBR1;
>> +       UINT32  DACR;
>> +} EFI_CONTEXT_ARM_AARCH32_EL1;
>> +
>> +//
>> +// ARM AArch32 EL2 Context system registers(Type 2)
>> +//
>> +typedef struct {
>> +       UINT32  ELR_HYP;
>> +       UINT32  HAMAIR0;
>> +       UINT32  HAMAIR1;
>> +       UINT32  HCR;
>> +       UINT32  HCR2;
>> +       UINT32  HDF_AR;
>> +       UINT32  DIF_AR;
>> +       UINT32  HPF_AR;
>> +       UINT32  HSR;
>> +       UINT32  HTCR;
>> +       UINT32  HTPIDR;
>> +       UINT32  HTTBR;
>> +       UINT32  SPSR_HYP;
>> +       UINT32  VTCR;
>> +       UINT32  VTTBR;
>> +       UINT32  DACR32_EL2;
>> +} EFI_CONTEXT_ARM_AARCH32_EL2;
>> +
>> +//
>> +// ARM AArch32 secure Context system registers(Type 3)
>> +//
>> +typedef struct {
>> +  UINT32  SCRLR;
>> +  UINT32  SPSR_MON;
>> +} EFI_CONTEXT_ARM_AARCH32_SECURE;
>> +
>> +//
>> +// ARMv8 AArch64 GPRs(Generic Purpose Registers) (Type 4)
>> +//
>> +typedef struct {
>> +  UINT64  X0;
>> +  UINT64  X1;
>> +  UINT64  X2;
>> +  UINT64  X3;
>> +  UINT64  X4;
>> +  UINT64  X5;
>> +  UINT64  X6;
>> +  UINT64  X7;
>> +  UINT64  X8;
>> +  UINT64  X9;
>> +  UINT64  X10;
>> +  UINT64  X11;
>> +  UINT64  X12;
>> +  UINT64  X13;
>> +  UINT64  X14;
>> +  UINT64  X15;
>> +  UINT64  X16;
>> +  UINT64  X17;
>> +  UINT64  X18;
>> +  UINT64  X19;
>> +  UINT64  X20;
>> +  UINT64  X21;
>> +  UINT64  X22;
>> +  UINT64  X23;
>> +  UINT64  X24;
>> +  UINT64  X25;
>> +  UINT64  X26;
>> +  UINT64  X27;
>> +  UINT64  X28;
>> +  UINT64  X29;
>> +  UINT64  X30;
>> +  UINT64  SP;
>> +} EFI_CONTEXT_ARMV8_AARCH64_GPRS;
>> +
>> +//
>> +// ARM AArch64 EL1 (Type 5)
>> +//
>> +typedef struct {
>> +  UINT64  ELR_EL1;
>> +  UINT64  ESR_EL1;
>> +  UINT64  FAR_EL1;
>> +  UINT64  ISR_EL1;
>> +  UINT64  MAIR_EL1;
>> +  UINT64  MDIR_EL1;
>> +  UINT64  MPIDR_EL1;
>> +  UINT64  SCTLR_EL1;
>> +  UINT64  SP_EL0;
>> +  UINT64  SP_EL1;
>> +  UINT64  SPSR_EL1;
>> +  UINT64  TCR_EL1;
>> +  UINT64  TPIDR_EL0;
>> +  UINT64  TPIDR_EL1;
>> +  UINT64  TPIDRRO_EL0;
>> +  UINT64  TTBR0_EL1;
>> +  UINT64  TTBR1_EL1;
>> +} EFI_CONTEXT_ARM_AARCH64_EL1;
>> +
>> +//
>> +// ARM AArch64 EL2 (Type 6)
>> +//
>> +typedef struct {
>> +  UINT64  ELR_EL2;
>> +  UINT64  ESR_EL2;
>> +  UINT64  FAR_EL2;
>> +  UINT64  HACR_EL2;
>> +  UINT64  HCR_EL2;
>> +  UINT64  HPFAR_EL2;
>> +  UINT64  MAIR_EL2;
>> +  UINT64  SCTLR_EL2;
>> +  UINT64  SP_EL2;
>> +  UINT64  SPSR_EL2;
>> +  UINT64  TCR_EL2;
>> +  UINT64  TPIDR_EL2;
>> +  UINT64  TTBR0_EL2;
>> +  UINT64  VTCR_EL2;
>> +  UINT64  VTTBR_EL2;
>> +} EFI_CONTEXT_ARM_AARCH64_EL2;
>> +
>> +//
>> +// ARM AArch64 EL3 (Type 7)
>> +//
>> +typedef struct {
>> +  UINT64  ELR_EL3;
>> +  UINT64  ESR_EL3;
>> +  UINT64  FAR_EL3;
>> +  UINT64  MAIR_EL3;
>> +  UINT64  SCTLR_EL3;
>> +  UINT64  SP_EL3;
>> +  UINT64  SPSR_EL3;
>> +  UINT64  TCR_EL3;
>> +  UINT64  TPIDR_EL3;
>> +  UINT64  TTBR0_EL3;
>> +} EFI_CONTEXT_ARM_AARCH64_EL3;
>> +
>> +//
>> +// ARM Misc context system register (Type 8)
>> +//
>> +typedef struct {
>> +  UINT16  MRSEncoding;
>> +  UINT64  Value;
>> +} EFI_CONTEXT_ARM_MISC;
>> +
>> +#endif
>> +
>>  ///
>>  /// Error Status Fields
>>  ///
>> --
>> 2.17.1
>>
>>
>>
>> 
>>
>>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-02-09  1:54 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-08  6:16 [PATCH v1 1/1] MdePkg/Include: Add ARM specific definitions for CPER Ming Huang
2022-02-08 17:01 ` [edk2-devel] " Ard Biesheuvel
2022-02-09  1:54   ` Ming Huang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox