[edk2-platforms][PATCH V1 0/3] Enable CXL support and prepare necessary ACPI tables

Sayanta Pattanayak

This patch series adds support for discovering and reading out CXL
device capabilities, also it prepares SRAT, HMAT, CEDT tables.

First patch adds a CXL DXE. It discovers PCIe device with CXL and DOE
capability. Once DOE capability is discovered, DOE operation is
executed to fetch CDAT (DSMAS) table, which will have information about
Device physical address and range. At present only DSMAS table is tested
and using the information from DSMAS table remote memory node is
prepared by platform drivers. This Dxe also installs a protocol,
enabling platform modules to fetch details about remote memory.

The purpose of second patch is to prepare SRAT and HMAT table
dynamically for associating proximity / locality domains to memory
ranges and also describing memory attributes associated with memory
ranges. There is statically defined GICC device in SRAT table, which is
kept as it is needed for Sgi platform boot. GICC structure is just kept
to maintain platform boot integrity, otherwise it has no relation with
the purpose of this patch.

Third patch introduces CEDT structures (CFMWS, CHBS) that will allow
kernel to configure CXL host bridge HDM decoder. It also adds an
ACPI0016 object to indicate presence of CXL Host bridge. In this patch,
Interleave target number is considered 1 for demonstrating a reference
solution with CEDT structures. There is no real interleaving address
windows across multiple ports with this configuration. It is same as
single port CXL Host bridge.

CXL Specification Revision 3.0, Version 0.7 is referred for patch

Link to github branch with the patches in this series -

Sayanta Pattanayak (3):
Platform/ARM: add CXL driver
Platform/Sgi: prepare SRAT, HMAT table
Platform/Sgi: Add CXL Early Discovery Table(CEDT) for Rd-N2-Cfg1

Platform/ARM/Drivers/CxlDxe/CxlDxe.dec | 21 +
Platform/ARM/SgiPkg/SgiPlatform.dsc.inc | 7 +
Platform/ARM/SgiPkg/SgiPlatform.fdf | 9 +-
Platform/ARM/Drivers/CxlDxe/CxlDxe.inf | 48 ++
.../SgiPkg/AcpiTables/RdN2Cfg1AcpiTables.inf | 7 +-
.../AcpiTableGenerator.inf | 73 +++
Platform/ARM/Drivers/CxlDxe/CxlDxe.h | 156 ++++++
Platform/ARM/Include/Protocol/Cxl.h | 57 ++
.../AcpiTableGenerator.h | 36 ++
Platform/ARM/Drivers/CxlDxe/CxlDxe.c | 530 ++++++++++++++++++
.../AcpiTableGenerator.c | 72 +++
.../HmatTableGenerator.c | 120 ++++
.../SratTableGenerator.c | 290 ++++++++++
.../ARM/SgiPkg/AcpiTables/RdN2Cfg1/Cedt.aslc | 86 +++
.../ARM/SgiPkg/AcpiTables/RdN2Cfg1/Ssdt.asl | 119 ++++
15 files changed, 1628 insertions(+), 3 deletions(-)
create mode 100644 Platform/ARM/Drivers/CxlDxe/CxlDxe.dec
create mode 100644 Platform/ARM/Drivers/CxlDxe/CxlDxe.inf
create mode 100644 Platform/ARM/SgiPkg/Library/AcpiTableGeneratorLib/Acp=
create mode 100644 Platform/ARM/Drivers/CxlDxe/CxlDxe.h
create mode 100644 Platform/ARM/Include/Protocol/Cxl.h
create mode 100644 Platform/ARM/SgiPkg/Library/AcpiTableGeneratorLib/Acp=
create mode 100644 Platform/ARM/Drivers/CxlDxe/CxlDxe.c
create mode 100644 Platform/ARM/SgiPkg/Library/AcpiTableGeneratorLib/Acp=
create mode 100644 Platform/ARM/SgiPkg/Library/AcpiTableGeneratorLib/Hma=
create mode 100644 Platform/ARM/SgiPkg/Library/AcpiTableGeneratorLib/Sra=
create mode 100644 Platform/ARM/SgiPkg/AcpiTables/RdN2Cfg1/Cedt.aslc
create mode 100644 Platform/ARM/SgiPkg/AcpiTables/RdN2Cfg1/Ssdt.asl