[dif/alert_handler] fixed CauseTest.Ack and corresponding DIF match RTL
RTL now uses a multireg for all alert cause bits.
Signed-off-by: Timothy Trippel <ttrippel@google.com>
diff --git a/sw/device/lib/dif/dif_alert_handler.c b/sw/device/lib/dif/dif_alert_handler.c
index e7d644a..4e488f5 100644
--- a/sw/device/lib/dif/dif_alert_handler.c
+++ b/sw/device/lib/dif/dif_alert_handler.c
@@ -696,6 +696,8 @@
ALERT_HANDLER_ALERT_CAUSE_0_REG_OFFSET + alert * sizeof(uint32_t);
uint32_t cause_reg =
mmio_region_read32(handler->params.base_addr, cause_reg_offset);
+ // NOTE: assuming all cause registers across all alerts use the same bit index
+ // for the cause bit
*is_cause =
bitfield_bit32_read(cause_reg, ALERT_HANDLER_ALERT_CAUSE_0_A_0_BIT);
@@ -708,9 +710,13 @@
return kDifAlertHandlerBadArg;
}
- uint32_t reg = bitfield_bit32_write(0, alert, true);
- mmio_region_write32(handler->params.base_addr,
- ALERT_HANDLER_ALERT_CAUSE_0_REG_OFFSET, reg);
+ ptrdiff_t cause_reg_offset =
+ ALERT_HANDLER_ALERT_CAUSE_0_REG_OFFSET + alert * sizeof(uint32_t);
+ // NOTE: assuming all cause registers across all alerts use the same bit index
+ // for the cause bit
+ uint32_t cause_reg =
+ bitfield_bit32_write(0, ALERT_HANDLER_ALERT_CAUSE_0_A_0_BIT, true);
+ mmio_region_write32(handler->params.base_addr, cause_reg_offset, cause_reg);
return kDifAlertHandlerOk;
}
diff --git a/sw/device/lib/dif/dif_alert_handler_unittest.cc b/sw/device/lib/dif/dif_alert_handler_unittest.cc
index 5452585..ff3498c 100644
--- a/sw/device/lib/dif/dif_alert_handler_unittest.cc
+++ b/sw/device/lib/dif/dif_alert_handler_unittest.cc
@@ -778,7 +778,13 @@
}
TEST_F(CauseTest, Ack) {
- EXPECT_WRITE32(ALERT_HANDLER_ALERT_CAUSE_0_REG_OFFSET, {{11, true}});
+ EXPECT_WRITE32(ALERT_HANDLER_ALERT_CAUSE_0_REG_OFFSET,
+ {{ALERT_HANDLER_ALERT_CAUSE_0_A_0_BIT, true}});
+ EXPECT_EQ(dif_alert_handler_alert_acknowledge(&handler_, 0),
+ kDifAlertHandlerOk);
+
+ EXPECT_WRITE32(ALERT_HANDLER_ALERT_CAUSE_11_REG_OFFSET,
+ {{ALERT_HANDLER_ALERT_CAUSE_11_A_11_BIT, true}});
EXPECT_EQ(dif_alert_handler_alert_acknowledge(&handler_, 11),
kDifAlertHandlerOk);
}