[kmac/rtl,DV] Alignment on swapping alerts order
This PR follows PR #10517 which swaps the order of fatal and recoverable
alerts. With that PR, now alert[0] is recoverable alert and alert[1] is
fatal alert.
With this change, we would like to update the alert_test register as
well, so now:
alert_test field[0] corresponds to recov_operation_err
alert_test field[1] corresponds to fatal_fault_err
Signed-off-by: Cindy Chen <chencindy@opentitan.org>
diff --git a/hw/ip/kmac/data/kmac.hjson b/hw/ip/kmac/data/kmac.hjson
index d439c33..406caee 100644
--- a/hw/ip/kmac/data/kmac.hjson
+++ b/hw/ip/kmac/data/kmac.hjson
@@ -23,6 +23,11 @@
}
]
alert_list: [
+ { name: "recov_operation_err"
+ desc: '''
+ Alert for KMAC operation error. It occurs when the shadow registers have update errors.
+ '''
+ }
{ name: "fatal_fault_err",
desc: '''
This fatal alert is triggered when a fatal error is detected inside the KMAC unit.
@@ -35,11 +40,6 @@
The KMAC unit cannot recover from such an error and needs to be reset.
'''
}
- { name: "recov_operation_err"
- desc: '''
- Alert for KMAC operation error. It occurs when the shadow registers have update errors.
- '''
- }
],
param_list: [
{ name: "EnMasking"
diff --git a/hw/ip/kmac/dv/env/kmac_env_pkg.sv b/hw/ip/kmac/dv/env/kmac_env_pkg.sv
index 09f9756..01b18b0 100644
--- a/hw/ip/kmac/dv/env/kmac_env_pkg.sv
+++ b/hw/ip/kmac/dv/env/kmac_env_pkg.sv
@@ -65,7 +65,7 @@
// alerts
parameter uint NUM_ALERTS = 2;
- parameter string LIST_OF_ALERTS[] = {"fatal_fault_err", "recov_operation_err"};
+ parameter string LIST_OF_ALERTS[] = {"recov_operation_err", "fatal_fault_err"};
parameter uint NUM_EDN = 1;
diff --git a/hw/ip/kmac/rtl/kmac_reg_pkg.sv b/hw/ip/kmac/rtl/kmac_reg_pkg.sv
index 02488cd..0edbcf7 100644
--- a/hw/ip/kmac/rtl/kmac_reg_pkg.sv
+++ b/hw/ip/kmac/rtl/kmac_reg_pkg.sv
@@ -62,11 +62,11 @@
struct packed {
logic q;
logic qe;
- } fatal_fault_err;
+ } recov_operation_err;
struct packed {
logic q;
logic qe;
- } recov_operation_err;
+ } fatal_fault_err;
} kmac_reg2hw_alert_test_reg_t;
typedef struct packed {
@@ -340,8 +340,8 @@
parameter logic [0:0] KMAC_INTR_TEST_FIFO_EMPTY_RESVAL = 1'h 0;
parameter logic [0:0] KMAC_INTR_TEST_KMAC_ERR_RESVAL = 1'h 0;
parameter logic [1:0] KMAC_ALERT_TEST_RESVAL = 2'h 0;
- parameter logic [0:0] KMAC_ALERT_TEST_FATAL_FAULT_ERR_RESVAL = 1'h 0;
parameter logic [0:0] KMAC_ALERT_TEST_RECOV_OPERATION_ERR_RESVAL = 1'h 0;
+ parameter logic [0:0] KMAC_ALERT_TEST_FATAL_FAULT_ERR_RESVAL = 1'h 0;
parameter logic [0:0] KMAC_CFG_REGWEN_RESVAL = 1'h 1;
parameter logic [0:0] KMAC_CFG_REGWEN_EN_RESVAL = 1'h 1;
parameter logic [9:0] KMAC_CMD_RESVAL = 10'h 0;
diff --git a/hw/ip/kmac/rtl/kmac_reg_top.sv b/hw/ip/kmac/rtl/kmac_reg_top.sv
index 85a3697..b61266d 100644
--- a/hw/ip/kmac/rtl/kmac_reg_top.sv
+++ b/hw/ip/kmac/rtl/kmac_reg_top.sv
@@ -187,8 +187,8 @@
logic intr_test_fifo_empty_wd;
logic intr_test_kmac_err_wd;
logic alert_test_we;
- logic alert_test_fatal_fault_err_wd;
logic alert_test_recov_operation_err_wd;
+ logic alert_test_fatal_fault_err_wd;
logic cfg_regwen_re;
logic cfg_regwen_qs;
logic cfg_shadowed_re;
@@ -542,21 +542,7 @@
// R[alert_test]: V(True)
- // F[fatal_fault_err]: 0:0
- prim_subreg_ext #(
- .DW (1)
- ) u_alert_test_fatal_fault_err (
- .re (1'b0),
- .we (alert_test_we),
- .wd (alert_test_fatal_fault_err_wd),
- .d ('0),
- .qre (),
- .qe (reg2hw.alert_test.fatal_fault_err.qe),
- .q (reg2hw.alert_test.fatal_fault_err.q),
- .qs ()
- );
-
- // F[recov_operation_err]: 1:1
+ // F[recov_operation_err]: 0:0
prim_subreg_ext #(
.DW (1)
) u_alert_test_recov_operation_err (
@@ -570,6 +556,20 @@
.qs ()
);
+ // F[fatal_fault_err]: 1:1
+ prim_subreg_ext #(
+ .DW (1)
+ ) u_alert_test_fatal_fault_err (
+ .re (1'b0),
+ .we (alert_test_we),
+ .wd (alert_test_fatal_fault_err_wd),
+ .d ('0),
+ .qre (),
+ .qe (reg2hw.alert_test.fatal_fault_err.qe),
+ .q (reg2hw.alert_test.fatal_fault_err.q),
+ .qs ()
+ );
+
// R[cfg_regwen]: V(True)
prim_subreg_ext #(
@@ -2252,9 +2252,9 @@
assign intr_test_kmac_err_wd = reg_wdata[2];
assign alert_test_we = addr_hit[3] & reg_we & !reg_error;
- assign alert_test_fatal_fault_err_wd = reg_wdata[0];
+ assign alert_test_recov_operation_err_wd = reg_wdata[0];
- assign alert_test_recov_operation_err_wd = reg_wdata[1];
+ assign alert_test_fatal_fault_err_wd = reg_wdata[1];
assign cfg_regwen_re = addr_hit[4] & reg_re & !reg_error;
assign cfg_shadowed_re = addr_hit[5] & reg_re & !reg_error;
assign cfg_shadowed_we = addr_hit[5] & reg_we & !reg_error;
diff --git a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
index 42caf2d..535a27d 100644
--- a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
@@ -13702,7 +13702,7 @@
lpg_idx: 18
}
{
- name: kmac_fatal_fault_err
+ name: kmac_recov_operation_err
width: 1
type: alert
async: "1"
@@ -13711,7 +13711,7 @@
lpg_idx: 18
}
{
- name: kmac_recov_operation_err
+ name: kmac_fatal_fault_err
width: 1
type: alert
async: "1"
diff --git a/hw/top_earlgrey/dv/env/autogen/chip_env_pkg__params.sv b/hw/top_earlgrey/dv/env/autogen/chip_env_pkg__params.sv
index 118a96e..6e0e527 100644
--- a/hw/top_earlgrey/dv/env/autogen/chip_env_pkg__params.sv
+++ b/hw/top_earlgrey/dv/env/autogen/chip_env_pkg__params.sv
@@ -44,8 +44,8 @@
"aes_recov_ctrl_update_err",
"aes_fatal_fault",
"hmac_fatal_fault",
- "kmac_fatal_fault_err",
"kmac_recov_operation_err",
+ "kmac_fatal_fault_err",
"otbn_fatal",
"otbn_recov",
"keymgr_fatal_fault_err",
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
index f6238f8..a66f004 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
@@ -2197,8 +2197,8 @@
.intr_kmac_done_o (intr_kmac_kmac_done),
.intr_fifo_empty_o (intr_kmac_fifo_empty),
.intr_kmac_err_o (intr_kmac_kmac_err),
- // [39]: fatal_fault_err
- // [40]: recov_operation_err
+ // [39]: recov_operation_err
+ // [40]: fatal_fault_err
.alert_tx_o ( alert_tx[40:39] ),
.alert_rx_i ( alert_rx[40:39] ),
diff --git a/hw/top_earlgrey/sw/autogen/top_earlgrey.c b/hw/top_earlgrey/sw/autogen/top_earlgrey.c
index 7486f01..cce536a 100644
--- a/hw/top_earlgrey/sw/autogen/top_earlgrey.c
+++ b/hw/top_earlgrey/sw/autogen/top_earlgrey.c
@@ -247,8 +247,8 @@
[kTopEarlgreyAlertIdAesRecovCtrlUpdateErr] = kTopEarlgreyAlertPeripheralAes,
[kTopEarlgreyAlertIdAesFatalFault] = kTopEarlgreyAlertPeripheralAes,
[kTopEarlgreyAlertIdHmacFatalFault] = kTopEarlgreyAlertPeripheralHmac,
- [kTopEarlgreyAlertIdKmacFatalFaultErr] = kTopEarlgreyAlertPeripheralKmac,
[kTopEarlgreyAlertIdKmacRecovOperationErr] = kTopEarlgreyAlertPeripheralKmac,
+ [kTopEarlgreyAlertIdKmacFatalFaultErr] = kTopEarlgreyAlertPeripheralKmac,
[kTopEarlgreyAlertIdOtbnFatal] = kTopEarlgreyAlertPeripheralOtbn,
[kTopEarlgreyAlertIdOtbnRecov] = kTopEarlgreyAlertPeripheralOtbn,
[kTopEarlgreyAlertIdKeymgrFatalFaultErr] = kTopEarlgreyAlertPeripheralKeymgr,
diff --git a/hw/top_earlgrey/sw/autogen/top_earlgrey.h b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
index 502bb46..5d8c452 100644
--- a/hw/top_earlgrey/sw/autogen/top_earlgrey.h
+++ b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
@@ -1319,8 +1319,8 @@
kTopEarlgreyAlertIdAesRecovCtrlUpdateErr = 36, /**< aes_recov_ctrl_update_err */
kTopEarlgreyAlertIdAesFatalFault = 37, /**< aes_fatal_fault */
kTopEarlgreyAlertIdHmacFatalFault = 38, /**< hmac_fatal_fault */
- kTopEarlgreyAlertIdKmacFatalFaultErr = 39, /**< kmac_fatal_fault_err */
- kTopEarlgreyAlertIdKmacRecovOperationErr = 40, /**< kmac_recov_operation_err */
+ kTopEarlgreyAlertIdKmacRecovOperationErr = 39, /**< kmac_recov_operation_err */
+ kTopEarlgreyAlertIdKmacFatalFaultErr = 40, /**< kmac_fatal_fault_err */
kTopEarlgreyAlertIdOtbnFatal = 41, /**< otbn_fatal */
kTopEarlgreyAlertIdOtbnRecov = 42, /**< otbn_recov */
kTopEarlgreyAlertIdKeymgrFatalFaultErr = 43, /**< keymgr_fatal_fault_err */
diff --git a/sw/device/lib/dif/autogen/dif_kmac_autogen.c b/sw/device/lib/dif/autogen/dif_kmac_autogen.c
index c1fd9c3..9b0c0d4 100644
--- a/sw/device/lib/dif/autogen/dif_kmac_autogen.c
+++ b/sw/device/lib/dif/autogen/dif_kmac_autogen.c
@@ -29,12 +29,12 @@
bitfield_bit32_index_t alert_idx;
switch (alert) {
- case kDifKmacAlertFatalFaultErr:
- alert_idx = KMAC_ALERT_TEST_FATAL_FAULT_ERR_BIT;
- break;
case kDifKmacAlertRecovOperationErr:
alert_idx = KMAC_ALERT_TEST_RECOV_OPERATION_ERR_BIT;
break;
+ case kDifKmacAlertFatalFaultErr:
+ alert_idx = KMAC_ALERT_TEST_FATAL_FAULT_ERR_BIT;
+ break;
default:
return kDifBadArg;
}
diff --git a/sw/device/lib/dif/autogen/dif_kmac_autogen.h b/sw/device/lib/dif/autogen/dif_kmac_autogen.h
index fb996a7..bcf4a5e 100644
--- a/sw/device/lib/dif/autogen/dif_kmac_autogen.h
+++ b/sw/device/lib/dif/autogen/dif_kmac_autogen.h
@@ -53,6 +53,11 @@
*/
typedef enum dif_kmac_alert {
/**
+ * Alert for KMAC operation error. It occurs when the shadow registers have
+ * update errors.
+ */
+ kDifKmacAlertRecovOperationErr = 0,
+ /**
* This fatal alert is triggered when a fatal error is detected inside the
* KMAC unit. Examples for such faults include: i) TL-UL bus integrity fault.
* ii) Storage errors in the shadow registers. iii) Errors in the message,
@@ -60,12 +65,7 @@
* An error in the redundant lfsr. The KMAC unit cannot recover from such an
* error and needs to be reset.
*/
- kDifKmacAlertFatalFaultErr = 0,
- /**
- * Alert for KMAC operation error. It occurs when the shadow registers have
- * update errors.
- */
- kDifKmacAlertRecovOperationErr = 1,
+ kDifKmacAlertFatalFaultErr = 1,
} dif_kmac_alert_t;
/**
diff --git a/sw/device/lib/dif/autogen/dif_kmac_autogen_unittest.cc b/sw/device/lib/dif/autogen/dif_kmac_autogen_unittest.cc
index 6c1fef0..e5c705c 100644
--- a/sw/device/lib/dif/autogen/dif_kmac_autogen_unittest.cc
+++ b/sw/device/lib/dif/autogen/dif_kmac_autogen_unittest.cc
@@ -38,7 +38,7 @@
class AlertForceTest : public KmacTest {};
TEST_F(AlertForceTest, NullArgs) {
- EXPECT_EQ(dif_kmac_alert_force(nullptr, kDifKmacAlertFatalFaultErr),
+ EXPECT_EQ(dif_kmac_alert_force(nullptr, kDifKmacAlertRecovOperationErr),
kDifBadArg);
}
@@ -50,14 +50,14 @@
TEST_F(AlertForceTest, Success) {
// Force first alert.
EXPECT_WRITE32(KMAC_ALERT_TEST_REG_OFFSET,
- {{KMAC_ALERT_TEST_FATAL_FAULT_ERR_BIT, true}});
- EXPECT_EQ(dif_kmac_alert_force(&kmac_, kDifKmacAlertFatalFaultErr), kDifOk);
-
- // Force last alert.
- EXPECT_WRITE32(KMAC_ALERT_TEST_REG_OFFSET,
{{KMAC_ALERT_TEST_RECOV_OPERATION_ERR_BIT, true}});
EXPECT_EQ(dif_kmac_alert_force(&kmac_, kDifKmacAlertRecovOperationErr),
kDifOk);
+
+ // Force last alert.
+ EXPECT_WRITE32(KMAC_ALERT_TEST_REG_OFFSET,
+ {{KMAC_ALERT_TEST_FATAL_FAULT_ERR_BIT, true}});
+ EXPECT_EQ(dif_kmac_alert_force(&kmac_, kDifKmacAlertFatalFaultErr), kDifOk);
}
class IrqGetStateTest : public KmacTest {};