[top] Add a SV enum for enumerating alerts

Signed-off-by: Michael Schaffner <msf@google.com>
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv
index e2e7e97..9fc4595 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv
@@ -551,6 +551,122 @@
   parameter int unsigned TOP_EARLGREY_ROM_SIZE_BYTES = 32'h8000;
 
 
+  // Enumeration of alert modules
+  typedef enum int unsigned {
+    TopEarlgreyAlertPeripheralUart0 = 0,
+    TopEarlgreyAlertPeripheralUart1 = 1,
+    TopEarlgreyAlertPeripheralUart2 = 2,
+    TopEarlgreyAlertPeripheralUart3 = 3,
+    TopEarlgreyAlertPeripheralGpio = 4,
+    TopEarlgreyAlertPeripheralSpiDevice = 5,
+    TopEarlgreyAlertPeripheralI2c0 = 6,
+    TopEarlgreyAlertPeripheralI2c1 = 7,
+    TopEarlgreyAlertPeripheralI2c2 = 8,
+    TopEarlgreyAlertPeripheralPattgen = 9,
+    TopEarlgreyAlertPeripheralRvTimer = 10,
+    TopEarlgreyAlertPeripheralOtpCtrl = 11,
+    TopEarlgreyAlertPeripheralLcCtrl = 12,
+    TopEarlgreyAlertPeripheralSpiHost0 = 13,
+    TopEarlgreyAlertPeripheralSpiHost1 = 14,
+    TopEarlgreyAlertPeripheralUsbdev = 15,
+    TopEarlgreyAlertPeripheralPwrmgrAon = 16,
+    TopEarlgreyAlertPeripheralRstmgrAon = 17,
+    TopEarlgreyAlertPeripheralClkmgrAon = 18,
+    TopEarlgreyAlertPeripheralSysrstCtrlAon = 19,
+    TopEarlgreyAlertPeripheralAdcCtrlAon = 20,
+    TopEarlgreyAlertPeripheralPwmAon = 21,
+    TopEarlgreyAlertPeripheralPinmuxAon = 22,
+    TopEarlgreyAlertPeripheralAonTimerAon = 23,
+    TopEarlgreyAlertPeripheralSensorCtrl = 24,
+    TopEarlgreyAlertPeripheralSramCtrlRetAon = 25,
+    TopEarlgreyAlertPeripheralFlashCtrl = 26,
+    TopEarlgreyAlertPeripheralRvDm = 27,
+    TopEarlgreyAlertPeripheralRvPlic = 28,
+    TopEarlgreyAlertPeripheralAes = 29,
+    TopEarlgreyAlertPeripheralHmac = 30,
+    TopEarlgreyAlertPeripheralKmac = 31,
+    TopEarlgreyAlertPeripheralOtbn = 32,
+    TopEarlgreyAlertPeripheralKeymgr = 33,
+    TopEarlgreyAlertPeripheralCsrng = 34,
+    TopEarlgreyAlertPeripheralEntropySrc = 35,
+    TopEarlgreyAlertPeripheralEdn0 = 36,
+    TopEarlgreyAlertPeripheralEdn1 = 37,
+    TopEarlgreyAlertPeripheralSramCtrlMain = 38,
+    TopEarlgreyAlertPeripheralRomCtrl = 39,
+    TopEarlgreyAlertPeripheralRvCoreIbex = 40,
+    TopEarlgreyAlertPeripheralCount
+  } alert_peripheral_e;
+
+  // Enumeration of alerts
+  typedef enum int unsigned {
+    TopEarlgreyAlertIdUart0FatalFault = 0,
+    TopEarlgreyAlertIdUart1FatalFault = 1,
+    TopEarlgreyAlertIdUart2FatalFault = 2,
+    TopEarlgreyAlertIdUart3FatalFault = 3,
+    TopEarlgreyAlertIdGpioFatalFault = 4,
+    TopEarlgreyAlertIdSpiDeviceFatalFault = 5,
+    TopEarlgreyAlertIdI2c0FatalFault = 6,
+    TopEarlgreyAlertIdI2c1FatalFault = 7,
+    TopEarlgreyAlertIdI2c2FatalFault = 8,
+    TopEarlgreyAlertIdPattgenFatalFault = 9,
+    TopEarlgreyAlertIdRvTimerFatalFault = 10,
+    TopEarlgreyAlertIdOtpCtrlFatalMacroError = 11,
+    TopEarlgreyAlertIdOtpCtrlFatalCheckError = 12,
+    TopEarlgreyAlertIdOtpCtrlFatalBusIntegError = 13,
+    TopEarlgreyAlertIdOtpCtrlFatalPrimOtpAlert = 14,
+    TopEarlgreyAlertIdOtpCtrlRecovPrimOtpAlert = 15,
+    TopEarlgreyAlertIdLcCtrlFatalProgError = 16,
+    TopEarlgreyAlertIdLcCtrlFatalStateError = 17,
+    TopEarlgreyAlertIdLcCtrlFatalBusIntegError = 18,
+    TopEarlgreyAlertIdSpiHost0FatalFault = 19,
+    TopEarlgreyAlertIdSpiHost1FatalFault = 20,
+    TopEarlgreyAlertIdUsbdevFatalFault = 21,
+    TopEarlgreyAlertIdPwrmgrAonFatalFault = 22,
+    TopEarlgreyAlertIdRstmgrAonFatalFault = 23,
+    TopEarlgreyAlertIdRstmgrAonFatalCnstyFault = 24,
+    TopEarlgreyAlertIdClkmgrAonRecovFault = 25,
+    TopEarlgreyAlertIdClkmgrAonFatalFault = 26,
+    TopEarlgreyAlertIdSysrstCtrlAonFatalFault = 27,
+    TopEarlgreyAlertIdAdcCtrlAonFatalFault = 28,
+    TopEarlgreyAlertIdPwmAonFatalFault = 29,
+    TopEarlgreyAlertIdPinmuxAonFatalFault = 30,
+    TopEarlgreyAlertIdAonTimerAonFatalFault = 31,
+    TopEarlgreyAlertIdSensorCtrlRecovAlert = 32,
+    TopEarlgreyAlertIdSensorCtrlFatalAlert = 33,
+    TopEarlgreyAlertIdSramCtrlRetAonFatalError = 34,
+    TopEarlgreyAlertIdFlashCtrlRecovErr = 35,
+    TopEarlgreyAlertIdFlashCtrlFatalStdErr = 36,
+    TopEarlgreyAlertIdFlashCtrlFatalErr = 37,
+    TopEarlgreyAlertIdFlashCtrlFatalPrimFlashAlert = 38,
+    TopEarlgreyAlertIdFlashCtrlRecovPrimFlashAlert = 39,
+    TopEarlgreyAlertIdRvDmFatalFault = 40,
+    TopEarlgreyAlertIdRvPlicFatalFault = 41,
+    TopEarlgreyAlertIdAesRecovCtrlUpdateErr = 42,
+    TopEarlgreyAlertIdAesFatalFault = 43,
+    TopEarlgreyAlertIdHmacFatalFault = 44,
+    TopEarlgreyAlertIdKmacRecovOperationErr = 45,
+    TopEarlgreyAlertIdKmacFatalFaultErr = 46,
+    TopEarlgreyAlertIdOtbnFatal = 47,
+    TopEarlgreyAlertIdOtbnRecov = 48,
+    TopEarlgreyAlertIdKeymgrRecovOperationErr = 49,
+    TopEarlgreyAlertIdKeymgrFatalFaultErr = 50,
+    TopEarlgreyAlertIdCsrngRecovAlert = 51,
+    TopEarlgreyAlertIdCsrngFatalAlert = 52,
+    TopEarlgreyAlertIdEntropySrcRecovAlert = 53,
+    TopEarlgreyAlertIdEntropySrcFatalAlert = 54,
+    TopEarlgreyAlertIdEdn0RecovAlert = 55,
+    TopEarlgreyAlertIdEdn0FatalAlert = 56,
+    TopEarlgreyAlertIdEdn1RecovAlert = 57,
+    TopEarlgreyAlertIdEdn1FatalAlert = 58,
+    TopEarlgreyAlertIdSramCtrlMainFatalError = 59,
+    TopEarlgreyAlertIdRomCtrlFatal = 60,
+    TopEarlgreyAlertIdRvCoreIbexFatalSwErr = 61,
+    TopEarlgreyAlertIdRvCoreIbexRecovSwErr = 62,
+    TopEarlgreyAlertIdRvCoreIbexFatalHwErr = 63,
+    TopEarlgreyAlertIdRvCoreIbexRecovHwErr = 64,
+    TopEarlgreyAlertIdCount
+  } alert_id_e;
+
   // Enumeration of IO power domains.
   // Only used in ASIC target.
   typedef enum logic [2:0] {
diff --git a/util/topgen/templates/toplevel_pkg.sv.tpl b/util/topgen/templates/toplevel_pkg.sv.tpl
index a25d4fd..7a9252e 100644
--- a/util/topgen/templates/toplevel_pkg.sv.tpl
+++ b/util/topgen/templates/toplevel_pkg.sv.tpl
@@ -40,6 +40,22 @@
 
 % endfor
 
+  // Enumeration of alert modules
+  typedef enum int unsigned {
+% for mod in top["alert_module"]:
+    ${lib.Name.from_snake_case("top_" + top["name"] + "_alert_peripheral_" + mod).as_camel_case()} = ${loop.index},
+% endfor
+    TopEarlgreyAlertPeripheralCount
+  } alert_peripheral_e;
+
+  // Enumeration of alerts
+  typedef enum int unsigned {
+% for alert in top["alert"]:
+    ${lib.Name.from_snake_case("top_" + top["name"] + "_alert_id_" + alert["name"]).as_camel_case()} = ${loop.index},
+% endfor
+    TopEarlgreyAlertIdCount
+  } alert_id_e;
+
   // Enumeration of IO power domains.
   // Only used in ASIC target.
   typedef enum logic [${len(top["pinout"]["banks"]).bit_length()-1}:0] {