summaryrefslogtreecommitdiff
path: root/Platform/ARM/VExpressPkg
diff options
context:
space:
mode:
authorKajal Agarwal <kajal.agarwal@arm.com>2026-10-12 17:39:27 +0300
committerSami Mujawar <sami.mujawar@arm.com>2026-10-22 12:41:18 +0300
commitf72b7cdf572f634c7b15ace80f8d4d8941df7735 (patch)
treee799b5ddfc27e0641d7c41fee3d8a29d5bfded7e /Platform/ARM/VExpressPkg
parent1c500d13a653cf0f556ecf7ce703c12874247efc (diff)
downloadedk2-platforms-master.tar.xz
Platform/ARM/VExpressPkg: Generate the SMC91X SSDT dynamicallyHEADmaster
Replace the static SMC91X device descriptions in the FVP GICv3 and GICv5 DSDTs with an SSDT generated from Configuration Manager data. Make PcdLan91xDxeBaseAddress unconditional so the device is described to the OS even when the UEFI LAN91x driver is disabled. Requires the DynamicTablesPkg SMC91X SSDT generator. Signed-off-by: Kajal Agarwal <kajal.agarwal@arm.com>
Diffstat (limited to 'Platform/ARM/VExpressPkg')
-rw-r--r--Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc2
-rw-r--r--Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/Dsdt.asl11
-rw-r--r--Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/DsdtGicV5.asl11
-rw-r--r--Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c33
-rw-r--r--Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h7
-rw-r--r--Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf1
-rw-r--r--Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/Platform.h5
7 files changed, 41 insertions, 29 deletions
diff --git a/Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc b/Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc
index a5e430350e..1b6cab4644 100644
--- a/Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc
+++ b/Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc
@@ -426,10 +426,8 @@
# use the TTY terminal type
gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4
-!ifdef EDK2_ENABLE_SMSC_91X
# Ethernet (SMSC 91C111)
gArmVExpressTokenSpaceGuid.PcdLan91xDxeBaseAddress|0x1A000000
-!endif
!if $(SECURE_BOOT_ENABLE) == TRUE
# override the default values from SecurityPkg to ensure images from all sources are verified in secure boot
diff --git a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/Dsdt.asl b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/Dsdt.asl
index e3129f46bb..9efdcb95bd 100644
--- a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/Dsdt.asl
+++ b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/Dsdt.asl
@@ -35,17 +35,6 @@ DefinitionBlock("DsdtTable.aml", "DSDT", 2, "ARMLTD", "ARM-VEXP", 1) {
Return (Arg3)
}
- // SMC91X
- Device (NET0) {
- Name (_HID, "LNRO0003")
- Name (_UID, 0)
-
- Name (_CRS, ResourceTemplate () {
- Memory32Fixed (ReadWrite, 0x1a000000, 0x00010000)
- Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) {0x2F}
- })
- }
-
// VIRTIO block device
Device (VIRT) {
Name (_HID, "LNRO0005")
diff --git a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/DsdtGicV5.asl b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/DsdtGicV5.asl
index 26bae5961c..2921cbfeee 100644
--- a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/DsdtGicV5.asl
+++ b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/AslTables/DsdtGicV5.asl
@@ -36,17 +36,6 @@ DefinitionBlock("DsdtTable.aml", "DSDT", 2, "ARMLTD", "ARM-VEXP", 1) {
Return (Arg3)
}
- // SMC91X
- Device (NET0) {
- Name (_HID, "LNRO0003")
- Name (_UID, 0)
-
- Name (_CRS, ResourceTemplate () {
- Memory32Fixed (ReadWrite, 0x1a000000, 0x00010000)
- Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) {0x6000000F}
- })
- }
-
// VIRTIO block device
Device (VIRT) {
Name (_HID, "LNRO0005")
diff --git a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c
index de981ad65e..03ab763b66 100644
--- a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c
+++ b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c
@@ -136,6 +136,13 @@ EDKII_PLATFORM_REPOSITORY_INFO VExpressPlatRepositoryInfo = {
NULL,
},
#endif
+ // SSDT table describing the SMC91X network device
+ {
+ EFI_ACPI_6_3_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
+ 0, // Unused
+ CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdSsdtSmc91x),
+ NULL
+ },
// Note: The last 3 tables in this list are for FVP RevC only.
// IORT Table - FVP RevC
{
@@ -339,6 +346,16 @@ EDKII_PLATFORM_REPOSITORY_INFO VExpressPlatRepositoryInfo = {
EFI_ACPI_6_3_DWORD, // Access size
},
+ // SMC91X network device
+ {
+ FixedPcdGet32 (PcdLan91xDxeBaseAddress),
+ FVP_SMC91X_SIZE,
+ {
+ FVP_SMC91X_IRQ,
+ 0 // Level, ActiveHigh
+ }
+ },
+
// GIC ITS
{
// The GIC ITS ID.
@@ -1788,8 +1805,8 @@ InitialiseProcStrings (
@param [in] This Pointer to the Configuration Manager Protocol.
- @retval
- EFI_SUCCESS Success
+ @retval EFI_SUCCESS The platform repository was initialized.
+ @return An error from platform information initialization.
**/
STATIC
EFI_STATUS
@@ -1846,6 +1863,8 @@ InitializePlatformRepository (
if (PlatformRepo->HasGicV5) {
// GICv5 uses different interrupts to previous GICs
+ PlatformRepo->Smc91xInfo.Interrupt.Interrupt = FVP_GICV5_SMC91X_IRQ;
+
for (Index = 0; Index < PLAT_CPU_COUNT; Index++) {
PlatformRepo->GicCInfo[Index].PerformanceInterruptGsiv = FVP_GICV5_PMU_IRQ;
PlatformRepo->GicCInfo[Index].VGICMaintenanceInterrupt = FVP_GICV5_VGIC_IRQ;
@@ -2522,6 +2541,16 @@ GetArchCommonNameSpaceObject (
);
break;
+ case EArchCommonObjSmc91xInfo:
+ Status = HandleCmObject (
+ CmObjectId,
+ &PlatformRepo->Smc91xInfo,
+ sizeof (PlatformRepo->Smc91xInfo),
+ 1,
+ CmObject
+ );
+ break;
+
#ifdef HEADLESS_PLATFORM
case EArchCommonObjFixedFeatureFlags:
Status = HandleCmObject (
diff --git a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h
index 3ca9d5cc3e..71c30978f8 100644
--- a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h
+++ b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h
@@ -137,9 +137,9 @@ typedef EFI_STATUS (*CM_OBJECT_HANDLER_PROC) (
/** The number of ACPI tables to install
*/
#ifdef ENABLE_TPM
-#define PLAT_ACPI_TABLE_COUNT 14
+#define PLAT_ACPI_TABLE_COUNT 15
#else
-#define PLAT_ACPI_TABLE_COUNT 13
+#define PLAT_ACPI_TABLE_COUNT 14
#endif
#ifdef ENABLE_TPM
@@ -281,6 +281,9 @@ typedef struct PlatformRepositoryInfo {
/// Serial port information for the DBG2 UART port
CM_ARCH_COMMON_SERIAL_PORT_INFO DbgSerialPort;
+ /// SMC91X network device information
+ CM_ARCH_COMMON_SMC91X_INFO Smc91xInfo;
+
/// GIC ITS information
CM_ARM_GIC_ITS_INFO GicItsInfo;
diff --git a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf
index e4fb44a4f8..2423bc47ed 100644
--- a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf
+++ b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf
@@ -92,6 +92,7 @@
gArmVExpressTokenSpaceGuid.PcdTpmSipSmcId
gArmVExpressTokenSpaceGuid.PcdTpmUseSipSmc
+ gArmVExpressTokenSpaceGuid.PcdLan91xDxeBaseAddress
[Pcd]
gArmTokenSpaceGuid.PcdGenericWatchdogEl2IntrNum
diff --git a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/Platform.h b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/Platform.h
index a91d837547..b6988de519 100644
--- a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/Platform.h
+++ b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManagerDxe/Platform.h
@@ -119,6 +119,10 @@
#define FVP_GICV5_IWB_CONF_FRAME_BASE (0x2f000000)
#define FVP_GICV5_IWB_GSIV_BASE (FVP_GICV5_GSI_TYPE_IWB)
+#define FVP_SMC91X_SIZE (0x00010000)
+#define FVP_SMC91X_IRQ (0x2F)
+#define FVP_GICV5_SMC91X_IRQ (FVP_GICV5_INTERRUPT_TYPE_SPI | 0x0F)
+
#define FVP_GICV5_PMU_IRQ (FVP_GICV5_INTERRUPT_TYPE_PPI | 0x17)
#define FVP_GICV5_VGIC_IRQ (FVP_GICV5_INTERRUPT_TYPE_PPI | 0x19)
@@ -150,4 +154,3 @@
#define FVP_GICV5_PCIE_IWB3_IRQ (FVP_GICV5_IWB_GSIV_BASE | 0xab)
#endif // PLATFORM_H__
-