diff options
3 files changed, 39 insertions, 1 deletions
diff --git a/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.c b/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.c index fc2ea7cb..9fdf3e36 100644 --- a/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.c +++ b/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.c @@ -13,6 +13,7 @@ **/
#include "StandaloneMmDmc620RasDriver.h"
+#include <Protocol/MmEventIdLut.h>
//
// Private copy of the MM system table for future use
@@ -397,6 +398,7 @@ Dmc620RasDriverInitialize ( EFI_HANDLE DispatchHandle;
volatile DMC620_REGS_TYPE *DmcCtrl;
UINT32 ErrThreshold;
+ EFI_MM_EVENTID_LUT_PROTOCOL *mMmEventIdLut;
ASSERT (SystemTable != NULL);
mMmst = SystemTable;
@@ -404,6 +406,37 @@ Dmc620RasDriverInitialize ( //TODO: Support all DMCX
DmcCtrl = DMC620_0;
+ Status = mMmst->MmLocateProtocol(
+ &gEfiMmRegisterEventIdProtocolGuid,
+ NULL,
+ (VOID **) &mMmEventIdLut
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "DMC620: Failed to lookup EventID registration " \
+ "protocol.\n"));
+ return Status;
+ }
+
+ Status = mMmEventIdLut->RegisterEventId (
+ mMmEventIdLut,
+ DMC620_ECC_ERROR_EVENT_ID,
+ &gEfiMmDmcRasEventGuid
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "DM620: Failed to register Event ID 0x%x\n",
+ DMC620_ECC_ERROR_EVENT_ID));
+ }
+
+ Status = mMmEventIdLut->RegisterEventId (
+ mMmEventIdLut,
+ DMC620_INJECT_SRAM_ECC_ERROR_EVENT_ID,
+ &gEfiMmDmcErrorInjectEventGuid
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "DM620: Failed to register Event ID 0x%x\n",
+ DMC620_INJECT_SRAM_ECC_ERROR_EVENT_ID));
+ }
+
// register the RAS event handle
Status = mMmst->MmiHandlerRegister (Dmc620RasEventHandler, &gEfiMmDmcRasEventGuid, &DispatchHandle);
if (EFI_ERROR(Status)) {
diff --git a/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.h b/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.h index ab80fcd0..00d55036 100644 --- a/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.h +++ b/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.h @@ -34,6 +34,10 @@ #include <Guid/Cper.h>
#include <IndustryStandard/Acpi.h>
+/* SPM originating Event IDs */
+#define DMC620_INJECT_SRAM_ECC_ERROR_EVENT_ID 0xC4000042
+#define DMC620_ECC_ERROR_EVENT_ID 0xC4000044
+
/* DMC-620 base address */
#define MEMORY_CONTROLLER_BASE 0x4E000000
diff --git a/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.inf b/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.inf index 0e2bf396..f0653753 100644 --- a/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.inf +++ b/Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.inf @@ -42,6 +42,7 @@ [Protocols]
gEfiMmRasErrorSourceInfoProtocolGuid
+ gEfiMmRegisterEventIdProtocolGuid
[Pcd]
gStandaloneMmPkgTokenSpaceGuid.PcdDmcCorrectableErrorThreshold
@@ -55,5 +56,5 @@ gEfiMmDmcErrorInjectEventGuid
[Depex]
- TRUE
+ gEfiMmRegisterEventIdProtocolGuid
|