summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.c33
-rw-r--r--Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.h4
-rw-r--r--Platform/ARM/Drivers/StandaloneMmDmc620RasDriver/StandaloneMmDmc620RasDriver.inf3
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