From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web09.26155.1625933929952043901 for ; Sat, 10 Jul 2021 09:18:50 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: omkar.kulkarni@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D80A431B; Sat, 10 Jul 2021 09:18:39 -0700 (PDT) Received: from usa.arm.com (a077433.blr.arm.com [10.162.4.33]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id A990B3F5A1; Sat, 10 Jul 2021 09:18:38 -0700 (PDT) From: "Omkar Anand Kulkarni" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Sami Mujawar Subject: [PATCH v2 0/4] ArmPlatformPkg: Add support to generate HEST ACPI table Date: Sat, 10 Jul 2021 21:48:27 +0530 Message-Id: <20210710161831.30433-1-omkar.kulkarni@arm.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Changes since v1: - Helper added for HEST ACPI table generation. - Rebased to the latest upstream code. Hardware Error Source Table (HEST)[1] and Software Delegated Exception In= terface (SDEI)[2] ACPI tables are used to acomplish firmware first error handling= .This patch series introduces a framework to build and install the HEST ACPI ta= ble dynamically. The following figure illustrates the possible usage of the dyanamic generation of HEST ACPI table. NS | S +--------------------------------------+---------------------------------= -----+ | | = | |+-------------------------------------+---------------------+ = | || +---------------------+--------------------+| = | || | | || = | || +-----------+ |+------------------+ | +-----------------+|| +---------= ----+| || |HestTable | || HestErrorSource | | | HestErrorSource ||| | DMC-620 = || || | DXE | || DXE | | | StandaloneMM ||| |Standalon= e MM|| || +-----------+ |+------------------+ | +-----------------+|| +---------= ----+| || |GHESv2 | || = | || +---------------------+--------------------+| = | || +--------------------+ | | = | || |PlatformErrorHandler| | | = | || | DXE | | | = | || +--------------------+ | | = | ||FF FWK | | = | |+-------------------------------------+---------------------+ = | | | = | +--------------------------------------+---------------------------------= -----+ | Figure: Firmware First Error Handling approach. All the hardware error sources are added to HEST table as GHESv2[3] error= source descriptors. The framework comprises of following DXE and MM drivers: - HestTableDxe: Builds HEST table header and allows appending error source descriptors = to the HEST table. Also provides protocol interface to install the built HEST = table. - HestErrorSourceDxe & HestErrorSourceStandaloneMM: These two drivers together retrieve all possible error source descripto= rs of type GHESv2 from the MM drivers implementing HEST Error Source Descript= or protocol. Once all the descriptors are collected HestErrorSourceDxe app= ends it to HEST table using HestTableDxe driver. =20 - PlatformErrorHandlerDxe: Builds and installs SDEI ACPI table. This driver does not initialize(lo= ad) until HestErrorSourceDxe driver has finished appending all possible GHE= Sv2 error source descriptors to the HEST table. Once that is complete using= the HestTableDxe driver it installs the HEST table. This patch series provides reference implementation for DMC-620 Dynamic M= emory Controller[4] that has RAS feature enabled. This is platform code implemented as Standalone MM driver in edk2-platforms. References: [1] : ACPI 6.3, Table 18-382, Hardware Error Source Table [2] : SDEI Platform Design Document, revision b, 10 Appendix C, ACPI tabl= e definitions for SDEI [3] : ACPI Reference Specification 6.3, Table 18-393 GHESv2 Structure [4] : DMC620 Dynamic Memory Controller, revision r1p0 [5] : UEFI Reference Specification 2.8, Appendix N - Common Platform Erro= r Record [6] : UEFI Reference Specification 2.8, Section N.2.5 Memory Error Sectio= n Link to github branch with the patches in this series - https://github.com/omkkul01/edk2/tree/ras_firmware_first_edk2 Omkar Anand Kulkarni (4): ArmPlatformPkg: Allow dynamic generation of HEST ACPI table ArmPlatformPkg: add definition for MM_HEST_ERROR_SOURCE_DESC_PROTOCOL ArmPlatformPkg: retreive error source descriptors from MM ArmPlatformPkg: Add helpers for HEST table generation ArmPlatformPkg/ArmPlatformPkg.dec | 12 + .../Drivers/Apei/HestDxe/HestDxe.inf | 49 +++ .../HestMmErrorSources/HestErrorSourceDxe.inf | 44 +++ .../HestErrorSourceStandaloneMm.inf | 51 +++ .../HestMmErrorSourceCommon.h | 37 ++ ArmPlatformPkg/Include/HestAcpiHeader.h | 49 +++ .../Include/Protocol/HestErrorSourceInfo.h | 64 ++++ ArmPlatformPkg/Include/Protocol/HestTable.h | 71 ++++ ArmPlatformPkg/Drivers/Apei/HestDxe/HestDxe.c | 354 ++++++++++++++++++ .../HestMmErrorSources/HestErrorSourceDxe.c | 308 +++++++++++++++ .../HestErrorSourceStandaloneMm.c | 312 +++++++++++++++ 11 files changed, 1351 insertions(+) create mode 100644 ArmPlatformPkg/Drivers/Apei/HestDxe/HestDxe.inf create mode 100644 ArmPlatformPkg/Drivers/HestMmErrorSources/HestErrorSo= urceDxe.inf create mode 100644 ArmPlatformPkg/Drivers/HestMmErrorSources/HestErrorSo= urceStandaloneMm.inf create mode 100644 ArmPlatformPkg/Drivers/HestMmErrorSources/HestMmError= SourceCommon.h create mode 100644 ArmPlatformPkg/Include/HestAcpiHeader.h create mode 100644 ArmPlatformPkg/Include/Protocol/HestErrorSourceInfo.h create mode 100644 ArmPlatformPkg/Include/Protocol/HestTable.h create mode 100644 ArmPlatformPkg/Drivers/Apei/HestDxe/HestDxe.c create mode 100644 ArmPlatformPkg/Drivers/HestMmErrorSources/HestErrorSo= urceDxe.c create mode 100644 ArmPlatformPkg/Drivers/HestMmErrorSources/HestErrorSo= urceStandaloneMm.c --=20 2.17.1