Thanks for the interpret. Seems I read the old version spec. Now it is clear for me.
Reviewed-by: Zhichao Gao <zhichao....@intel.com> > -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of > Krzysztof Koch > Sent: Wednesday, June 12, 2019 6:44 PM > To: Gao, Zhichao <zhichao....@intel.com>; devel@edk2.groups.io > Cc: Sami Mujawar <sami.muja...@arm.com>; Carsey, Jaben > <jaben.car...@intel.com>; Ni, Ray <ray...@intel.com>; nd <n...@arm.com> > Subject: Re: [edk2-devel] [PATCH v2 1/1] ShellPkg: acpiview: ACPI 6.3 update > for MADT parser > > Hi Zhichao, > > Please find my comments inline below. They are marked with [Krzysztof] > > Kind regards, > > Krzysztof > > -----Original Message----- > From: Gao, Zhichao <zhichao....@intel.com> > Sent: Monday, June 10, 2019 2:08 > To: Krzysztof Koch <krzysztof.k...@arm.com>; devel@edk2.groups.io > Cc: Sami Mujawar <sami.muja...@arm.com>; Carsey, Jaben > <jaben.car...@intel.com>; Ni, Ray <ray...@intel.com>; Matteo Carlini > <matteo.carl...@arm.com>; Stephanie Hughes-Fitt <Stephanie.Hughes- > f...@arm.com>; nd <n...@arm.com> > Subject: RE: [PATCH v2 1/1] ShellPkg: acpiview: ACPI 6.3 update for MADT > parser > > Sorry for late update. > > > -----Original Message----- > > From: Krzysztof Koch [mailto:krzysztof.k...@arm.com] > > Sent: Friday, June 7, 2019 4:48 PM > > To: devel@edk2.groups.io > > Cc: sami.muja...@arm.com; Carsey, Jaben <jaben.car...@intel.com>; Ni, > > Ray <ray...@intel.com>; Gao, Zhichao <zhichao....@intel.com>; > > matteo.carl...@arm.com; stephanie.hughes-f...@arm.com; n...@arm.com > > Subject: [PATCH v2 1/1] ShellPkg: acpiview: ACPI 6.3 update for MADT > > parser > > > > The ACPI 6.3 specification introduces a 'SPE overflow Interrupt' field > > as part of the GICC structure. > > > > Update the MADT parser to decode this field and validate the interrupt > > ID used. > > > > References: > > - ACPI 6.3 Specification - January 2019 > > - Arm Generic Interrupt Controller Architecture Specification, > > GIC architecture version 3 and version 4, issue E > > - Arm Server Base System Architecture 5.0 > > > > Signed-off-by: Krzysztof Koch <krzysztof.k...@arm.com> > > --- > > > > Changes can be seen at: > > https://github.com/KrzysztofKoch1/edk2/tree/477_acpiview_spe_v2 > > > > Notes: > > v2: > > - Add include sandwich in MadtParser.h [Zhichao] > > - Add references to specifications in commit message [Zhichao] > > > > v1: > > - Decode and validate SPE Overflow Interrupt field [Krzysztof] > > > > > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser. > > c | 86 ++++++++++++++++++-- > > > ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser. > > h | 40 +++++++++ > > 2 files changed, 118 insertions(+), 8 deletions(-) > > > > diff --git > > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtPars > > er.c > > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtPars > > er.c > > index > > > a1bf86ade5313f954a77b325c13394cfce133939..59c3df0cc8a080497b517baf36f > > c63f1e4ab866f 100644 > > --- > > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtPars > > er.c > > +++ > > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtPars > > +++ er.c > > @@ -1,17 +1,21 @@ > > /** @file > > MADT table parser > > > > - Copyright (c) 2016 - 2018, ARM Limited. All rights reserved. > > + Copyright (c) 2016 - 2019, ARM Limited. All rights reserved. > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > @par Reference(s): > > - - ACPI 6.2 Specification - Errata A, September 2017 > > + - ACPI 6.3 Specification - January 2019 > > + - Arm Generic Interrupt Controller Architecture Specification, > > + GIC architecture version 3 and version 4, issue E > > + - Arm Server Base System Architecture 5.0 > > **/ > > > > #include <IndustryStandard/Acpi.h> > > #include <Library/UefiLib.h> > > #include "AcpiParser.h" > > #include "AcpiTableParser.h" > > +#include "MadtParser.h" > > > > // Local Variables > > STATIC CONST UINT8* MadtInterruptControllerType; @@ -33,6 +37,21 > @@ > > ValidateGICDSystemVectorBase ( > > IN VOID* Context > > ); > > > > +/** > > + This function validates the SPE Overflow Interrupt in the GICC. > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. this > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidateSpeOverflowInterrupt ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ); > > + > > /** > > An ACPI_PARSER array describing the GICC Interrupt Controller Structure. > > **/ > > @@ -56,7 +75,9 @@ STATIC CONST ACPI_PARSER GicCParser[] = { > > {L"MPIDR", 8, 68, L"0x%lx", NULL, NULL, NULL, NULL}, > > {L"Processor Power Efficiency Class", 1, 76, L"0x%x", NULL, NULL, NULL, > > NULL}, > > - {L"Reserved", 3, 77, L"%x %x %x", Dump3Chars, NULL, NULL, NULL} > > + {L"Reserved", 1, 77, L"0x%x", NULL, NULL, NULL, NULL}, {L"SPE > > + overflow Interrupt", 2, 78, L"0x%x", NULL, NULL, > > + ValidateSpeOverflowInterrupt, NULL} > > }; > > > > /** > > @@ -160,6 +181,55 @@ ValidateGICDSystemVectorBase ( > > } > > } > > > > +/** > > + This function validates the SPE Overflow Interrupt in the GICC. > > + > > + @param [in] Ptr Pointer to the start of the field data. > > + @param [in] Context Pointer to context specific information e.g. this > > + could be a pointer to the ACPI table header. > > +**/ > > +STATIC > > +VOID > > +EFIAPI > > +ValidateSpeOverflowInterrupt ( > > + IN UINT8* Ptr, > > + IN VOID* Context > > + ) > > +{ > > + UINT16 SpeOverflowInterrupt; > > + > > + SpeOverflowInterrupt = *(UINT16*)Ptr; > > + > > + // SPE not supported by this processor if (SpeOverflowInterrupt == > > + 0) { > > + return; > > + } > > + > > + if ((SpeOverflowInterrupt < ARM_PPI_ID_MIN) || > > + ((SpeOverflowInterrupt > ARM_PPI_ID_MAX) && > > + (SpeOverflowInterrupt < ARM_PPI_ID_EXTENDED_MIN)) || > > + (SpeOverflowInterrupt > ARM_PPI_ID_EXTENDED_MAX)) { > > + IncrementErrorCount (); > > + Print ( > > + L"\nERROR: SPE Overflow Interrupt ID of %d is not in the allowed PPI > > ID > " > > + L"ranges of %d-%d or %d-%d (for GICv3.1 or later).", > > + SpeOverflowInterrupt, > > + ARM_PPI_ID_MIN, > > + ARM_PPI_ID_MAX, > > + ARM_PPI_ID_EXTENDED_MIN, > > + ARM_PPI_ID_EXTENDED_MAX > > + ); > > + } else if (SpeOverflowInterrupt != ARM_PPI_ID_PMBIRQ) { > > + IncrementWarningCount(); > > + Print ( > > + L"\nWARNING: SPE Overflow Interrupt ID of %d is not compliant > > + with > > SBSA " > > + L"Level 3 PPI ID assignment: %d.", > > + SpeOverflowInterrupt, > > + ARM_PPI_ID_PMBIRQ > > + ); > > + } > > +} > > + > > The checking values are named with ARM prefix. Can I think they are only for > ARM arch but not for IA32/X64? > If so, it is better to distinguish them. I used to view the MACRO > MDE_CPU_ARM and MDE_CPU_AARCH64. Did they work for this purpose? > There would always be a warning if the SpeOverflowInterrupt is unequal to > ARM_PPI_ID_PMBIRQ. Is that expected? > > [Krzysztof] All these values (ARM_PPI_ID_MIN, > ARM_PPI_ID_EXTENDED_MAX and so on) are only true for the Arm interrupt > model. This validation is performed against the SPE overflow Interrupt field > inside the GICC structure (Table 5-60, ACPI 6.3). If you have the GICC > structure in your MADT table, then it is implicit that you are using the Arm > interrupt model and the code is meant to run on an Arm platform. Therefore, > I don't think it is necessary to enclose this code in the macro > 'MDE_CPU_ARM'. > > [Krzysztof] To be level 3 compliant with Arm Server Base System Architecture > 5.0 one should use Interrupt ID of 21 for Statistical Profiling Interrupt, if > Statistical Profiling Extensions are implemented (see Section 4.1.5 of SBSA). > That's why there is a warning (not error) if the value provided is different > from 21. > > > /** > > This function parses the ACPI MADT table. > > When trace is enabled this function parses the MADT table and @@ > > -233,7 > > +303,7 @@ ParseAcpiMadt ( > > } > > > > switch (*MadtInterruptControllerType) { > > - case EFI_ACPI_6_2_GIC: { > > + case EFI_ACPI_6_3_GIC: { > > ParseAcpi ( > > TRUE, > > 2, > > @@ -245,7 +315,7 @@ ParseAcpiMadt ( > > break; > > } > > > > - case EFI_ACPI_6_2_GICD: { > > + case EFI_ACPI_6_3_GICD: { > > if (++GICDCount > 1) { > > IncrementErrorCount (); > > Print ( > > @@ -265,7 +335,7 @@ ParseAcpiMadt ( > > break; > > } > > > > - case EFI_ACPI_6_2_GIC_MSI_FRAME: { > > + case EFI_ACPI_6_3_GIC_MSI_FRAME: { > > ParseAcpi ( > > TRUE, > > 2, > > @@ -277,7 +347,7 @@ ParseAcpiMadt ( > > break; > > } > > > > - case EFI_ACPI_6_2_GICR: { > > + case EFI_ACPI_6_3_GICR: { > > ParseAcpi ( > > TRUE, > > 2, > > @@ -289,7 +359,7 @@ ParseAcpiMadt ( > > break; > > } > > > > - case EFI_ACPI_6_2_GIC_ITS: { > > + case EFI_ACPI_6_3_GIC_ITS: { > > ParseAcpi ( > > TRUE, > > 2, > > diff --git > > > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtPars > > er.h > > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtPars > > er.h > > new file mode 100644 > > index > > > 0000000000000000000000000000000000000000..fbbc43e09adbdf9fea302a03a6 > > 1e6dc179f06a62 > > --- /dev/null > > +++ > > > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtPars > > +++ er.h > > @@ -0,0 +1,40 @@ > > +/** @file > > + Header file for MADT table parser > > + > > + Copyright (c) 2019, ARM Limited. All rights reserved. > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > + @par Reference(s): > > + - Arm Generic Interrupt Controller Architecture Specification, > > + GIC architecture version 3 and version 4, issue E > > + - Arm Server Base System Architecture 5.0 **/ > > + > > +#ifndef MADT_PARSER_H_ > > +#define MADT_PARSER_H_ > > + > > +/// > > +/// Level 3 base server system Private Peripheral Inerrupt (PPI) ID > > +assignments /// > > +#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTP 30 > > +#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTPS 29 > > +#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTHV 28 > > +#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTV 27 > > +#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTHP 26 > > +#define ARM_PPI_ID_GIC_MAINTENANCE_INTERRUPT 25 > > +#define ARM_PPI_ID_CTIIRQ 24 > > +#define ARM_PPI_ID_PERFORMANCE_MONITORS_INTERRUPT 23 > > +#define ARM_PPI_ID_COMMIRQ 22 > > +#define ARM_PPI_ID_PMBIRQ 21 > > +#define ARM_PPI_ID_CNTHPS 20 > > +#define ARM_PPI_ID_CNTHVS 19 > > + > > +/// > > +/// PPI ID allowed ranges > > +/// > > +#define ARM_PPI_ID_MAX 31 > > +#define ARM_PPI_ID_MIN 16 > > +#define ARM_PPI_ID_EXTENDED_MAX 1119 > > +#define ARM_PPI_ID_EXTENDED_MIN 1056 > > I can't find the info about "ARM_PPI_ID_EXTENDED_MAX 1119". Can you > help to clarify it? Is this for future SBSA usage. > I am not familiar with the ARM things. Someone is export in ARM could help > to review. > > [Krzysztof] The definition of the SPE overflow Interrupt field states that " > This > interrupt is a level triggered PPI". Arm Generic Interrupt Controller > Architecture Specification, GIC architecture version 3 and version 4, issue E > defines the valid ranges for INTIDs in Table 2-1. > > Thanks, > Zhichao > > > + > > +#endif // MADT_PARSER_H_ > > -- > > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#42320): https://edk2.groups.io/g/devel/message/42320 Mute This Topic: https://groups.io/mt/31972729/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-