* [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform @ 2020-02-12 13:29 Vijayenthiran Subramaniam 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 1/5] Platform/ARM/SgiPkg: Disable use of deprecated APIs Vijayenthiran Subramaniam ` (5 more replies) 0 siblings, 6 replies; 13+ messages in thread From: Vijayenthiran Subramaniam @ 2020-02-12 13:29 UTC (permalink / raw) To: devel, leif, michael.d.kinney, Ard.Biesheuvel; +Cc: thomas.abraham Changes since v1: - Fix typo which caused build error This patch series adds support for RD-N1-Edge platform with multi-chip capability. The first patch in this series is an improvement to SgiPkg to avoid any usage of deprecated APIs. The second patch refactors the existing code to use lookup table in order to identify the platform. The rest of the patch adds multi-chip support for the RD-N1-Edge platform. Vijayenthiran Subramaniam (5): Platform/ARM/SgiPkg: Disable use of deprecated APIs Platform/ARM/SgiPkg: Use lookup table to install ACPI table Platform/ARM/SgiPkg: Add MultiChipMode to Platform Descriptor Platform/ARM/Sgi: Add ACPI tables for dual-chip RD-N1-Edge platform Platform/ARM/Sgi: Add initial support for RD-N1-Edge-Dual platform Platform/ARM/SgiPkg/SgiPlatform.dec | 1 + Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc | 3 + Platform/ARM/SgiPkg/SgiPlatform.dsc | 4 + Platform/ARM/SgiPkg/SgiPlatform.fdf | 1 + Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf | 59 ++++++ Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf | 1 + Platform/ARM/SgiPkg/Include/SgiPlatform.h | 7 + Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 61 +++++- Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c | 8 + Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc | 198 ++++++++++++++++++++ 10 files changed, 333 insertions(+), 10 deletions(-) create mode 100644 Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf create mode 100644 Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc -- 2.7.4 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [edk2-platforms] [PATCH v2 1/5] Platform/ARM/SgiPkg: Disable use of deprecated APIs 2020-02-12 13:29 [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam @ 2020-02-12 13:29 ` Vijayenthiran Subramaniam 2020-02-13 16:56 ` Leif Lindholm 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 2/5] Platform/ARM/SgiPkg: Use lookup table to install ACPI table Vijayenthiran Subramaniam ` (4 subsequent siblings) 5 siblings, 1 reply; 13+ messages in thread From: Vijayenthiran Subramaniam @ 2020-02-12 13:29 UTC (permalink / raw) To: devel, leif, michael.d.kinney, Ard.Biesheuvel; +Cc: thomas.abraham Add the `DISABLE_NEW_DEPRECATED_INTERFACES` build option in DSC file to make sure that the deprecated APIs are not used SgiPkg. Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> --- Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc | 3 +++ Platform/ARM/SgiPkg/SgiPlatform.dsc | 3 +++ 2 files changed, 6 insertions(+) diff --git a/Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc b/Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc index 7ae19560eaca..38bf6020ba4c 100644 --- a/Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc +++ b/Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc @@ -132,3 +132,6 @@ [Components.AARCH64] ################################################################################################### [BuildOptions.AARCH64] GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 -march=armv8-a+nofp + +[BuildOptions] + *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dsc b/Platform/ARM/SgiPkg/SgiPlatform.dsc index a5b7eea1d3a8..e38cc7da52a5 100644 --- a/Platform/ARM/SgiPkg/SgiPlatform.dsc +++ b/Platform/ARM/SgiPkg/SgiPlatform.dsc @@ -23,6 +23,9 @@ [Defines] !include Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc +[BuildOptions] + *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES + [LibraryClasses.common] ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf -- 2.7.4 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [edk2-platforms] [PATCH v2 1/5] Platform/ARM/SgiPkg: Disable use of deprecated APIs 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 1/5] Platform/ARM/SgiPkg: Disable use of deprecated APIs Vijayenthiran Subramaniam @ 2020-02-13 16:56 ` Leif Lindholm 0 siblings, 0 replies; 13+ messages in thread From: Leif Lindholm @ 2020-02-13 16:56 UTC (permalink / raw) To: Vijayenthiran Subramaniam Cc: devel, michael.d.kinney, Ard.Biesheuvel, thomas.abraham On Wed, Feb 12, 2020 at 18:59:23 +0530, Vijayenthiran Subramaniam wrote: > Add the `DISABLE_NEW_DEPRECATED_INTERFACES` build option in DSC file to > make sure that the deprecated APIs are not used SgiPkg. > > Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> Reviewed-by: Leif Lindholm <leif@nuviainc.com> > --- > Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc | 3 +++ > Platform/ARM/SgiPkg/SgiPlatform.dsc | 3 +++ > 2 files changed, 6 insertions(+) > > diff --git a/Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc b/Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc > index 7ae19560eaca..38bf6020ba4c 100644 > --- a/Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc > +++ b/Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc > @@ -132,3 +132,6 @@ [Components.AARCH64] > ################################################################################################### > [BuildOptions.AARCH64] > GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 -march=armv8-a+nofp > + > +[BuildOptions] > + *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES > diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dsc b/Platform/ARM/SgiPkg/SgiPlatform.dsc > index a5b7eea1d3a8..e38cc7da52a5 100644 > --- a/Platform/ARM/SgiPkg/SgiPlatform.dsc > +++ b/Platform/ARM/SgiPkg/SgiPlatform.dsc > @@ -23,6 +23,9 @@ [Defines] > > !include Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc > > +[BuildOptions] > + *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES > + > [LibraryClasses.common] > ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf > ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* [edk2-platforms] [PATCH v2 2/5] Platform/ARM/SgiPkg: Use lookup table to install ACPI table 2020-02-12 13:29 [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 1/5] Platform/ARM/SgiPkg: Disable use of deprecated APIs Vijayenthiran Subramaniam @ 2020-02-12 13:29 ` Vijayenthiran Subramaniam 2020-02-13 17:14 ` Leif Lindholm 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 3/5] Platform/ARM/SgiPkg: Add MultiChipMode to Platform Descriptor Vijayenthiran Subramaniam ` (3 subsequent siblings) 5 siblings, 1 reply; 13+ messages in thread From: Vijayenthiran Subramaniam @ 2020-02-12 13:29 UTC (permalink / raw) To: devel, leif, michael.d.kinney, Ard.Biesheuvel; +Cc: thomas.abraham Use lookup table to identify the platform and install corresponding ACPI tables. As the number of supported platforms grow, the existing platform identification using if..else does not scale well. Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> --- Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 49 ++++++++++++++++---- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c index 09e00e5d538b..4ab0dd768cd1 100644 --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c @@ -11,6 +11,35 @@ #include <Library/HobLib.h> #include <SgiPlatform.h> +typedef struct { + SGI_PLATFORM_DESCRIPTOR SgiPlafromDescriptor; + CONST EFI_GUID* AcpiTableGuid; +} SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP; + +// Macro to construct the SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP structure +#define ACPI_GUID_LOOKUP(PART_NUM, CONFIG_NUM, GUID) \ +{ \ + { \ + PART_NUM, CONFIG_NUM \ + }, \ + GUID \ +} \ + +STATIC SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP AcpiTableGuidLookup[] = { + ACPI_GUID_LOOKUP ( + SGI575_PART_NUM, + SGI575_CONF_NUM, + &gSgi575AcpiTablesFileGuid), + ACPI_GUID_LOOKUP ( + RD_N1E1_EDGE_PART_NUM, + RD_N1_EDGE_CONF_ID, + &gRdN1EdgeAcpiTablesFileGuid), + ACPI_GUID_LOOKUP ( + RD_N1E1_EDGE_PART_NUM, + RD_E1_EDGE_CONF_ID, + &gRdE1EdgeAcpiTablesFileGuid), +}; + VOID InitVirtioDevices ( VOID @@ -26,6 +55,7 @@ ArmSgiPkgEntryPoint ( EFI_STATUS Status; VOID *SystemIdHob; SGI_PLATFORM_DESCRIPTOR *HobData; + UINT8 i; UINT32 ConfigId; UINT32 PartNum; @@ -40,16 +70,15 @@ ArmSgiPkgEntryPoint ( PartNum = HobData->PlatformId; ConfigId = HobData->ConfigId; - if ((PartNum == SGI575_PART_NUM) && (ConfigId == SGI575_CONF_NUM)) { - Status = LocateAndInstallAcpiFromFv (&gSgi575AcpiTablesFileGuid); - } else if ((PartNum == RD_N1E1_EDGE_PART_NUM) && - (ConfigId == RD_N1_EDGE_CONF_ID)) { - Status = LocateAndInstallAcpiFromFv (&gRdN1EdgeAcpiTablesFileGuid); - } else if ((PartNum == RD_N1E1_EDGE_PART_NUM) && - (ConfigId == RD_E1_EDGE_CONF_ID)) { - Status = LocateAndInstallAcpiFromFv (&gRdE1EdgeAcpiTablesFileGuid); - } else { - Status = EFI_UNSUPPORTED; + Status = EFI_UNSUPPORTED; + + // Walk through the AcpiTableGuidLookup lookup array + for (i = 0; i < ARRAY_SIZE (AcpiTableGuidLookup); i++) { + if ((PartNum == AcpiTableGuidLookup[i].SgiPlafromDescriptor.PlatformId) && + (ConfigId == AcpiTableGuidLookup[i].SgiPlafromDescriptor.ConfigId)) { + Status = LocateAndInstallAcpiFromFv (AcpiTableGuidLookup[i].AcpiTableGuid); + break; + } } if (EFI_ERROR (Status)) { -- 2.7.4 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [edk2-platforms] [PATCH v2 2/5] Platform/ARM/SgiPkg: Use lookup table to install ACPI table 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 2/5] Platform/ARM/SgiPkg: Use lookup table to install ACPI table Vijayenthiran Subramaniam @ 2020-02-13 17:14 ` Leif Lindholm 0 siblings, 0 replies; 13+ messages in thread From: Leif Lindholm @ 2020-02-13 17:14 UTC (permalink / raw) To: Vijayenthiran Subramaniam Cc: devel, michael.d.kinney, Ard.Biesheuvel, thomas.abraham On Wed, Feb 12, 2020 at 18:59:24 +0530, Vijayenthiran Subramaniam wrote: > Use lookup table to identify the platform and install corresponding ACPI > tables. As the number of supported platforms grow, the existing platform > identification using if..else does not scale well. > > Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> > --- > Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 49 ++++++++++++++++---- > 1 file changed, 39 insertions(+), 10 deletions(-) > > diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c > index 09e00e5d538b..4ab0dd768cd1 100644 > --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c > +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c > @@ -11,6 +11,35 @@ > #include <Library/HobLib.h> > #include <SgiPlatform.h> > > +typedef struct { > + SGI_PLATFORM_DESCRIPTOR SgiPlafromDescriptor; > + CONST EFI_GUID* AcpiTableGuid; > +} SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP; > + > +// Macro to construct the SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP structure > +#define ACPI_GUID_LOOKUP(PART_NUM, CONFIG_NUM, GUID) \ > +{ \ > + { \ > + PART_NUM, CONFIG_NUM \ > + }, \ > + GUID \ > +} \ > + > +STATIC SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP AcpiTableGuidLookup[] = { > + ACPI_GUID_LOOKUP ( > + SGI575_PART_NUM, > + SGI575_CONF_NUM, > + &gSgi575AcpiTablesFileGuid), > + ACPI_GUID_LOOKUP ( > + RD_N1E1_EDGE_PART_NUM, > + RD_N1_EDGE_CONF_ID, > + &gRdN1EdgeAcpiTablesFileGuid), > + ACPI_GUID_LOOKUP ( > + RD_N1E1_EDGE_PART_NUM, > + RD_E1_EDGE_CONF_ID, > + &gRdE1EdgeAcpiTablesFileGuid), > +}; > + > VOID > InitVirtioDevices ( > VOID > @@ -26,6 +55,7 @@ ArmSgiPkgEntryPoint ( > EFI_STATUS Status; > VOID *SystemIdHob; > SGI_PLATFORM_DESCRIPTOR *HobData; > + UINT8 i; Type should be UINTN. "Index" or "Idx" would be more idiomatic. / Leif > UINT32 ConfigId; > UINT32 PartNum; > > @@ -40,16 +70,15 @@ ArmSgiPkgEntryPoint ( > PartNum = HobData->PlatformId; > ConfigId = HobData->ConfigId; > > - if ((PartNum == SGI575_PART_NUM) && (ConfigId == SGI575_CONF_NUM)) { > - Status = LocateAndInstallAcpiFromFv (&gSgi575AcpiTablesFileGuid); > - } else if ((PartNum == RD_N1E1_EDGE_PART_NUM) && > - (ConfigId == RD_N1_EDGE_CONF_ID)) { > - Status = LocateAndInstallAcpiFromFv (&gRdN1EdgeAcpiTablesFileGuid); > - } else if ((PartNum == RD_N1E1_EDGE_PART_NUM) && > - (ConfigId == RD_E1_EDGE_CONF_ID)) { > - Status = LocateAndInstallAcpiFromFv (&gRdE1EdgeAcpiTablesFileGuid); > - } else { > - Status = EFI_UNSUPPORTED; > + Status = EFI_UNSUPPORTED; > + > + // Walk through the AcpiTableGuidLookup lookup array > + for (i = 0; i < ARRAY_SIZE (AcpiTableGuidLookup); i++) { > + if ((PartNum == AcpiTableGuidLookup[i].SgiPlafromDescriptor.PlatformId) && > + (ConfigId == AcpiTableGuidLookup[i].SgiPlafromDescriptor.ConfigId)) { > + Status = LocateAndInstallAcpiFromFv (AcpiTableGuidLookup[i].AcpiTableGuid); > + break; > + } > } > > if (EFI_ERROR (Status)) { > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* [edk2-platforms] [PATCH v2 3/5] Platform/ARM/SgiPkg: Add MultiChipMode to Platform Descriptor 2020-02-12 13:29 [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 1/5] Platform/ARM/SgiPkg: Disable use of deprecated APIs Vijayenthiran Subramaniam 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 2/5] Platform/ARM/SgiPkg: Use lookup table to install ACPI table Vijayenthiran Subramaniam @ 2020-02-12 13:29 ` Vijayenthiran Subramaniam 2020-02-13 17:16 ` Leif Lindholm 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 4/5] Platform/ARM/Sgi: Add ACPI tables for dual-chip RD-N1-Edge platform Vijayenthiran Subramaniam ` (2 subsequent siblings) 5 siblings, 1 reply; 13+ messages in thread From: Vijayenthiran Subramaniam @ 2020-02-12 13:29 UTC (permalink / raw) To: devel, leif, michael.d.kinney, Ard.Biesheuvel; +Cc: thomas.abraham The 'system-id' node of HW_CONFIG device tree has been updated to have a new property 'multi-chip-mode' which holds the information about the multi-chip-mode support. To adapt to this change, add 'MultiChipMode' member to SGI_PLATFORM_DESCRIPTOR structure to get 'multi-chip-mode' property from fdt. Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> --- Platform/ARM/SgiPkg/Include/SgiPlatform.h | 4 ++++ Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 13 ++++++++++--- Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c | 8 ++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Platform/ARM/SgiPkg/Include/SgiPlatform.h b/Platform/ARM/SgiPkg/Include/SgiPlatform.h index e4a2e8cc0971..7c9322d1cda9 100644 --- a/Platform/ARM/SgiPkg/Include/SgiPlatform.h +++ b/Platform/ARM/SgiPkg/Include/SgiPlatform.h @@ -79,10 +79,14 @@ #define SGI_CONFIG_SHIFT 0x1C #define SGI_PART_NUM_MASK 0xFFF +#define MULTI_CHIP_MODE_DISABLED 0x0 +#define MULTI_CHIP_MODE_ENABLED 0x1 + // ARM platform description data. typedef struct { UINTN PlatformId; UINTN ConfigId; + UINTN MultiChipMode; } SGI_PLATFORM_DESCRIPTOR; #endif // __SGI_PLATFORM_H__ diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c index 4ab0dd768cd1..a2250a37bb57 100644 --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c @@ -17,10 +17,10 @@ typedef struct { } SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP; // Macro to construct the SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP structure -#define ACPI_GUID_LOOKUP(PART_NUM, CONFIG_NUM, GUID) \ +#define ACPI_GUID_LOOKUP(PART_NUM, CONFIG_NUM, MULTI_CHIP_MODE, GUID) \ { \ { \ - PART_NUM, CONFIG_NUM \ + PART_NUM, CONFIG_NUM, MULTI_CHIP_MODE \ }, \ GUID \ } \ @@ -29,14 +29,17 @@ STATIC SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP AcpiTableGuidLookup[] = { ACPI_GUID_LOOKUP ( SGI575_PART_NUM, SGI575_CONF_NUM, + MULTI_CHIP_MODE_DISABLED, &gSgi575AcpiTablesFileGuid), ACPI_GUID_LOOKUP ( RD_N1E1_EDGE_PART_NUM, RD_N1_EDGE_CONF_ID, + MULTI_CHIP_MODE_DISABLED, &gRdN1EdgeAcpiTablesFileGuid), ACPI_GUID_LOOKUP ( RD_N1E1_EDGE_PART_NUM, RD_E1_EDGE_CONF_ID, + MULTI_CHIP_MODE_DISABLED, &gRdE1EdgeAcpiTablesFileGuid), }; @@ -58,6 +61,7 @@ ArmSgiPkgEntryPoint ( UINT8 i; UINT32 ConfigId; UINT32 PartNum; + UINT32 MultiChipMode; SystemIdHob = GetFirstGuidHob (&gArmSgiPlatformIdDescriptorGuid); if (SystemIdHob == NULL) { @@ -69,13 +73,16 @@ ArmSgiPkgEntryPoint ( PartNum = HobData->PlatformId; ConfigId = HobData->ConfigId; + MultiChipMode = HobData->MultiChipMode; Status = EFI_UNSUPPORTED; // Walk through the AcpiTableGuidLookup lookup array for (i = 0; i < ARRAY_SIZE (AcpiTableGuidLookup); i++) { if ((PartNum == AcpiTableGuidLookup[i].SgiPlafromDescriptor.PlatformId) && - (ConfigId == AcpiTableGuidLookup[i].SgiPlafromDescriptor.ConfigId)) { + (ConfigId == AcpiTableGuidLookup[i].SgiPlafromDescriptor.ConfigId) && + (MultiChipMode == + AcpiTableGuidLookup[i].SgiPlafromDescriptor.MultiChipMode)) { Status = LocateAndInstallAcpiFromFv (AcpiTableGuidLookup[i].AcpiTableGuid); break; } diff --git a/Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c b/Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c index 4daa1832dfaf..7df52cc4fd7c 100644 --- a/Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c +++ b/Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c @@ -75,6 +75,14 @@ GetSgiSystemId ( HobData->ConfigId = fdt32_to_cpu (*Property); + Property = fdt_getprop (NtFwCfgDtBlob, Offset, "multi-chip-mode", NULL); + if (Property == NULL) { + DEBUG ((DEBUG_WARN, "multi-chip-mode property not found\n")); + HobData->MultiChipMode = 0; + } else { + HobData->MultiChipMode = fdt32_to_cpu (*Property); + } + return EFI_SUCCESS; } -- 2.7.4 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [edk2-platforms] [PATCH v2 3/5] Platform/ARM/SgiPkg: Add MultiChipMode to Platform Descriptor 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 3/5] Platform/ARM/SgiPkg: Add MultiChipMode to Platform Descriptor Vijayenthiran Subramaniam @ 2020-02-13 17:16 ` Leif Lindholm 0 siblings, 0 replies; 13+ messages in thread From: Leif Lindholm @ 2020-02-13 17:16 UTC (permalink / raw) To: Vijayenthiran Subramaniam Cc: devel, michael.d.kinney, Ard.Biesheuvel, thomas.abraham On Wed, Feb 12, 2020 at 18:59:25 +0530, Vijayenthiran Subramaniam wrote: > The 'system-id' node of HW_CONFIG device tree has been updated to have > a new property 'multi-chip-mode' which holds the information about the > multi-chip-mode support. To adapt to this change, add 'MultiChipMode' > member to SGI_PLATFORM_DESCRIPTOR structure to get 'multi-chip-mode' > property from fdt. > > Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> Apart from the "i" variable: Reviewed-by: Leif Lindholm <leif@nuviainc.com> As long as that is the only thing that changes, please keep that R-b when sending out v3. / Leif > --- > Platform/ARM/SgiPkg/Include/SgiPlatform.h | 4 ++++ > Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 13 ++++++++++--- > Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c | 8 ++++++++ > 3 files changed, 22 insertions(+), 3 deletions(-) > > diff --git a/Platform/ARM/SgiPkg/Include/SgiPlatform.h b/Platform/ARM/SgiPkg/Include/SgiPlatform.h > index e4a2e8cc0971..7c9322d1cda9 100644 > --- a/Platform/ARM/SgiPkg/Include/SgiPlatform.h > +++ b/Platform/ARM/SgiPkg/Include/SgiPlatform.h > @@ -79,10 +79,14 @@ > #define SGI_CONFIG_SHIFT 0x1C > #define SGI_PART_NUM_MASK 0xFFF > > +#define MULTI_CHIP_MODE_DISABLED 0x0 > +#define MULTI_CHIP_MODE_ENABLED 0x1 > + > // ARM platform description data. > typedef struct { > UINTN PlatformId; > UINTN ConfigId; > + UINTN MultiChipMode; > } SGI_PLATFORM_DESCRIPTOR; > > #endif // __SGI_PLATFORM_H__ > diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c > index 4ab0dd768cd1..a2250a37bb57 100644 > --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c > +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c > @@ -17,10 +17,10 @@ typedef struct { > } SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP; > > // Macro to construct the SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP structure > -#define ACPI_GUID_LOOKUP(PART_NUM, CONFIG_NUM, GUID) \ > +#define ACPI_GUID_LOOKUP(PART_NUM, CONFIG_NUM, MULTI_CHIP_MODE, GUID) \ > { \ > { \ > - PART_NUM, CONFIG_NUM \ > + PART_NUM, CONFIG_NUM, MULTI_CHIP_MODE \ > }, \ > GUID \ > } \ > @@ -29,14 +29,17 @@ STATIC SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP AcpiTableGuidLookup[] = { > ACPI_GUID_LOOKUP ( > SGI575_PART_NUM, > SGI575_CONF_NUM, > + MULTI_CHIP_MODE_DISABLED, > &gSgi575AcpiTablesFileGuid), > ACPI_GUID_LOOKUP ( > RD_N1E1_EDGE_PART_NUM, > RD_N1_EDGE_CONF_ID, > + MULTI_CHIP_MODE_DISABLED, > &gRdN1EdgeAcpiTablesFileGuid), > ACPI_GUID_LOOKUP ( > RD_N1E1_EDGE_PART_NUM, > RD_E1_EDGE_CONF_ID, > + MULTI_CHIP_MODE_DISABLED, > &gRdE1EdgeAcpiTablesFileGuid), > }; > > @@ -58,6 +61,7 @@ ArmSgiPkgEntryPoint ( > UINT8 i; > UINT32 ConfigId; > UINT32 PartNum; > + UINT32 MultiChipMode; > > SystemIdHob = GetFirstGuidHob (&gArmSgiPlatformIdDescriptorGuid); > if (SystemIdHob == NULL) { > @@ -69,13 +73,16 @@ ArmSgiPkgEntryPoint ( > > PartNum = HobData->PlatformId; > ConfigId = HobData->ConfigId; > + MultiChipMode = HobData->MultiChipMode; > > Status = EFI_UNSUPPORTED; > > // Walk through the AcpiTableGuidLookup lookup array > for (i = 0; i < ARRAY_SIZE (AcpiTableGuidLookup); i++) { > if ((PartNum == AcpiTableGuidLookup[i].SgiPlafromDescriptor.PlatformId) && > - (ConfigId == AcpiTableGuidLookup[i].SgiPlafromDescriptor.ConfigId)) { > + (ConfigId == AcpiTableGuidLookup[i].SgiPlafromDescriptor.ConfigId) && > + (MultiChipMode == > + AcpiTableGuidLookup[i].SgiPlafromDescriptor.MultiChipMode)) { > Status = LocateAndInstallAcpiFromFv (AcpiTableGuidLookup[i].AcpiTableGuid); > break; > } > diff --git a/Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c b/Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c > index 4daa1832dfaf..7df52cc4fd7c 100644 > --- a/Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c > +++ b/Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c > @@ -75,6 +75,14 @@ GetSgiSystemId ( > > HobData->ConfigId = fdt32_to_cpu (*Property); > > + Property = fdt_getprop (NtFwCfgDtBlob, Offset, "multi-chip-mode", NULL); > + if (Property == NULL) { > + DEBUG ((DEBUG_WARN, "multi-chip-mode property not found\n")); > + HobData->MultiChipMode = 0; > + } else { > + HobData->MultiChipMode = fdt32_to_cpu (*Property); > + } > + > return EFI_SUCCESS; > } > > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* [edk2-platforms] [PATCH v2 4/5] Platform/ARM/Sgi: Add ACPI tables for dual-chip RD-N1-Edge platform 2020-02-12 13:29 [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam ` (2 preceding siblings ...) 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 3/5] Platform/ARM/SgiPkg: Add MultiChipMode to Platform Descriptor Vijayenthiran Subramaniam @ 2020-02-12 13:29 ` Vijayenthiran Subramaniam 2020-02-13 17:22 ` Leif Lindholm 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 5/5] Platform/ARM/Sgi: Add initial support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam 2020-02-13 17:31 ` [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add " Leif Lindholm 5 siblings, 1 reply; 13+ messages in thread From: Vijayenthiran Subramaniam @ 2020-02-12 13:29 UTC (permalink / raw) To: devel, leif, michael.d.kinney, Ard.Biesheuvel; +Cc: thomas.abraham RD-N1-Edge supports a dual-chip configuration in which two RD-N1-Edge platforms are connected through high speed CCIX link. In this dual-chip configuration, the CPU and core GIC Redistributors count are doubled. Add ACPI tables for dual-chip RD-N1-Edge platform. Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> --- Platform/ARM/SgiPkg/SgiPlatform.dec | 1 + Platform/ARM/SgiPkg/SgiPlatform.dsc | 1 + Platform/ARM/SgiPkg/SgiPlatform.fdf | 1 + Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf | 59 ++++++ Platform/ARM/SgiPkg/Include/SgiPlatform.h | 3 + Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc | 198 ++++++++++++++++++++ 6 files changed, 263 insertions(+) diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dec b/Platform/ARM/SgiPkg/SgiPlatform.dec index 229552ea7842..9d70ec677776 100644 --- a/Platform/ARM/SgiPkg/SgiPlatform.dec +++ b/Platform/ARM/SgiPkg/SgiPlatform.dec @@ -28,6 +28,7 @@ [Guids.common] gArmSgiTokenSpaceGuid = { 0x577d6941, 0xaea1, 0x40b4, { 0x90, 0x93, 0x2a, 0x86, 0x61, 0x72, 0x5a, 0x57 } } gSgi575AcpiTablesFileGuid = { 0xc712719a, 0x0aaf, 0x438c, { 0x9c, 0xdd, 0x35, 0xab, 0x4d, 0x60, 0x20, 0x7d } } gRdN1EdgeAcpiTablesFileGuid = { 0x4b0b91d0, 0x4a05, 0x45c4, { 0x88, 0xa7, 0x88, 0xe1, 0x70, 0xe7, 0x66, 0x94 } } + gRdN1EdgeX2AcpiTablesFileGuid = { 0x82a34150, 0x0fc6, 0x45f4, { 0x8e, 0xa0, 0xf0, 0xa4, 0x66, 0x0c, 0xf3, 0x5d } } gRdE1EdgeAcpiTablesFileGuid = { 0x2af40815, 0xa84e, 0x4de9, { 0x8c, 0x38, 0x91, 0x40, 0xb3, 0x54, 0x40, 0x73 } } [PcdsFeatureFlag.common] diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dsc b/Platform/ARM/SgiPkg/SgiPlatform.dsc index e38cc7da52a5..5226c5751e98 100644 --- a/Platform/ARM/SgiPkg/SgiPlatform.dsc +++ b/Platform/ARM/SgiPkg/SgiPlatform.dsc @@ -279,6 +279,7 @@ [Components.common] MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf Platform/ARM/SgiPkg/AcpiTables/Sgi575AcpiTables.inf Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeAcpiTables.inf + Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf Platform/ARM/SgiPkg/AcpiTables/RdE1EdgeAcpiTables.inf MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf diff --git a/Platform/ARM/SgiPkg/SgiPlatform.fdf b/Platform/ARM/SgiPkg/SgiPlatform.fdf index 44e571a184bf..3d13998015b9 100644 --- a/Platform/ARM/SgiPkg/SgiPlatform.fdf +++ b/Platform/ARM/SgiPkg/SgiPlatform.fdf @@ -101,6 +101,7 @@ [FV.FvMain] INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf INF RuleOverride=ACPITABLE Platform/ARM/SgiPkg/AcpiTables/Sgi575AcpiTables.inf INF RuleOverride=ACPITABLE Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeAcpiTables.inf + INF RuleOverride=ACPITABLE Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf INF RuleOverride=ACPITABLE Platform/ARM/SgiPkg/AcpiTables/RdE1EdgeAcpiTables.inf INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf diff --git a/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf b/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf new file mode 100644 index 000000000000..1b584b152455 --- /dev/null +++ b/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf @@ -0,0 +1,59 @@ +## @file +# ACPI table data and ASL sources required to boot the platform. +# +# Copyright (c) 2020, ARM Ltd. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION = 0x0001001A + BASE_NAME = RdN1EdgeX2AcpiTables + FILE_GUID = 82a34150-0fc6-45f4-8ea0-f0a4660cf35d + MODULE_TYPE = USER_DEFINED + VERSION_STRING = 1.0 + +[Sources] + Dbg2.aslc + Fadt.aslc + Gtdt.aslc + Iort.aslc + Mcfg.aslc + RdN1Edge/Dsdt.asl + RdN1EdgeX2/Madt.aslc + Spcr.aslc + Ssdt.asl + +[Packages] + ArmPkg/ArmPkg.dec + ArmPlatformPkg/ArmPlatformPkg.dec + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + Platform/ARM/SgiPkg/SgiPlatform.dec + +[FixedPcd] + gArmPlatformTokenSpaceGuid.PcdCoreCount + gArmPlatformTokenSpaceGuid.PcdClusterCount + gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase + gArmPlatformTokenSpaceGuid.PL011UartInterrupt + + gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum + gArmTokenSpaceGuid.PcdArmArchTimerIntrNum + gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum + gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum + gArmTokenSpaceGuid.PcdGicDistributorBase + gArmTokenSpaceGuid.PcdGicRedistributorsBase + gArmTokenSpaceGuid.PcdGenericWatchdogControlBase + gArmTokenSpaceGuid.PcdGenericWatchdogRefreshBase + gArmTokenSpaceGuid.PcdPciBusMin + gArmTokenSpaceGuid.PcdPciBusMax + + gArmSgiTokenSpaceGuid.PcdVirtioBlkBaseAddress + gArmSgiTokenSpaceGuid.PcdVirtioBlkSize + gArmSgiTokenSpaceGuid.PcdVirtioBlkInterrupt + gArmSgiTokenSpaceGuid.PcdVirtioNetBaseAddress + gArmSgiTokenSpaceGuid.PcdVirtioNetSize + gArmSgiTokenSpaceGuid.PcdVirtioNetInterrupt + + gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress diff --git a/Platform/ARM/SgiPkg/Include/SgiPlatform.h b/Platform/ARM/SgiPkg/Include/SgiPlatform.h index 7c9322d1cda9..e36a412155ff 100644 --- a/Platform/ARM/SgiPkg/Include/SgiPlatform.h +++ b/Platform/ARM/SgiPkg/Include/SgiPlatform.h @@ -82,6 +82,9 @@ #define MULTI_CHIP_MODE_DISABLED 0x0 #define MULTI_CHIP_MODE_ENABLED 0x1 +// Remote chip address offset (4TB per chip) +#define SGI_REMOTE_CHIP_MEM_OFFSET(n) ((1ULL << 42) * (n)) + // ARM platform description data. typedef struct { UINTN PlatformId; diff --git a/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc b/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc new file mode 100644 index 000000000000..d4538233d760 --- /dev/null +++ b/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc @@ -0,0 +1,198 @@ +/** @file +* Multiple APIC Description Table (MADT) +* +* Copyright (c) 2019, ARM Limited. All rights reserved. +* +* SPDX-License-Identifier: BSD-2-Clause-Patent +* +**/ + +#include "SgiPlatform.h" +#include "SgiAcpiHeader.h" +#include <Library/AcpiLib.h> +#include <Library/ArmLib.h> +#include <Library/PcdLib.h> +#include <IndustryStandard/Acpi.h> + +#define CORE_CNT (FixedPcdGet32 (PcdClusterCount) * \ + FixedPcdGet32 (PcdCoreCount)) + +#define CHIP_CNT 2 + +// EFI_ACPI_6_2_GIC_STRUCTURE +#define EFI_ACPI_6_2_GICC_STRUCTURE_INIT(GicId, AcpiCpuUid, Mpidr, Flags, \ + PmuIrq, GicBase, GicVBase, GicHBase, GsivId, GicRBase, Efficiency) \ + { \ + EFI_ACPI_6_2_GIC, /* Type */ \ + sizeof (EFI_ACPI_6_2_GIC_STRUCTURE), /* Length */ \ + EFI_ACPI_RESERVED_WORD, /* Reserved */ \ + GicId, /* CPUInterfaceNumber */ \ + AcpiCpuUid, /* AcpiProcessorUid */ \ + Flags, /* Flags */ \ + 0, /* ParkingProtocolVersion */ \ + PmuIrq, /* PerformanceInterruptGsiv */ \ + 0, /* ParkedAddress */ \ + GicBase, /* PhysicalBaseAddress */ \ + GicVBase, /* GICV */ \ + GicHBase, /* GICH */ \ + GsivId, /* VGICMaintenanceInterrupt */ \ + GicRBase, /* GICRBaseAddress */ \ + Mpidr, /* MPIDR */ \ + Efficiency, /* ProcessorPowerEfficiencyClass */ \ + { \ + EFI_ACPI_RESERVED_BYTE, /* Reserved2[0] */ \ + EFI_ACPI_RESERVED_BYTE, /* Reserved2[1] */ \ + EFI_ACPI_RESERVED_BYTE /* Reserved2[2] */ \ + } \ + } + +// EFI_ACPI_6_2_GIC_DISTRIBUTOR_STRUCTURE +#define EFI_ACPI_6_2_GIC_DISTRIBUTOR_INIT(GicDistHwId, GicDistBase, \ + GicDistVector, GicVersion) \ + { \ + EFI_ACPI_6_2_GICD, /* Type */ \ + sizeof (EFI_ACPI_6_2_GIC_DISTRIBUTOR_STRUCTURE), \ + EFI_ACPI_RESERVED_WORD, /* Reserved1 */ \ + GicDistHwId, /* GicId */ \ + GicDistBase, /* PhysicalBaseAddress */ \ + GicDistVector, /* SystemVectorBase */ \ + GicVersion, /* GicVersion */ \ + { \ + EFI_ACPI_RESERVED_BYTE, /* Reserved2[0] */ \ + EFI_ACPI_RESERVED_BYTE, /* Reserved2[1] */ \ + EFI_ACPI_RESERVED_BYTE /* Reserved2[2] */ \ + } \ + } + +// EFI_ACPI_6_2_GICR_STRUCTURE +#define EFI_ACPI_6_2_GIC_REDISTRIBUTOR_INIT(RedisRegionAddr, RedisDiscLength) \ + { \ + EFI_ACPI_6_2_GICR, /* Type */ \ + sizeof (EFI_ACPI_6_2_GICR_STRUCTURE), /* Length */ \ + EFI_ACPI_RESERVED_WORD, /* Reserved */ \ + RedisRegionAddr, /* DiscoveryRangeBaseAddress */ \ + RedisDiscLength /* DiscoveryRangeLength */ \ + } + +// Multiple APIC Description Table +#pragma pack (1) + +typedef struct { + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header; + EFI_ACPI_6_2_GIC_STRUCTURE GicInterfaces[CORE_CNT * CHIP_CNT]; + EFI_ACPI_6_2_GIC_DISTRIBUTOR_STRUCTURE GicDistributor; + EFI_ACPI_6_2_GICR_STRUCTURE GicRedistributor[CHIP_CNT]; +} EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE; + +#pragma pack () + +STATIC EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = { + { + ARM_ACPI_HEADER ( + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE, + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION + ), + // MADT specific fields + 0, // LocalApicAddress + 0 // Flags + }, + { + // Format: EFI_ACPI_6_2_GICC_STRUCTURE_INIT(GicId, AcpiCpuUid, Mpidr, Flags, + // PmuIrq, GicBase, GicVBase, + // GicHBase, GsivId, GicRBase, + // Efficiency) + // Note: The GIC Structure of the primary CPU must be the first entry + // (see note in 5.2.12.14 GICC Structure of ACPI v6.2). + + // Chip - 0 CPUs + + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-0 + 0, 0, GET_MPID(0x0, 0x0), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-1 + 0, 1, GET_MPID(0x0, 0x100), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-2 + 0, 2, GET_MPID(0x0, 0x200), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-3 + 0, 3, GET_MPID(0x0, 0x300), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-4 + 0, 4, GET_MPID(0x100, 0x00), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-5 + 0, 5, GET_MPID(0x100, 0x100), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-6 + 0, 6, GET_MPID(0x100, 0x200), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-7 + 0, 7, GET_MPID(0x100, 0x300), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + + // Chip - 1 CPUs + + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-8 + 0, 8, GET_MPID(0x01000000ULL, 0x0), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-9 + 0, 9, GET_MPID(0x01000000ULL, 0x100), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-10 + 0, 10, GET_MPID(0x01000000ULL, 0x200), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-11 + 0, 11, GET_MPID(0x01000000ULL, 0x300), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-12 + 0, 12, GET_MPID(0x01000100ULL, 0x00ULL), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-13 + 0, 13, GET_MPID(0x01000100ULL, 0x100), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-14 + 0, 14, GET_MPID(0x01000100ULL, 0x200), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-15 + 0, 15, GET_MPID(0x01000100ULL, 0x300), EFI_ACPI_6_2_GIC_ENABLED, 23, + FixedPcdGet32 (PcdGicDistributorBase), + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */) + }, + // GIC Distributor Entry + EFI_ACPI_6_2_GIC_DISTRIBUTOR_INIT(0, FixedPcdGet32 (PcdGicDistributorBase), + 0, 3), + { + // GIC Redistributor for Chip 0 + EFI_ACPI_6_2_GIC_REDISTRIBUTOR_INIT(FixedPcdGet32 (PcdGicRedistributorsBase), + SIZE_1MB), + // GIC Redistributor for Chip 1 + EFI_ACPI_6_2_GIC_REDISTRIBUTOR_INIT(FixedPcdGet32 (PcdGicRedistributorsBase) + + SGI_REMOTE_CHIP_MEM_OFFSET(1), + SIZE_1MB) + } +}; + +// +// Reference the table being generated to prevent the optimizer from removing +// the data structure from the executable +// +VOID* CONST ReferenceAcpiTable = &Madt; -- 2.7.4 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [edk2-platforms] [PATCH v2 4/5] Platform/ARM/Sgi: Add ACPI tables for dual-chip RD-N1-Edge platform 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 4/5] Platform/ARM/Sgi: Add ACPI tables for dual-chip RD-N1-Edge platform Vijayenthiran Subramaniam @ 2020-02-13 17:22 ` Leif Lindholm 0 siblings, 0 replies; 13+ messages in thread From: Leif Lindholm @ 2020-02-13 17:22 UTC (permalink / raw) To: Vijayenthiran Subramaniam Cc: devel, michael.d.kinney, Ard.Biesheuvel, thomas.abraham On Wed, Feb 12, 2020 at 18:59:26 +0530, Vijayenthiran Subramaniam wrote: > RD-N1-Edge supports a dual-chip configuration in which two RD-N1-Edge > platforms are connected through high speed CCIX link. In this dual-chip > configuration, the CPU and core GIC Redistributors count are doubled. > Add ACPI tables for dual-chip RD-N1-Edge platform. > > Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> I have not verified the correctness of the ACPI contents, but on the whole: Reviewed-by: Leif Lindholm <leif@nuviainc.com> / Leif > --- > Platform/ARM/SgiPkg/SgiPlatform.dec | 1 + > Platform/ARM/SgiPkg/SgiPlatform.dsc | 1 + > Platform/ARM/SgiPkg/SgiPlatform.fdf | 1 + > Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf | 59 ++++++ > Platform/ARM/SgiPkg/Include/SgiPlatform.h | 3 + > Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc | 198 ++++++++++++++++++++ > 6 files changed, 263 insertions(+) > > diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dec b/Platform/ARM/SgiPkg/SgiPlatform.dec > index 229552ea7842..9d70ec677776 100644 > --- a/Platform/ARM/SgiPkg/SgiPlatform.dec > +++ b/Platform/ARM/SgiPkg/SgiPlatform.dec > @@ -28,6 +28,7 @@ [Guids.common] > gArmSgiTokenSpaceGuid = { 0x577d6941, 0xaea1, 0x40b4, { 0x90, 0x93, 0x2a, 0x86, 0x61, 0x72, 0x5a, 0x57 } } > gSgi575AcpiTablesFileGuid = { 0xc712719a, 0x0aaf, 0x438c, { 0x9c, 0xdd, 0x35, 0xab, 0x4d, 0x60, 0x20, 0x7d } } > gRdN1EdgeAcpiTablesFileGuid = { 0x4b0b91d0, 0x4a05, 0x45c4, { 0x88, 0xa7, 0x88, 0xe1, 0x70, 0xe7, 0x66, 0x94 } } > + gRdN1EdgeX2AcpiTablesFileGuid = { 0x82a34150, 0x0fc6, 0x45f4, { 0x8e, 0xa0, 0xf0, 0xa4, 0x66, 0x0c, 0xf3, 0x5d } } > gRdE1EdgeAcpiTablesFileGuid = { 0x2af40815, 0xa84e, 0x4de9, { 0x8c, 0x38, 0x91, 0x40, 0xb3, 0x54, 0x40, 0x73 } } > > [PcdsFeatureFlag.common] > diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dsc b/Platform/ARM/SgiPkg/SgiPlatform.dsc > index e38cc7da52a5..5226c5751e98 100644 > --- a/Platform/ARM/SgiPkg/SgiPlatform.dsc > +++ b/Platform/ARM/SgiPkg/SgiPlatform.dsc > @@ -279,6 +279,7 @@ [Components.common] > MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > Platform/ARM/SgiPkg/AcpiTables/Sgi575AcpiTables.inf > Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeAcpiTables.inf > + Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf > Platform/ARM/SgiPkg/AcpiTables/RdE1EdgeAcpiTables.inf > MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf > > diff --git a/Platform/ARM/SgiPkg/SgiPlatform.fdf b/Platform/ARM/SgiPkg/SgiPlatform.fdf > index 44e571a184bf..3d13998015b9 100644 > --- a/Platform/ARM/SgiPkg/SgiPlatform.fdf > +++ b/Platform/ARM/SgiPkg/SgiPlatform.fdf > @@ -101,6 +101,7 @@ [FV.FvMain] > INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > INF RuleOverride=ACPITABLE Platform/ARM/SgiPkg/AcpiTables/Sgi575AcpiTables.inf > INF RuleOverride=ACPITABLE Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeAcpiTables.inf > + INF RuleOverride=ACPITABLE Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf > INF RuleOverride=ACPITABLE Platform/ARM/SgiPkg/AcpiTables/RdE1EdgeAcpiTables.inf > INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf > > diff --git a/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf b/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf > new file mode 100644 > index 000000000000..1b584b152455 > --- /dev/null > +++ b/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf > @@ -0,0 +1,59 @@ > +## @file > +# ACPI table data and ASL sources required to boot the platform. > +# > +# Copyright (c) 2020, ARM Ltd. All rights reserved. > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION = 0x0001001A > + BASE_NAME = RdN1EdgeX2AcpiTables > + FILE_GUID = 82a34150-0fc6-45f4-8ea0-f0a4660cf35d > + MODULE_TYPE = USER_DEFINED > + VERSION_STRING = 1.0 > + > +[Sources] > + Dbg2.aslc > + Fadt.aslc > + Gtdt.aslc > + Iort.aslc > + Mcfg.aslc > + RdN1Edge/Dsdt.asl > + RdN1EdgeX2/Madt.aslc > + Spcr.aslc > + Ssdt.asl > + > +[Packages] > + ArmPkg/ArmPkg.dec > + ArmPlatformPkg/ArmPlatformPkg.dec > + EmbeddedPkg/EmbeddedPkg.dec > + MdePkg/MdePkg.dec > + Platform/ARM/SgiPkg/SgiPlatform.dec > + > +[FixedPcd] > + gArmPlatformTokenSpaceGuid.PcdCoreCount > + gArmPlatformTokenSpaceGuid.PcdClusterCount > + gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase > + gArmPlatformTokenSpaceGuid.PL011UartInterrupt > + > + gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum > + gArmTokenSpaceGuid.PcdArmArchTimerIntrNum > + gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum > + gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum > + gArmTokenSpaceGuid.PcdGicDistributorBase > + gArmTokenSpaceGuid.PcdGicRedistributorsBase > + gArmTokenSpaceGuid.PcdGenericWatchdogControlBase > + gArmTokenSpaceGuid.PcdGenericWatchdogRefreshBase > + gArmTokenSpaceGuid.PcdPciBusMin > + gArmTokenSpaceGuid.PcdPciBusMax > + > + gArmSgiTokenSpaceGuid.PcdVirtioBlkBaseAddress > + gArmSgiTokenSpaceGuid.PcdVirtioBlkSize > + gArmSgiTokenSpaceGuid.PcdVirtioBlkInterrupt > + gArmSgiTokenSpaceGuid.PcdVirtioNetBaseAddress > + gArmSgiTokenSpaceGuid.PcdVirtioNetSize > + gArmSgiTokenSpaceGuid.PcdVirtioNetInterrupt > + > + gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress > diff --git a/Platform/ARM/SgiPkg/Include/SgiPlatform.h b/Platform/ARM/SgiPkg/Include/SgiPlatform.h > index 7c9322d1cda9..e36a412155ff 100644 > --- a/Platform/ARM/SgiPkg/Include/SgiPlatform.h > +++ b/Platform/ARM/SgiPkg/Include/SgiPlatform.h > @@ -82,6 +82,9 @@ > #define MULTI_CHIP_MODE_DISABLED 0x0 > #define MULTI_CHIP_MODE_ENABLED 0x1 > > +// Remote chip address offset (4TB per chip) > +#define SGI_REMOTE_CHIP_MEM_OFFSET(n) ((1ULL << 42) * (n)) > + > // ARM platform description data. > typedef struct { > UINTN PlatformId; > diff --git a/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc b/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc > new file mode 100644 > index 000000000000..d4538233d760 > --- /dev/null > +++ b/Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc > @@ -0,0 +1,198 @@ > +/** @file > +* Multiple APIC Description Table (MADT) > +* > +* Copyright (c) 2019, ARM Limited. All rights reserved. > +* > +* SPDX-License-Identifier: BSD-2-Clause-Patent > +* > +**/ > + > +#include "SgiPlatform.h" > +#include "SgiAcpiHeader.h" > +#include <Library/AcpiLib.h> > +#include <Library/ArmLib.h> > +#include <Library/PcdLib.h> > +#include <IndustryStandard/Acpi.h> > + > +#define CORE_CNT (FixedPcdGet32 (PcdClusterCount) * \ > + FixedPcdGet32 (PcdCoreCount)) > + > +#define CHIP_CNT 2 > + > +// EFI_ACPI_6_2_GIC_STRUCTURE > +#define EFI_ACPI_6_2_GICC_STRUCTURE_INIT(GicId, AcpiCpuUid, Mpidr, Flags, \ > + PmuIrq, GicBase, GicVBase, GicHBase, GsivId, GicRBase, Efficiency) \ > + { \ > + EFI_ACPI_6_2_GIC, /* Type */ \ > + sizeof (EFI_ACPI_6_2_GIC_STRUCTURE), /* Length */ \ > + EFI_ACPI_RESERVED_WORD, /* Reserved */ \ > + GicId, /* CPUInterfaceNumber */ \ > + AcpiCpuUid, /* AcpiProcessorUid */ \ > + Flags, /* Flags */ \ > + 0, /* ParkingProtocolVersion */ \ > + PmuIrq, /* PerformanceInterruptGsiv */ \ > + 0, /* ParkedAddress */ \ > + GicBase, /* PhysicalBaseAddress */ \ > + GicVBase, /* GICV */ \ > + GicHBase, /* GICH */ \ > + GsivId, /* VGICMaintenanceInterrupt */ \ > + GicRBase, /* GICRBaseAddress */ \ > + Mpidr, /* MPIDR */ \ > + Efficiency, /* ProcessorPowerEfficiencyClass */ \ > + { \ > + EFI_ACPI_RESERVED_BYTE, /* Reserved2[0] */ \ > + EFI_ACPI_RESERVED_BYTE, /* Reserved2[1] */ \ > + EFI_ACPI_RESERVED_BYTE /* Reserved2[2] */ \ > + } \ > + } > + > +// EFI_ACPI_6_2_GIC_DISTRIBUTOR_STRUCTURE > +#define EFI_ACPI_6_2_GIC_DISTRIBUTOR_INIT(GicDistHwId, GicDistBase, \ > + GicDistVector, GicVersion) \ > + { \ > + EFI_ACPI_6_2_GICD, /* Type */ \ > + sizeof (EFI_ACPI_6_2_GIC_DISTRIBUTOR_STRUCTURE), \ > + EFI_ACPI_RESERVED_WORD, /* Reserved1 */ \ > + GicDistHwId, /* GicId */ \ > + GicDistBase, /* PhysicalBaseAddress */ \ > + GicDistVector, /* SystemVectorBase */ \ > + GicVersion, /* GicVersion */ \ > + { \ > + EFI_ACPI_RESERVED_BYTE, /* Reserved2[0] */ \ > + EFI_ACPI_RESERVED_BYTE, /* Reserved2[1] */ \ > + EFI_ACPI_RESERVED_BYTE /* Reserved2[2] */ \ > + } \ > + } > + > +// EFI_ACPI_6_2_GICR_STRUCTURE > +#define EFI_ACPI_6_2_GIC_REDISTRIBUTOR_INIT(RedisRegionAddr, RedisDiscLength) \ > + { \ > + EFI_ACPI_6_2_GICR, /* Type */ \ > + sizeof (EFI_ACPI_6_2_GICR_STRUCTURE), /* Length */ \ > + EFI_ACPI_RESERVED_WORD, /* Reserved */ \ > + RedisRegionAddr, /* DiscoveryRangeBaseAddress */ \ > + RedisDiscLength /* DiscoveryRangeLength */ \ > + } > + > +// Multiple APIC Description Table > +#pragma pack (1) > + > +typedef struct { > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header; > + EFI_ACPI_6_2_GIC_STRUCTURE GicInterfaces[CORE_CNT * CHIP_CNT]; > + EFI_ACPI_6_2_GIC_DISTRIBUTOR_STRUCTURE GicDistributor; > + EFI_ACPI_6_2_GICR_STRUCTURE GicRedistributor[CHIP_CNT]; > +} EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE; > + > +#pragma pack () > + > +STATIC EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = { > + { > + ARM_ACPI_HEADER ( > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE, > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION > + ), > + // MADT specific fields > + 0, // LocalApicAddress > + 0 // Flags > + }, > + { > + // Format: EFI_ACPI_6_2_GICC_STRUCTURE_INIT(GicId, AcpiCpuUid, Mpidr, Flags, > + // PmuIrq, GicBase, GicVBase, > + // GicHBase, GsivId, GicRBase, > + // Efficiency) > + // Note: The GIC Structure of the primary CPU must be the first entry > + // (see note in 5.2.12.14 GICC Structure of ACPI v6.2). > + > + // Chip - 0 CPUs > + > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-0 > + 0, 0, GET_MPID(0x0, 0x0), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-1 > + 0, 1, GET_MPID(0x0, 0x100), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-2 > + 0, 2, GET_MPID(0x0, 0x200), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-3 > + 0, 3, GET_MPID(0x0, 0x300), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-4 > + 0, 4, GET_MPID(0x100, 0x00), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-5 > + 0, 5, GET_MPID(0x100, 0x100), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-6 > + 0, 6, GET_MPID(0x100, 0x200), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-7 > + 0, 7, GET_MPID(0x100, 0x300), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + > + // Chip - 1 CPUs > + > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-8 > + 0, 8, GET_MPID(0x01000000ULL, 0x0), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-9 > + 0, 9, GET_MPID(0x01000000ULL, 0x100), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-10 > + 0, 10, GET_MPID(0x01000000ULL, 0x200), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-11 > + 0, 11, GET_MPID(0x01000000ULL, 0x300), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-12 > + 0, 12, GET_MPID(0x01000100ULL, 0x00ULL), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-13 > + 0, 13, GET_MPID(0x01000100ULL, 0x100), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-14 > + 0, 14, GET_MPID(0x01000100ULL, 0x200), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */), > + EFI_ACPI_6_2_GICC_STRUCTURE_INIT( // Neoverse-N1-15 > + 0, 15, GET_MPID(0x01000100ULL, 0x300), EFI_ACPI_6_2_GIC_ENABLED, 23, > + FixedPcdGet32 (PcdGicDistributorBase), > + 0x2c020000, 0x2c010000, 25, 0 /* GicRBase */, 0 /* Efficiency */) > + }, > + // GIC Distributor Entry > + EFI_ACPI_6_2_GIC_DISTRIBUTOR_INIT(0, FixedPcdGet32 (PcdGicDistributorBase), > + 0, 3), > + { > + // GIC Redistributor for Chip 0 > + EFI_ACPI_6_2_GIC_REDISTRIBUTOR_INIT(FixedPcdGet32 (PcdGicRedistributorsBase), > + SIZE_1MB), > + // GIC Redistributor for Chip 1 > + EFI_ACPI_6_2_GIC_REDISTRIBUTOR_INIT(FixedPcdGet32 (PcdGicRedistributorsBase) > + + SGI_REMOTE_CHIP_MEM_OFFSET(1), > + SIZE_1MB) > + } > +}; > + > +// > +// Reference the table being generated to prevent the optimizer from removing > +// the data structure from the executable > +// > +VOID* CONST ReferenceAcpiTable = &Madt; > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* [edk2-platforms] [PATCH v2 5/5] Platform/ARM/Sgi: Add initial support for RD-N1-Edge-Dual platform 2020-02-12 13:29 [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam ` (3 preceding siblings ...) 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 4/5] Platform/ARM/Sgi: Add ACPI tables for dual-chip RD-N1-Edge platform Vijayenthiran Subramaniam @ 2020-02-12 13:29 ` Vijayenthiran Subramaniam 2020-02-13 17:23 ` Leif Lindholm 2020-02-13 17:31 ` [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add " Leif Lindholm 5 siblings, 1 reply; 13+ messages in thread From: Vijayenthiran Subramaniam @ 2020-02-12 13:29 UTC (permalink / raw) To: devel, leif, michael.d.kinney, Ard.Biesheuvel; +Cc: thomas.abraham For RD-N1-Edge platforms, use multi-chip-mode information from the SGI platform descriptor HOB to pick the correct ACPI table to be installed. Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> --- Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf | 1 + Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf index a95c0d1dddd6..741dcc75ed6a 100644 --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf @@ -32,6 +32,7 @@ [Guids] gArmSgiPlatformIdDescriptorGuid gSgi575AcpiTablesFileGuid gRdN1EdgeAcpiTablesFileGuid + gRdN1EdgeX2AcpiTablesFileGuid gRdE1EdgeAcpiTablesFileGuid [FeaturePcd] diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c index a2250a37bb57..3ef775187ac6 100644 --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c @@ -38,6 +38,11 @@ STATIC SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP AcpiTableGuidLookup[] = { &gRdN1EdgeAcpiTablesFileGuid), ACPI_GUID_LOOKUP ( RD_N1E1_EDGE_PART_NUM, + RD_N1_EDGE_CONF_ID, + MULTI_CHIP_MODE_ENABLED, + &gRdN1EdgeX2AcpiTablesFileGuid), + ACPI_GUID_LOOKUP ( + RD_N1E1_EDGE_PART_NUM, RD_E1_EDGE_CONF_ID, MULTI_CHIP_MODE_DISABLED, &gRdE1EdgeAcpiTablesFileGuid), -- 2.7.4 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [edk2-platforms] [PATCH v2 5/5] Platform/ARM/Sgi: Add initial support for RD-N1-Edge-Dual platform 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 5/5] Platform/ARM/Sgi: Add initial support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam @ 2020-02-13 17:23 ` Leif Lindholm 0 siblings, 0 replies; 13+ messages in thread From: Leif Lindholm @ 2020-02-13 17:23 UTC (permalink / raw) To: Vijayenthiran Subramaniam Cc: devel, michael.d.kinney, Ard.Biesheuvel, thomas.abraham On Wed, Feb 12, 2020 at 18:59:27 +0530, Vijayenthiran Subramaniam wrote: > For RD-N1-Edge platforms, use multi-chip-mode information from the > SGI platform descriptor HOB to pick the correct ACPI table to be > installed. > > Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> Reviewed-by: Leif Lindholm <leif@nuviainc.com> > --- > Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf | 1 + > Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 5 +++++ > 2 files changed, 6 insertions(+) > > diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf > index a95c0d1dddd6..741dcc75ed6a 100644 > --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf > +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf > @@ -32,6 +32,7 @@ [Guids] > gArmSgiPlatformIdDescriptorGuid > gSgi575AcpiTablesFileGuid > gRdN1EdgeAcpiTablesFileGuid > + gRdN1EdgeX2AcpiTablesFileGuid > gRdE1EdgeAcpiTablesFileGuid > > [FeaturePcd] > diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c > index a2250a37bb57..3ef775187ac6 100644 > --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c > +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c > @@ -38,6 +38,11 @@ STATIC SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP AcpiTableGuidLookup[] = { > &gRdN1EdgeAcpiTablesFileGuid), > ACPI_GUID_LOOKUP ( > RD_N1E1_EDGE_PART_NUM, > + RD_N1_EDGE_CONF_ID, > + MULTI_CHIP_MODE_ENABLED, > + &gRdN1EdgeX2AcpiTablesFileGuid), > + ACPI_GUID_LOOKUP ( > + RD_N1E1_EDGE_PART_NUM, > RD_E1_EDGE_CONF_ID, > MULTI_CHIP_MODE_DISABLED, > &gRdE1EdgeAcpiTablesFileGuid), > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform 2020-02-12 13:29 [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam ` (4 preceding siblings ...) 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 5/5] Platform/ARM/Sgi: Add initial support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam @ 2020-02-13 17:31 ` Leif Lindholm 2020-02-14 13:52 ` [edk2-devel] " Vijayenthiran Subramaniam 5 siblings, 1 reply; 13+ messages in thread From: Leif Lindholm @ 2020-02-13 17:31 UTC (permalink / raw) To: Vijayenthiran Subramaniam Cc: devel, michael.d.kinney, Ard.Biesheuvel, thomas.abraham On the whole, looks good. If you can resubmit v3 versions of patches 2-3 only based on feedback, that would suffice. On a separate note: Could someone in ARM take an action item to go and figure out who should be default reviewer for the various ARM ltd platforms (virtual or not), and submit a patch to Maintainers.txt adding some R:? Best Regards, Leif On Wed, Feb 12, 2020 at 18:59:22 +0530, Vijayenthiran Subramaniam wrote: > Changes since v1: > - Fix typo which caused build error > > This patch series adds support for RD-N1-Edge platform with multi-chip > capability. The first patch in this series is an improvement to SgiPkg to avoid > any usage of deprecated APIs. The second patch refactors the existing code to > use lookup table in order to identify the platform. The rest of the patch adds > multi-chip support for the RD-N1-Edge platform. > > Vijayenthiran Subramaniam (5): > Platform/ARM/SgiPkg: Disable use of deprecated APIs > Platform/ARM/SgiPkg: Use lookup table to install ACPI table > Platform/ARM/SgiPkg: Add MultiChipMode to Platform Descriptor > Platform/ARM/Sgi: Add ACPI tables for dual-chip RD-N1-Edge platform > Platform/ARM/Sgi: Add initial support for RD-N1-Edge-Dual platform > > Platform/ARM/SgiPkg/SgiPlatform.dec | 1 + > Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc | 3 + > Platform/ARM/SgiPkg/SgiPlatform.dsc | 4 + > Platform/ARM/SgiPkg/SgiPlatform.fdf | 1 + > Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf | 59 ++++++ > Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf | 1 + > Platform/ARM/SgiPkg/Include/SgiPlatform.h | 7 + > Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 61 +++++- > Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c | 8 + > Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc | 198 ++++++++++++++++++++ > 10 files changed, 333 insertions(+), 10 deletions(-) > create mode 100644 Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf > create mode 100644 Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc > > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [edk2-devel] [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform 2020-02-13 17:31 ` [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add " Leif Lindholm @ 2020-02-14 13:52 ` Vijayenthiran Subramaniam 0 siblings, 0 replies; 13+ messages in thread From: Vijayenthiran Subramaniam @ 2020-02-14 13:52 UTC (permalink / raw) To: devel, leif; +Cc: michael.d.kinney, Ard.Biesheuvel, Thomas Abraham Hi Leif, On Thu, Feb 13, 2020 at 5:31 PM Leif Lindholm <leif@nuviainc.com> wrote: > > On the whole, looks good. > If you can resubmit v3 versions of patches 2-3 only based on feedback, > that would suffice. Thanks for reviewing. I have sent out v3 retaining R-b in all patch except in patch 2. There's no change in patch 3 except i to Idx. > > On a separate note: > Could someone in ARM take an action item to go and figure out who > should be default reviewer for the various ARM ltd platforms (virtual > or not), and submit a patch to Maintainers.txt adding some R:? > > Best Regards, > > Leif > > On Wed, Feb 12, 2020 at 18:59:22 +0530, Vijayenthiran Subramaniam wrote: > > Changes since v1: > > - Fix typo which caused build error > > > > This patch series adds support for RD-N1-Edge platform with multi-chip > > capability. The first patch in this series is an improvement to SgiPkg to avoid > > any usage of deprecated APIs. The second patch refactors the existing code to > > use lookup table in order to identify the platform. The rest of the patch adds > > multi-chip support for the RD-N1-Edge platform. > > > > Vijayenthiran Subramaniam (5): > > Platform/ARM/SgiPkg: Disable use of deprecated APIs > > Platform/ARM/SgiPkg: Use lookup table to install ACPI table > > Platform/ARM/SgiPkg: Add MultiChipMode to Platform Descriptor > > Platform/ARM/Sgi: Add ACPI tables for dual-chip RD-N1-Edge platform > > Platform/ARM/Sgi: Add initial support for RD-N1-Edge-Dual platform > > > > Platform/ARM/SgiPkg/SgiPlatform.dec | 1 + > > Platform/ARM/SgiPkg/PlatformStandaloneMm.dsc | 3 + > > Platform/ARM/SgiPkg/SgiPlatform.dsc | 4 + > > Platform/ARM/SgiPkg/SgiPlatform.fdf | 1 + > > Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf | 59 ++++++ > > Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf | 1 + > > Platform/ARM/SgiPkg/Include/SgiPlatform.h | 7 + > > Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 61 +++++- > > Platform/ARM/SgiPkg/Library/SgiPlatformPei/SgiPlatformPeim.c | 8 + > > Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc | 198 ++++++++++++++++++++ > > 10 files changed, 333 insertions(+), 10 deletions(-) > > create mode 100644 Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2AcpiTables.inf > > create mode 100644 Platform/ARM/SgiPkg/AcpiTables/RdN1EdgeX2/Madt.aslc > > > > -- > > 2.7.4 > > > Regards, Vijayenthiran ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2020-02-14 13:53 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-02-12 13:29 [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 1/5] Platform/ARM/SgiPkg: Disable use of deprecated APIs Vijayenthiran Subramaniam 2020-02-13 16:56 ` Leif Lindholm 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 2/5] Platform/ARM/SgiPkg: Use lookup table to install ACPI table Vijayenthiran Subramaniam 2020-02-13 17:14 ` Leif Lindholm 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 3/5] Platform/ARM/SgiPkg: Add MultiChipMode to Platform Descriptor Vijayenthiran Subramaniam 2020-02-13 17:16 ` Leif Lindholm 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 4/5] Platform/ARM/Sgi: Add ACPI tables for dual-chip RD-N1-Edge platform Vijayenthiran Subramaniam 2020-02-13 17:22 ` Leif Lindholm 2020-02-12 13:29 ` [edk2-platforms] [PATCH v2 5/5] Platform/ARM/Sgi: Add initial support for RD-N1-Edge-Dual platform Vijayenthiran Subramaniam 2020-02-13 17:23 ` Leif Lindholm 2020-02-13 17:31 ` [edk2-platforms] [PATCH v2 0/5] Platform/ARM/SgiPkg: Add " Leif Lindholm 2020-02-14 13:52 ` [edk2-devel] " Vijayenthiran Subramaniam
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox