[dv,sw] Use `*_irq_acknowledge_all()` in PLIC test.
This commit replaces the manual MMIO writes to the IRQ state registers
to clear all interrupts for a specific IP with the newly added DIF
equivalent in the `plic_all_irqs_test.c`.
Signed-off-by: Timothy Trippel <ttrippel@google.com>
diff --git a/sw/device/tests/autogen/plic_all_irqs_test.c b/sw/device/tests/autogen/plic_all_irqs_test.c
index 713220d..c779199 100644
--- a/sw/device/tests/autogen/plic_all_irqs_test.c
+++ b/sw/device/tests/autogen/plic_all_irqs_test.c
@@ -301,35 +301,35 @@
* Clears pending IRQs in all peripherals.
*/
static void peripheral_irqs_clear(void) {
- // PERIPHERAL_IRQS_CLEAR(adc_ctrl_aon);
- PERIPHERAL_IRQS_CLEAR(alert_handler);
- // PERIPHERAL_IRQS_CLEAR(aon_timer_aon);
- PERIPHERAL_IRQS_CLEAR(csrng);
- PERIPHERAL_IRQS_CLEAR(edn0);
- PERIPHERAL_IRQS_CLEAR(edn1);
- PERIPHERAL_IRQS_CLEAR(entropy_src);
- // PERIPHERAL_IRQS_CLEAR(flash_ctrl);
- PERIPHERAL_IRQS_CLEAR(gpio);
- PERIPHERAL_IRQS_CLEAR(hmac);
- PERIPHERAL_IRQS_CLEAR(i2c0);
- PERIPHERAL_IRQS_CLEAR(i2c1);
- PERIPHERAL_IRQS_CLEAR(i2c2);
- PERIPHERAL_IRQS_CLEAR(keymgr);
- PERIPHERAL_IRQS_CLEAR(kmac);
- PERIPHERAL_IRQS_CLEAR(otbn);
- PERIPHERAL_IRQS_CLEAR(otp_ctrl);
- // PERIPHERAL_IRQS_CLEAR(pattgen);
- PERIPHERAL_IRQS_CLEAR(pwrmgr_aon);
- // PERIPHERAL_IRQS_CLEAR(rv_timer);
- PERIPHERAL_IRQS_CLEAR(spi_device);
- // PERIPHERAL_IRQS_CLEAR(spi_host0);
- // PERIPHERAL_IRQS_CLEAR(spi_host1);
- // PERIPHERAL_IRQS_CLEAR(sysrst_ctrl_aon);
- PERIPHERAL_IRQS_CLEAR(uart0);
- PERIPHERAL_IRQS_CLEAR(uart1);
- PERIPHERAL_IRQS_CLEAR(uart2);
- PERIPHERAL_IRQS_CLEAR(uart3);
- PERIPHERAL_IRQS_CLEAR(usbdev);
+ // PERIPHERAL_IRQS_CLEAR(adc_ctrl, adc_ctrl_aon);
+ PERIPHERAL_IRQS_CLEAR(alert_handler, alert_handler);
+ // PERIPHERAL_IRQS_CLEAR(aon_timer, aon_timer_aon);
+ PERIPHERAL_IRQS_CLEAR(csrng, csrng);
+ PERIPHERAL_IRQS_CLEAR(edn, edn0);
+ PERIPHERAL_IRQS_CLEAR(edn, edn1);
+ PERIPHERAL_IRQS_CLEAR(entropy_src, entropy_src);
+ // PERIPHERAL_IRQS_CLEAR(flash_ctrl, flash_ctrl);
+ PERIPHERAL_IRQS_CLEAR(gpio, gpio);
+ PERIPHERAL_IRQS_CLEAR(hmac, hmac);
+ PERIPHERAL_IRQS_CLEAR(i2c, i2c0);
+ PERIPHERAL_IRQS_CLEAR(i2c, i2c1);
+ PERIPHERAL_IRQS_CLEAR(i2c, i2c2);
+ PERIPHERAL_IRQS_CLEAR(keymgr, keymgr);
+ PERIPHERAL_IRQS_CLEAR(kmac, kmac);
+ PERIPHERAL_IRQS_CLEAR(otbn, otbn);
+ PERIPHERAL_IRQS_CLEAR(otp_ctrl, otp_ctrl);
+ // PERIPHERAL_IRQS_CLEAR(pattgen, pattgen);
+ PERIPHERAL_IRQS_CLEAR(pwrmgr, pwrmgr_aon);
+ // PERIPHERAL_IRQS_CLEAR(rv_timer, rv_timer);
+ PERIPHERAL_IRQS_CLEAR(spi_device, spi_device);
+ // PERIPHERAL_IRQS_CLEAR(spi_host, spi_host0);
+ // PERIPHERAL_IRQS_CLEAR(spi_host, spi_host1);
+ // PERIPHERAL_IRQS_CLEAR(sysrst_ctrl, sysrst_ctrl_aon);
+ PERIPHERAL_IRQS_CLEAR(uart, uart0);
+ PERIPHERAL_IRQS_CLEAR(uart, uart1);
+ PERIPHERAL_IRQS_CLEAR(uart, uart2);
+ PERIPHERAL_IRQS_CLEAR(uart, uart3);
+ PERIPHERAL_IRQS_CLEAR(usbdev, usbdev);
}
/**
diff --git a/sw/device/tests/plic_all_irqs_test_helper.h b/sw/device/tests/plic_all_irqs_test_helper.h
index 46e063a..ae7816c 100644
--- a/sw/device/tests/plic_all_irqs_test_helper.h
+++ b/sw/device/tests/plic_all_irqs_test_helper.h
@@ -48,11 +48,9 @@
/**
* Clears all previous interrupt invocations.
*/
-#define PERIPHERAL_IRQS_CLEAR(handle) \
- do { \
- /* TODO(#8142): Replace with dif_<ip>_irq_acknowledge_all when available. \
- */ \
- mmio_region_write32(handle.base_addr, 0, (uint32_t)ULONG_MAX); \
+#define PERIPHERAL_IRQS_CLEAR(peripheral, handle) \
+ do { \
+ CHECK_DIF_OK(dif_##peripheral##_irq_acknowledge_all(&handle)); \
} while (0)
/**
diff --git a/util/topgen/templates/plic_all_irqs_test.c.tpl b/util/topgen/templates/plic_all_irqs_test.c.tpl
index 7d11f41..d820431 100644
--- a/util/topgen/templates/plic_all_irqs_test.c.tpl
+++ b/util/topgen/templates/plic_all_irqs_test.c.tpl
@@ -106,7 +106,7 @@
*/
static void peripheral_irqs_clear(void) {
% for p in helper.irq_peripherals:
- ${comment(p.name)}PERIPHERAL_IRQS_CLEAR(${p.inst_name});
+ ${comment(p.name)}PERIPHERAL_IRQS_CLEAR(${p.name}, ${p.inst_name});
% endfor
}