[dif/rv_plic] Integrate autogen'd DIF artifacts into src tree.

This commit partially addresses #8142. Specifically it:
1. deprecates existing (manually implemented) **RV PLIC**
   specific DIF return codes and toggle type,
2. integrates the auto-generated **RV PLIC** DIFs into meson build
   targets, and
3. refactors all existing source code to make use of the new shared DIF
   types and error codes.

This continues the long-term goal of auto-generating several DIF
components across all IPs, as described in #8142.

Signed-off-by: Timothy Trippel <ttrippel@google.com>
diff --git a/sw/device/lib/dif/autogen/meson.build b/sw/device/lib/dif/autogen/meson.build
index 69b0ed8..bc6544c 100644
--- a/sw/device/lib/dif/autogen/meson.build
+++ b/sw/device/lib/dif/autogen/meson.build
@@ -254,6 +254,20 @@
   )
 )
 
+# Autogen RV PLIC DIF library
+sw_lib_dif_autogen_rv_plic = declare_dependency(
+  link_with: static_library(
+    'sw_lib_dif_autogen_rv_plic',
+    sources: [
+      hw_top_earlgrey_rv_plic_reg_h,
+      'dif_rv_plic_autogen.c',
+    ],
+    dependencies: [
+      sw_lib_mmio,
+    ],
+  )
+)
+
 # Autogen SPI Device DIF library
 sw_lib_dif_autogen_spi_device = declare_dependency(
   link_with: static_library(
diff --git a/sw/device/lib/dif/dif_rv_plic.c b/sw/device/lib/dif/dif_rv_plic.c
index 729d818..e7cff68 100644
--- a/sw/device/lib/dif/dif_rv_plic.c
+++ b/sw/device/lib/dif/dif_rv_plic.c
@@ -128,7 +128,7 @@
   // Clear all of the priority registers.
   for (int i = 0; i < RV_PLIC_PARAM_NUM_SRC; ++i) {
     ptrdiff_t offset = plic_priority_reg_offset(i);
-    mmio_region_write32(plic->params.base_addr, offset, 0);
+    mmio_region_write32(plic->base_addr, offset, 0);
   }
 
   // Clear all of the target related registers.
@@ -138,189 +138,187 @@
     ptrdiff_t offset = plic_irq_enable_base_for_target(target);
     for (int i = 0; i < RV_PLIC_IE0_MULTIREG_COUNT; ++i) {
       ptrdiff_t multireg_offset = offset + (i * sizeof(uint32_t));
-      mmio_region_write32(plic->params.base_addr, multireg_offset, 0);
+      mmio_region_write32(plic->base_addr, multireg_offset, 0);
     }
 
     // Clear threshold registers.
     offset = plic_threshold_base_for_target(target);
-    mmio_region_write32(plic->params.base_addr, offset, 0);
+    mmio_region_write32(plic->base_addr, offset, 0);
 
     // Clear software interrupt registers.
     offset = plic_software_irq_base_for_target(target);
-    mmio_region_write32(plic->params.base_addr, offset, 0);
+    mmio_region_write32(plic->base_addr, offset, 0);
   }
 }
 
-dif_rv_plic_result_t dif_rv_plic_init(dif_rv_plic_params_t params,
-                                      dif_rv_plic_t *plic) {
+dif_result_t dif_rv_plic_init(mmio_region_t base_addr, dif_rv_plic_t *plic) {
   if (plic == NULL) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
-  plic->params = params;
+  plic->base_addr = base_addr;
 
   // TODO: Move this out into its own function.
   plic_reset(plic);
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_irq_get_enabled(const dif_rv_plic_t *plic,
-                                                 dif_rv_plic_irq_id_t irq,
-                                                 dif_rv_plic_target_t target,
-                                                 dif_rv_plic_toggle_t *state) {
+dif_result_t dif_rv_plic_irq_get_enabled(const dif_rv_plic_t *plic,
+                                         dif_rv_plic_irq_id_t irq,
+                                         dif_rv_plic_target_t target,
+                                         dif_toggle_t *state) {
   if (plic == NULL || irq >= RV_PLIC_PARAM_NUM_SRC ||
       target >= RV_PLIC_PARAM_NUM_TARGET) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   plic_reg_info_t reg_info = plic_irq_enable_reg_info(irq, target);
 
-  uint32_t reg = mmio_region_read32(plic->params.base_addr, reg_info.offset);
+  uint32_t reg = mmio_region_read32(plic->base_addr, reg_info.offset);
   bool is_enabled = bitfield_bit32_read(reg, reg_info.bit_index);
-  *state = is_enabled ? kDifRvPlicToggleEnabled : kDifRvPlicToggleDisabled;
+  *state = is_enabled ? kDifToggleEnabled : kDifToggleDisabled;
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_irq_set_enabled(const dif_rv_plic_t *plic,
-                                                 dif_rv_plic_irq_id_t irq,
-                                                 dif_rv_plic_target_t target,
-                                                 dif_rv_plic_toggle_t state) {
+dif_result_t dif_rv_plic_irq_set_enabled(const dif_rv_plic_t *plic,
+                                         dif_rv_plic_irq_id_t irq,
+                                         dif_rv_plic_target_t target,
+                                         dif_toggle_t state) {
   if (plic == NULL || irq >= RV_PLIC_PARAM_NUM_SRC ||
       target >= RV_PLIC_PARAM_NUM_TARGET) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   bool flag;
   switch (state) {
-    case kDifRvPlicToggleEnabled:
+    case kDifToggleEnabled:
       flag = true;
       break;
-    case kDifRvPlicToggleDisabled:
+    case kDifToggleDisabled:
       flag = false;
       break;
     default:
-      return kDifRvPlicBadArg;
+      return kDifBadArg;
   }
 
   plic_reg_info_t reg_info = plic_irq_enable_reg_info(irq, target);
 
-  uint32_t reg = mmio_region_read32(plic->params.base_addr, reg_info.offset);
+  uint32_t reg = mmio_region_read32(plic->base_addr, reg_info.offset);
   reg = bitfield_bit32_write(reg, reg_info.bit_index, flag);
-  mmio_region_write32(plic->params.base_addr, reg_info.offset, reg);
+  mmio_region_write32(plic->base_addr, reg_info.offset, reg);
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_irq_set_priority(const dif_rv_plic_t *plic,
-                                                  dif_rv_plic_irq_id_t irq,
-                                                  uint32_t priority) {
+dif_result_t dif_rv_plic_irq_set_priority(const dif_rv_plic_t *plic,
+                                          dif_rv_plic_irq_id_t irq,
+                                          uint32_t priority) {
   if (plic == NULL || irq >= RV_PLIC_PARAM_NUM_SRC ||
       priority > kDifRvPlicMaxPriority) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   ptrdiff_t offset = plic_priority_reg_offset(irq);
-  mmio_region_write32(plic->params.base_addr, offset, priority);
+  mmio_region_write32(plic->base_addr, offset, priority);
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_target_set_threshold(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target,
-    uint32_t threshold) {
+dif_result_t dif_rv_plic_target_set_threshold(const dif_rv_plic_t *plic,
+                                              dif_rv_plic_target_t target,
+                                              uint32_t threshold) {
   if (plic == NULL || target >= RV_PLIC_PARAM_NUM_TARGET ||
       threshold > kDifRvPlicMaxPriority) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   ptrdiff_t threshold_offset = plic_threshold_base_for_target(target);
-  mmio_region_write32(plic->params.base_addr, threshold_offset, threshold);
+  mmio_region_write32(plic->base_addr, threshold_offset, threshold);
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_irq_is_pending(const dif_rv_plic_t *plic,
-                                                dif_rv_plic_irq_id_t irq,
-                                                bool *is_pending) {
+dif_result_t dif_rv_plic_irq_is_pending(const dif_rv_plic_t *plic,
+                                        dif_rv_plic_irq_id_t irq,
+                                        bool *is_pending) {
   if (plic == NULL || irq >= RV_PLIC_PARAM_NUM_SRC || is_pending == NULL) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   plic_reg_info_t reg_info = plic_irq_pending_reg_info(irq);
-  uint32_t reg = mmio_region_read32(plic->params.base_addr, reg_info.offset);
+  uint32_t reg = mmio_region_read32(plic->base_addr, reg_info.offset);
   *is_pending = bitfield_bit32_read(reg, reg_info.bit_index);
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_irq_claim(const dif_rv_plic_t *plic,
-                                           dif_rv_plic_target_t target,
-                                           dif_rv_plic_irq_id_t *claim_data) {
+dif_result_t dif_rv_plic_irq_claim(const dif_rv_plic_t *plic,
+                                   dif_rv_plic_target_t target,
+                                   dif_rv_plic_irq_id_t *claim_data) {
   if (plic == NULL || target >= RV_PLIC_PARAM_NUM_TARGET ||
       claim_data == NULL) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   ptrdiff_t claim_complete_reg = plic_claim_complete_base_for_target(target);
-  *claim_data = mmio_region_read32(plic->params.base_addr, claim_complete_reg);
+  *claim_data = mmio_region_read32(plic->base_addr, claim_complete_reg);
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_irq_complete(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target,
-    dif_rv_plic_irq_id_t complete_data) {
+dif_result_t dif_rv_plic_irq_complete(const dif_rv_plic_t *plic,
+                                      dif_rv_plic_target_t target,
+                                      dif_rv_plic_irq_id_t complete_data) {
   if (plic == NULL || target >= RV_PLIC_PARAM_NUM_TARGET) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   // Write back the claimed IRQ ID to the target specific CC register,
   // to notify the PLIC of the IRQ completion.
   ptrdiff_t claim_complete_reg = plic_claim_complete_base_for_target(target);
-  mmio_region_write32(plic->params.base_addr, claim_complete_reg,
-                      complete_data);
+  mmio_region_write32(plic->base_addr, claim_complete_reg, complete_data);
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_software_irq_force(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target) {
+dif_result_t dif_rv_plic_software_irq_force(const dif_rv_plic_t *plic,
+                                            dif_rv_plic_target_t target) {
   if (plic == NULL || target >= RV_PLIC_PARAM_NUM_TARGET) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   ptrdiff_t msip_offset = plic_software_irq_base_for_target(target);
-  mmio_region_write32(plic->params.base_addr, msip_offset, 1);
+  mmio_region_write32(plic->base_addr, msip_offset, 1);
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_software_irq_acknowledge(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target) {
+dif_result_t dif_rv_plic_software_irq_acknowledge(const dif_rv_plic_t *plic,
+                                                  dif_rv_plic_target_t target) {
   if (plic == NULL || target >= RV_PLIC_PARAM_NUM_TARGET) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   ptrdiff_t msip_offset = plic_software_irq_base_for_target(target);
-  mmio_region_write32(plic->params.base_addr, msip_offset, 0);
+  mmio_region_write32(plic->base_addr, msip_offset, 0);
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
 
-dif_rv_plic_result_t dif_rv_plic_software_irq_is_pending(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target, bool *is_pending) {
+dif_result_t dif_rv_plic_software_irq_is_pending(const dif_rv_plic_t *plic,
+                                                 dif_rv_plic_target_t target,
+                                                 bool *is_pending) {
   if (plic == NULL || target >= RV_PLIC_PARAM_NUM_TARGET ||
       is_pending == NULL) {
-    return kDifRvPlicBadArg;
+    return kDifBadArg;
   }
 
   ptrdiff_t msip_offset = plic_software_irq_base_for_target(target);
-  uint32_t register_value =
-      mmio_region_read32(plic->params.base_addr, msip_offset);
+  uint32_t register_value = mmio_region_read32(plic->base_addr, msip_offset);
 
   *is_pending = (register_value == 1) ? true : false;
 
-  return kDifRvPlicOk;
+  return kDifOk;
 }
diff --git a/sw/device/lib/dif/dif_rv_plic.h b/sw/device/lib/dif/dif_rv_plic.h
index d14bfd7..355692a 100644
--- a/sw/device/lib/dif/dif_rv_plic.h
+++ b/sw/device/lib/dif/dif_rv_plic.h
@@ -22,73 +22,15 @@
 
 #include "sw/device/lib/base/macros.h"
 #include "sw/device/lib/base/mmio.h"
+#include "sw/device/lib/dif/dif_base.h"
+
+#include "sw/device/lib/dif/autogen/dif_rv_plic_autogen.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif  // __cplusplus
 
 /**
- * A toggle state: enabled, or disabled.
- *
- * This enum may be used instead of a `bool` when describing an enabled/disabled
- * state.
- */
-typedef enum dif_rv_plic_toggle {
-  /*
-   * The "enabled" state.
-   */
-  kDifRvPlicToggleEnabled,
-  /**
-   * The "disabled" state.
-   */
-  kDifRvPlicToggleDisabled,
-} dif_rv_plic_toggle_t;
-
-/**
- * Hardware instantiation parameters for PLIC.
- *
- * This struct describes information about the underlying hardware that is
- * not determined until the hardware design is used as part of a top-level
- * design.
- */
-typedef struct dif_rv_plic_params {
-  /**
-   * The base address for the PLIC hardware registers.
-   */
-  mmio_region_t base_addr;
-} dif_rv_plic_params_t;
-
-/**
- * A handle to PLIC.
- *
- * This type should be treated as opaque by users.
- */
-typedef struct dif_rv_plic {
-  dif_rv_plic_params_t params;
-} dif_rv_plic_t;
-
-/**
- * The result of a PLIC operation.
- */
-typedef enum dif_rv_plic_result {
-  /**
-   * Indicates that the operation succeeded.
-   */
-  kDifRvPlicOk = 0,
-  /**
-   * Indicates some unspecified failure.
-   */
-  kDifRvPlicError = 1,
-  /**
-   * Indicates that some parameter passed into a function failed a
-   * precondition.
-   *
-   * When this value is returned, no hardware operations occurred.
-   */
-  kDifRvPlicBadArg = 2,
-} dif_rv_plic_result_t;
-
-/**
  * The lowest interrupt priority.
  */
 extern const uint32_t kDifRvPlicMinPriority;
@@ -133,8 +75,7 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_init(dif_rv_plic_params_t params,
-                                      dif_rv_plic_t *plic);
+dif_result_t dif_rv_plic_init(mmio_region_t base_addr, dif_rv_plic_t *plic);
 
 /**
  * Returns whether a particular interrupt is currently pending.
@@ -145,9 +86,9 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_irq_is_pending(const dif_rv_plic_t *plic,
-                                                dif_rv_plic_irq_id_t irq,
-                                                bool *is_pending);
+dif_result_t dif_rv_plic_irq_is_pending(const dif_rv_plic_t *plic,
+                                        dif_rv_plic_irq_id_t irq,
+                                        bool *is_pending);
 
 /**
  * Checks whether a particular interrupt is currently enabled or disabled.
@@ -159,10 +100,10 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_irq_get_enabled(const dif_rv_plic_t *plic,
-                                                 dif_rv_plic_irq_id_t irq,
-                                                 dif_rv_plic_target_t target,
-                                                 dif_rv_plic_toggle_t *state);
+dif_result_t dif_rv_plic_irq_get_enabled(const dif_rv_plic_t *plic,
+                                         dif_rv_plic_irq_id_t irq,
+                                         dif_rv_plic_target_t target,
+                                         dif_toggle_t *state);
 
 /**
  * Sets whether a particular interrupt is currently enabled or disabled.
@@ -177,10 +118,10 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_irq_set_enabled(const dif_rv_plic_t *plic,
-                                                 dif_rv_plic_irq_id_t irq,
-                                                 dif_rv_plic_target_t target,
-                                                 dif_rv_plic_toggle_t state);
+dif_result_t dif_rv_plic_irq_set_enabled(const dif_rv_plic_t *plic,
+                                         dif_rv_plic_irq_id_t irq,
+                                         dif_rv_plic_target_t target,
+                                         dif_toggle_t state);
 
 /**
  * Sets IRQ source priority (0-3).
@@ -195,9 +136,9 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_irq_set_priority(const dif_rv_plic_t *plic,
-                                                  dif_rv_plic_irq_id_t irq,
-                                                  uint32_t priority);
+dif_result_t dif_rv_plic_irq_set_priority(const dif_rv_plic_t *plic,
+                                          dif_rv_plic_irq_id_t irq,
+                                          uint32_t priority);
 
 /**
  * Sets the target priority threshold.
@@ -212,8 +153,9 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_target_set_threshold(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target, uint32_t threshold);
+dif_result_t dif_rv_plic_target_set_threshold(const dif_rv_plic_t *plic,
+                                              dif_rv_plic_target_t target,
+                                              uint32_t threshold);
 
 /**
  * Claims an IRQ and gets the information about the source.
@@ -240,9 +182,9 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_irq_claim(const dif_rv_plic_t *plic,
-                                           dif_rv_plic_target_t target,
-                                           dif_rv_plic_irq_id_t *claim_data);
+dif_result_t dif_rv_plic_irq_claim(const dif_rv_plic_t *plic,
+                                   dif_rv_plic_target_t target,
+                                   dif_rv_plic_irq_id_t *claim_data);
 
 /**
  * Completes the claimed IRQ.
@@ -263,9 +205,9 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_irq_complete(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target,
-    dif_rv_plic_irq_id_t complete_data);
+dif_result_t dif_rv_plic_irq_complete(const dif_rv_plic_t *plic,
+                                      dif_rv_plic_target_t target,
+                                      dif_rv_plic_irq_id_t complete_data);
 
 /**
  * Forces the software interrupt for a particular target.
@@ -282,11 +224,11 @@
  *
  * @param plic PLIC state data.
  * @param target Target HART.
- * @return `dif_rv_plic_result_t`.
+ * @return `dif_result_t`.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_software_irq_force(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target);
+dif_result_t dif_rv_plic_software_irq_force(const dif_rv_plic_t *plic,
+                                            dif_rv_plic_target_t target);
 
 /**
  * Acknowledges the software interrupt for a particular target.
@@ -297,11 +239,11 @@
  *
  * @param plic PLIC state data.
  * @param target Target HART.
- * @return `dif_rv_plic_result_t`.
+ * @return `dif_result_t`.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_software_irq_acknowledge(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target);
+dif_result_t dif_rv_plic_software_irq_acknowledge(const dif_rv_plic_t *plic,
+                                                  dif_rv_plic_target_t target);
 
 /**
  * Returns software interrupt pending state for a particular target.
@@ -309,11 +251,12 @@
  * @param plic PLIC state data.
  * @param target Target HART.
  * @param[out] is_pending Flag indicating whether the interrupt is pending.
- * @return `dif_rv_plic_result_t`.
+ * @return `dif_result_t`.
  */
 OT_WARN_UNUSED_RESULT
-dif_rv_plic_result_t dif_rv_plic_software_irq_is_pending(
-    const dif_rv_plic_t *plic, dif_rv_plic_target_t target, bool *is_pending);
+dif_result_t dif_rv_plic_software_irq_is_pending(const dif_rv_plic_t *plic,
+                                                 dif_rv_plic_target_t target,
+                                                 bool *is_pending);
 
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/sw/device/lib/dif/dif_rv_plic_unittest.cc b/sw/device/lib/dif/dif_rv_plic_unittest.cc
index 8ef6910..2293653 100644
--- a/sw/device/lib/dif/dif_rv_plic_unittest.cc
+++ b/sw/device/lib/dif/dif_rv_plic_unittest.cc
@@ -30,9 +30,7 @@
 
 class PlicTest : public Test, public MmioTest {
  protected:
-  dif_rv_plic_t plic_ = {
-      .params = {.base_addr = dev().region()},
-  };
+  dif_rv_plic_t plic_ = {.base_addr = dev().region()};
 };
 
 class InitTest : public PlicTest {
@@ -61,15 +59,13 @@
 };
 
 TEST_F(InitTest, NullArgs) {
-  EXPECT_EQ(dif_rv_plic_init({.base_addr = dev().region()}, nullptr),
-            kDifRvPlicBadArg);
+  EXPECT_EQ(dif_rv_plic_init(dev().region(), nullptr), kDifBadArg);
 }
 
 TEST_F(InitTest, Success) {
   ExpectInitReset();
 
-  EXPECT_EQ(dif_rv_plic_init({.base_addr = dev().region()}, &plic_),
-            kDifRvPlicOk);
+  EXPECT_EQ(dif_rv_plic_init(dev().region(), &plic_), kDifOk);
 }
 
 class IrqTest : public PlicTest {
@@ -152,8 +148,8 @@
 
 TEST_F(IrqEnableSetTest, NullArgs) {
   EXPECT_EQ(dif_rv_plic_irq_set_enabled(nullptr, kFirstIrq, kTarget0,
-                                        kDifRvPlicToggleEnabled),
-            kDifRvPlicBadArg);
+                                        kDifToggleEnabled),
+            kDifBadArg);
 }
 
 TEST_F(IrqEnableSetTest, Target0Enable) {
@@ -161,9 +157,9 @@
 
   // Enable every IRQ, one at a time.
   for (int i = 0; i < RV_PLIC_PARAM_NUM_SRC; ++i) {
-    EXPECT_EQ(dif_rv_plic_irq_set_enabled(&plic_, i, kTarget0,
-                                          kDifRvPlicToggleEnabled),
-              kDifRvPlicOk);
+    EXPECT_EQ(
+        dif_rv_plic_irq_set_enabled(&plic_, i, kTarget0, kDifToggleEnabled),
+        kDifOk);
   }
 }
 
@@ -172,9 +168,9 @@
 
   // Disable every bit, one at a time.
   for (int i = 0; i < RV_PLIC_PARAM_NUM_SRC; ++i) {
-    EXPECT_EQ(dif_rv_plic_irq_set_enabled(&plic_, i, kTarget0,
-                                          kDifRvPlicToggleDisabled),
-              kDifRvPlicOk);
+    EXPECT_EQ(
+        dif_rv_plic_irq_set_enabled(&plic_, i, kTarget0, kDifToggleDisabled),
+        kDifOk);
   }
 }
 
@@ -183,13 +179,13 @@
 TEST_F(IrqPrioritySetTest, NullArgs) {
   EXPECT_EQ(
       dif_rv_plic_irq_set_priority(nullptr, kFirstIrq, kDifRvPlicMaxPriority),
-      kDifRvPlicBadArg);
+      kDifBadArg);
 }
 
 TEST_F(IrqPrioritySetTest, PriorityInvalid) {
   EXPECT_EQ(dif_rv_plic_irq_set_priority(nullptr, kFirstIrq,
                                          kDifRvPlicMaxPriority + 1),
-            kDifRvPlicBadArg);
+            kDifBadArg);
 }
 
 TEST_F(IrqPrioritySetTest, Success) {
@@ -199,7 +195,7 @@
     EXPECT_WRITE32(offset, kDifRvPlicMaxPriority);
 
     EXPECT_EQ(dif_rv_plic_irq_set_priority(&plic_, i, kDifRvPlicMaxPriority),
-              kDifRvPlicOk);
+              kDifOk);
   }
 }
 
@@ -208,13 +204,13 @@
 TEST_F(TargetThresholdSetTest, NullArgs) {
   EXPECT_EQ(dif_rv_plic_target_set_threshold(nullptr, kTarget0,
                                              kDifRvPlicMaxPriority),
-            kDifRvPlicBadArg);
+            kDifBadArg);
 }
 
 TEST_F(TargetThresholdSetTest, Target0PriorityInvalid) {
   EXPECT_EQ(dif_rv_plic_target_set_threshold(&plic_, kTarget0,
                                              kDifRvPlicMaxPriority + 1),
-            kDifRvPlicBadArg);
+            kDifBadArg);
 }
 
 TEST_F(TargetThresholdSetTest, Target0Success) {
@@ -222,22 +218,21 @@
 
   EXPECT_EQ(
       dif_rv_plic_target_set_threshold(&plic_, kTarget0, kDifRvPlicMaxPriority),
-      kDifRvPlicOk);
+      kDifOk);
 }
 
 class IrqPendingStatusGetTest : public IrqTest {};
 
 TEST_F(IrqPendingStatusGetTest, NullArgs) {
   bool status;
-  dif_rv_plic_result_t result =
-      dif_rv_plic_irq_is_pending(nullptr, kFirstIrq, &status);
-  EXPECT_EQ(result, kDifRvPlicBadArg);
+  dif_result_t result = dif_rv_plic_irq_is_pending(nullptr, kFirstIrq, &status);
+  EXPECT_EQ(result, kDifBadArg);
 
   result = dif_rv_plic_irq_is_pending(&plic_, kFirstIrq, nullptr);
-  EXPECT_EQ(result, kDifRvPlicBadArg);
+  EXPECT_EQ(result, kDifBadArg);
 
   result = dif_rv_plic_irq_is_pending(nullptr, kFirstIrq, nullptr);
-  EXPECT_EQ(result, kDifRvPlicBadArg);
+  EXPECT_EQ(result, kDifBadArg);
 }
 
 TEST_F(IrqPendingStatusGetTest, Enabled) {
@@ -246,9 +241,8 @@
   // Get status of every IRQ, one at a time.
   for (int i = 0; i < RV_PLIC_PARAM_NUM_SRC; ++i) {
     bool status;
-    dif_rv_plic_result_t result =
-        dif_rv_plic_irq_is_pending(&plic_, i, &status);
-    EXPECT_EQ(result, kDifRvPlicOk);
+    dif_result_t result = dif_rv_plic_irq_is_pending(&plic_, i, &status);
+    EXPECT_EQ(result, kDifOk);
     EXPECT_TRUE(status);
   }
 }
@@ -259,9 +253,8 @@
   // Get status of every IRQ, one at a time.
   for (int i = 0; i < RV_PLIC_PARAM_NUM_SRC; ++i) {
     bool status;
-    dif_rv_plic_result_t result =
-        dif_rv_plic_irq_is_pending(&plic_, i, &status);
-    EXPECT_EQ(result, kDifRvPlicOk);
+    dif_result_t result = dif_rv_plic_irq_is_pending(&plic_, i, &status);
+    EXPECT_EQ(result, kDifOk);
     EXPECT_FALSE(status);
   }
 }
@@ -272,12 +265,11 @@
 
 TEST_F(IrqClaimTest, NullArgs) {
   dif_rv_plic_irq_id_t data;
-  EXPECT_EQ(dif_rv_plic_irq_claim(nullptr, kTarget0, &data), kDifRvPlicBadArg);
+  EXPECT_EQ(dif_rv_plic_irq_claim(nullptr, kTarget0, &data), kDifBadArg);
 
-  EXPECT_EQ(dif_rv_plic_irq_claim(&plic_, kTarget0, nullptr), kDifRvPlicBadArg);
+  EXPECT_EQ(dif_rv_plic_irq_claim(&plic_, kTarget0, nullptr), kDifBadArg);
 
-  EXPECT_EQ(dif_rv_plic_irq_claim(nullptr, kTarget0, nullptr),
-            kDifRvPlicBadArg);
+  EXPECT_EQ(dif_rv_plic_irq_claim(nullptr, kTarget0, nullptr), kDifBadArg);
 }
 
 TEST_F(IrqClaimTest, Target0Success) {
@@ -289,7 +281,7 @@
   // Claim every IRQ, one per a call.
   for (int i = 0; i < RV_PLIC_PARAM_NUM_SRC; ++i) {
     dif_rv_plic_irq_id_t data;
-    EXPECT_EQ(dif_rv_plic_irq_claim(&plic_, kTarget0, &data), kDifRvPlicOk);
+    EXPECT_EQ(dif_rv_plic_irq_claim(&plic_, kTarget0, &data), kDifOk);
     EXPECT_EQ(data, i);
   }
 }
@@ -299,7 +291,7 @@
 };
 
 TEST_F(IrqCompleteTest, NullArgs) {
-  EXPECT_EQ(dif_rv_plic_irq_complete(nullptr, kTarget0, 0), kDifRvPlicBadArg);
+  EXPECT_EQ(dif_rv_plic_irq_complete(nullptr, kTarget0, 0), kDifBadArg);
 }
 
 TEST_F(IrqCompleteTest, Target0Success) {
@@ -310,7 +302,7 @@
 
   // Complete all of the IRQs.
   for (int i = 0; i < RV_PLIC_PARAM_NUM_SRC; ++i) {
-    EXPECT_EQ(dif_rv_plic_irq_complete(&plic_, kTarget0, i), kDifRvPlicOk);
+    EXPECT_EQ(dif_rv_plic_irq_complete(&plic_, kTarget0, i), kDifOk);
   }
 }
 
@@ -319,18 +311,17 @@
 };
 
 TEST_F(SoftwareIrqForceTest, NullArgs) {
-  EXPECT_EQ(dif_rv_plic_software_irq_force(nullptr, kTarget0),
-            kDifRvPlicBadArg);
+  EXPECT_EQ(dif_rv_plic_software_irq_force(nullptr, kTarget0), kDifBadArg);
 }
 
 TEST_F(SoftwareIrqForceTest, BadTarget) {
   EXPECT_EQ(dif_rv_plic_software_irq_force(&plic_, RV_PLIC_PARAM_NUM_TARGET),
-            kDifRvPlicBadArg);
+            kDifBadArg);
 }
 
 TEST_F(SoftwareIrqForceTest, Target0Success) {
   EXPECT_WRITE32(RV_PLIC_MSIP0_REG_OFFSET, 1);
-  EXPECT_EQ(dif_rv_plic_software_irq_force(&plic_, kTarget0), kDifRvPlicOk);
+  EXPECT_EQ(dif_rv_plic_software_irq_force(&plic_, kTarget0), kDifOk);
 }
 
 class SoftwareIrqAcknowledgeTest : public PlicTest {
@@ -339,19 +330,18 @@
 
 TEST_F(SoftwareIrqAcknowledgeTest, NullArgs) {
   EXPECT_EQ(dif_rv_plic_software_irq_acknowledge(nullptr, kTarget0),
-            kDifRvPlicBadArg);
+            kDifBadArg);
 }
 
 TEST_F(SoftwareIrqAcknowledgeTest, BadTarget) {
   EXPECT_EQ(
       dif_rv_plic_software_irq_acknowledge(&plic_, RV_PLIC_PARAM_NUM_TARGET),
-      kDifRvPlicBadArg);
+      kDifBadArg);
 }
 
 TEST_F(SoftwareIrqAcknowledgeTest, Target0Success) {
   EXPECT_WRITE32(RV_PLIC_MSIP0_REG_OFFSET, 0);
-  EXPECT_EQ(dif_rv_plic_software_irq_acknowledge(&plic_, kTarget0),
-            kDifRvPlicOk);
+  EXPECT_EQ(dif_rv_plic_software_irq_acknowledge(&plic_, kTarget0), kDifOk);
 }
 
 class SoftwareIrqIsPendingTest : public PlicTest {
@@ -360,21 +350,21 @@
 
 TEST_F(SoftwareIrqIsPendingTest, NullArgs) {
   EXPECT_EQ(dif_rv_plic_software_irq_is_pending(nullptr, kTarget0, nullptr),
-            kDifRvPlicBadArg);
+            kDifBadArg);
 
   EXPECT_EQ(dif_rv_plic_software_irq_is_pending(&plic_, kTarget0, nullptr),
-            kDifRvPlicBadArg);
+            kDifBadArg);
 
   bool is_pending;
   EXPECT_EQ(dif_rv_plic_software_irq_is_pending(nullptr, kTarget0, &is_pending),
-            kDifRvPlicBadArg);
+            kDifBadArg);
 }
 
 TEST_F(SoftwareIrqIsPendingTest, BadTarget) {
   bool is_pending;
   EXPECT_EQ(dif_rv_plic_software_irq_is_pending(
                 &plic_, RV_PLIC_PARAM_NUM_TARGET, &is_pending),
-            kDifRvPlicBadArg);
+            kDifBadArg);
 }
 
 TEST_F(SoftwareIrqIsPendingTest, Target0Success) {
@@ -382,7 +372,7 @@
   EXPECT_READ32(RV_PLIC_MSIP0_REG_OFFSET, 1);
 
   EXPECT_EQ(dif_rv_plic_software_irq_is_pending(&plic_, kTarget0, &is_pending),
-            kDifRvPlicOk);
+            kDifOk);
   EXPECT_TRUE(is_pending);
 
   // Cleared
@@ -390,7 +380,7 @@
   EXPECT_READ32(RV_PLIC_MSIP0_REG_OFFSET, 0);
 
   EXPECT_EQ(dif_rv_plic_software_irq_is_pending(&plic_, kTarget0, &is_pending),
-            kDifRvPlicOk);
+            kDifOk);
   EXPECT_FALSE(is_pending);
 }
 
diff --git a/sw/device/lib/dif/meson.build b/sw/device/lib/dif/meson.build
index 7d2ff13..610bc57 100644
--- a/sw/device/lib/dif/meson.build
+++ b/sw/device/lib/dif/meson.build
@@ -153,6 +153,7 @@
     dependencies: [
       sw_lib_mmio,
       sw_lib_bitfield,
+      sw_lib_dif_autogen_rv_plic,
     ],
   )
 )
@@ -160,9 +161,11 @@
 test('dif_rv_plic_unittest', executable(
     'dif_rv_plic_unittest',
     sources: [
-      hw_top_earlgrey_rv_plic_reg_h,
-      meson.source_root() / 'sw/device/lib/dif/dif_rv_plic.c',
       'dif_rv_plic_unittest.cc',
+      'autogen/dif_rv_plic_autogen_unittest.cc',
+      meson.source_root() / 'sw/device/lib/dif/dif_rv_plic.c',
+      meson.source_root() / 'sw/device/lib/dif/autogen/dif_rv_plic_autogen.c',
+      hw_top_earlgrey_rv_plic_reg_h,
     ],
     dependencies: [
       sw_vendor_gtest,
diff --git a/sw/device/lib/testing/rv_plic_testutils.c b/sw/device/lib/testing/rv_plic_testutils.c
index 77b6385..4779828 100644
--- a/sw/device/lib/testing/rv_plic_testutils.c
+++ b/sw/device/lib/testing/rv_plic_testutils.c
@@ -4,6 +4,7 @@
 
 #include "sw/device/lib/testing/rv_plic_testutils.h"
 
+#include "sw/device/lib/dif/dif_base.h"
 #include "sw/device/lib/dif/dif_rv_plic.h"
 #include "sw/device/lib/runtime/log.h"
 #include "sw/device/lib/testing/check.h"
@@ -17,10 +18,10 @@
        ++irq_id) {
     uint32_t priority = rand_testutils_gen32_range(kDifRvPlicMinPriority + 1,
                                                    kDifRvPlicMaxPriority);
-    CHECK(dif_rv_plic_irq_set_priority(plic, irq_id, priority) == kDifRvPlicOk);
-    CHECK(dif_rv_plic_irq_set_enabled(plic, irq_id, target,
-                                      kDifRvPlicToggleEnabled) == kDifRvPlicOk);
+    CHECK_DIF_OK(dif_rv_plic_irq_set_priority(plic, irq_id, priority));
+    CHECK_DIF_OK(
+        dif_rv_plic_irq_set_enabled(plic, irq_id, target, kDifToggleEnabled));
   }
-  CHECK(dif_rv_plic_target_set_threshold(plic, target, kDifRvPlicMinPriority) ==
-        kDifRvPlicOk);
+  CHECK_DIF_OK(
+      dif_rv_plic_target_set_threshold(plic, target, kDifRvPlicMinPriority));
 }
diff --git a/sw/device/tests/autogen/plic_all_irqs_test.c b/sw/device/tests/autogen/plic_all_irqs_test.c
index 8eb9a3f..1a88f01 100644
--- a/sw/device/tests/autogen/plic_all_irqs_test.c
+++ b/sw/device/tests/autogen/plic_all_irqs_test.c
@@ -144,7 +144,7 @@
 void handler_irq_external(void) {
   // Find which interrupt fired at PLIC by claiming it.
   dif_rv_plic_irq_id_t plic_irq_id;
-  CHECK(dif_rv_plic_irq_claim(&plic, kHart, &plic_irq_id) == kDifRvPlicOk);
+  CHECK_DIF_OK(dif_rv_plic_irq_claim(&plic, kHart, &plic_irq_id));
 
   // Check if it is the right peripheral.
   top_earlgrey_plic_peripheral_t peripheral = (top_earlgrey_plic_peripheral_t)
@@ -251,7 +251,7 @@
   }
 
   // Complete the IRQ at PLIC.
-  CHECK(dif_rv_plic_irq_complete(&plic, kHart, plic_irq_id) == kDifRvPlicOk);
+  CHECK_DIF_OK(dif_rv_plic_irq_complete(&plic, kHart, plic_irq_id));
 }
 
 /**
@@ -300,8 +300,7 @@
 
   mmio_region_t base_addr =
       mmio_region_from_addr(TOP_EARLGREY_RV_PLIC_BASE_ADDR);
-  CHECK(dif_rv_plic_init((dif_rv_plic_params_t){.base_addr = base_addr},
-                         &plic) == kDifRvPlicOk);
+  CHECK_DIF_OK(dif_rv_plic_init(base_addr, &plic));
 }
 
 /**
diff --git a/sw/device/tests/rv_plic_smoketest.c b/sw/device/tests/rv_plic_smoketest.c
index a1c90ce..c8f2dfe 100644
--- a/sw/device/tests/rv_plic_smoketest.c
+++ b/sw/device/tests/rv_plic_smoketest.c
@@ -72,9 +72,7 @@
 void handler_irq_external(void) {
   // Claim the IRQ by reading the Ibex specific CC register.
   dif_rv_plic_irq_id_t interrupt_id;
-  CHECK(
-      dif_rv_plic_irq_claim(&plic0, kPlicTarget, &interrupt_id) == kDifRvPlicOk,
-      "ISR is not implemented!");
+  CHECK_DIF_OK(dif_rv_plic_irq_claim(&plic0, kPlicTarget, &interrupt_id));
 
   // Check if the interrupted peripheral is UART.
   top_earlgrey_plic_peripheral_t peripheral_id =
@@ -85,9 +83,7 @@
 
   // Complete the IRQ by writing the IRQ source to the Ibex specific CC
   // register.
-  CHECK(dif_rv_plic_irq_complete(&plic0, kPlicTarget, interrupt_id) ==
-            kDifRvPlicOk,
-        "Unable to complete the IRQ request!");
+  CHECK_DIF_OK(dif_rv_plic_irq_complete(&plic0, kPlicTarget, interrupt_id));
 }
 
 static void uart_initialise(mmio_region_t base_addr, dif_uart_t *uart) {
@@ -101,12 +97,6 @@
                                }));
 }
 
-static void plic_initialise(mmio_region_t base_addr, dif_rv_plic_t *plic) {
-  CHECK(dif_rv_plic_init((dif_rv_plic_params_t){.base_addr = base_addr},
-                         plic) == kDifRvPlicOk,
-        "PLIC init failed!");
-}
-
 /**
  * Configures all the relevant interrupts in UART.
  */
@@ -122,29 +112,23 @@
  */
 static void plic_configure_irqs(dif_rv_plic_t *plic) {
   // Set IRQ priorities to MAX
-  CHECK(dif_rv_plic_irq_set_priority(plic, kTopEarlgreyPlicIrqIdUart0RxOverflow,
-                                     kDifRvPlicMaxPriority) == kDifRvPlicOk,
-        "priority set for RX overflow failed!");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(
+      plic, kTopEarlgreyPlicIrqIdUart0RxOverflow, kDifRvPlicMaxPriority));
 
-  CHECK(dif_rv_plic_irq_set_priority(plic, kTopEarlgreyPlicIrqIdUart0TxEmpty,
-                                     kDifRvPlicMaxPriority) == kDifRvPlicOk,
-        "priority set for TX empty failed!");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(
+      plic, kTopEarlgreyPlicIrqIdUart0TxEmpty, kDifRvPlicMaxPriority));
 
   // Set Ibex IRQ priority threshold level
-  CHECK(dif_rv_plic_target_set_threshold(&plic0, kPlicTarget,
-                                         kDifRvPlicMinPriority) == kDifRvPlicOk,
-        "threshold set failed!");
+  CHECK_DIF_OK(dif_rv_plic_target_set_threshold(&plic0, kPlicTarget,
+                                                kDifRvPlicMinPriority));
 
   // Enable IRQs in PLIC
-  CHECK(dif_rv_plic_irq_set_enabled(plic, kTopEarlgreyPlicIrqIdUart0RxOverflow,
-                                    kPlicTarget,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "interrupt Enable for RX overflow failed!");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(plic,
+                                           kTopEarlgreyPlicIrqIdUart0RxOverflow,
+                                           kPlicTarget, kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, kTopEarlgreyPlicIrqIdUart0TxEmpty,
-                                    kPlicTarget,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "interrupt Enable for TX empty failed!");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(
+      plic, kTopEarlgreyPlicIrqIdUart0TxEmpty, kPlicTarget, kDifToggleEnabled));
 }
 
 static void execute_test(dif_uart_t *uart) {
@@ -183,7 +167,7 @@
 
   mmio_region_t plic_base_addr =
       mmio_region_from_addr(TOP_EARLGREY_RV_PLIC_BASE_ADDR);
-  plic_initialise(plic_base_addr, &plic0);
+  CHECK_DIF_OK(dif_rv_plic_init(plic_base_addr, &plic0));
 
   uart_configure_irqs(&uart0);
   plic_configure_irqs(&plic0);
diff --git a/sw/device/tests/sim_dv/gpio_test.c b/sw/device/tests/sim_dv/gpio_test.c
index cdc23b8..f1f4487 100644
--- a/sw/device/tests/sim_dv/gpio_test.c
+++ b/sw/device/tests/sim_dv/gpio_test.c
@@ -68,28 +68,22 @@
 static void plic_init_with_irqs(mmio_region_t base_addr, dif_rv_plic_t *plic) {
   LOG_INFO("Initializing the PLIC.");
 
-  CHECK(dif_rv_plic_init((dif_rv_plic_params_t){.base_addr = base_addr},
-                         plic) == kDifRvPlicOk,
-        "dif_rv_plic_init failed");
+  CHECK_DIF_OK(dif_rv_plic_init(base_addr, plic));
 
   for (uint32_t i = 0; i < kNumGpios; ++i) {
     dif_rv_plic_irq_id_t plic_irq_id = i + kTopEarlgreyPlicIrqIdGpioGpio0;
 
     // Set the priority of GPIO interrupts at PLIC to be >=1
-    CHECK(dif_rv_plic_irq_set_priority(plic, plic_irq_id, 0x1) == kDifRvPlicOk,
-          "dif_rv_plic_irq_set_priority failed");
+    CHECK_DIF_OK(dif_rv_plic_irq_set_priority(plic, plic_irq_id, 0x1));
 
     // Enable all GPIO interrupts at the PLIC.
-    CHECK(dif_rv_plic_irq_set_enabled(plic, plic_irq_id,
-                                      kTopEarlgreyPlicTargetIbex0,
-                                      kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-          "dif_rv_plic_irq_set_enabled failed");
+    CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(
+        plic, plic_irq_id, kTopEarlgreyPlicTargetIbex0, kDifToggleEnabled));
   }
 
   // Set the threshold for the Ibex to 0.
-  CHECK(dif_rv_plic_target_set_threshold(plic, kTopEarlgreyPlicTargetIbex0,
-                                         0x0) == kDifRvPlicOk,
-        "dif_rv_plic_target_set_threshold failed");
+  CHECK_DIF_OK(
+      dif_rv_plic_target_set_threshold(plic, kTopEarlgreyPlicTargetIbex0, 0x0));
 }
 
 /**
@@ -206,9 +200,8 @@
 void handler_irq_external(void) {
   // Find which interrupt fired at PLIC by claiming it.
   dif_rv_plic_irq_id_t plic_irq_id;
-  CHECK(dif_rv_plic_irq_claim(&plic, kTopEarlgreyPlicTargetIbex0,
-                              &plic_irq_id) == kDifRvPlicOk,
-        "dif_rv_plic_irq_claim failed");
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_claim(&plic, kTopEarlgreyPlicTargetIbex0, &plic_irq_id));
 
   // Check if it is the right peripheral.
   top_earlgrey_plic_peripheral_t peripheral = (top_earlgrey_plic_peripheral_t)
@@ -244,9 +237,8 @@
   CHECK_DIF_OK(dif_gpio_irq_acknowledge(&gpio, gpio_pin_irq_fired));
 
   // Complete the IRQ at PLIC.
-  CHECK(dif_rv_plic_irq_complete(&plic, kTopEarlgreyPlicTargetIbex0,
-                                 plic_irq_id) == kDifRvPlicOk,
-        "dif_rv_plic_irq_complete failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_complete(&plic, kTopEarlgreyPlicTargetIbex0,
+                                        plic_irq_id));
 }
 
 const test_config_t kTestConfig;
@@ -260,9 +252,8 @@
       dif_gpio_init(mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR), &gpio));
 
   // Initialize the PLIC.
-  mmio_region_t plic_base_addr =
-      mmio_region_from_addr(TOP_EARLGREY_RV_PLIC_BASE_ADDR);
-  plic_init_with_irqs(plic_base_addr, &plic);
+  plic_init_with_irqs(mmio_region_from_addr(TOP_EARLGREY_RV_PLIC_BASE_ADDR),
+                      &plic);
 
   // Enable the external IRQ at Ibex.
   irq_global_ctrl(true);
diff --git a/sw/device/tests/sim_dv/spi_tx_rx_test.c b/sw/device/tests/sim_dv/spi_tx_rx_test.c
index c6c892f..23a14a7 100644
--- a/sw/device/tests/sim_dv/spi_tx_rx_test.c
+++ b/sw/device/tests/sim_dv/spi_tx_rx_test.c
@@ -70,9 +70,8 @@
 void handler_irq_external(void) {
   // Find which interrupt fired at PLIC by claiming it.
   dif_rv_plic_irq_id_t plic_irq_id;
-  CHECK(dif_rv_plic_irq_claim(&plic0, kTopEarlgreyPlicTargetIbex0,
-                              &plic_irq_id) == kDifRvPlicOk,
-        "dif_rv_plic_irq_claim failed");
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_claim(&plic0, kTopEarlgreyPlicTargetIbex0, &plic_irq_id));
 
   // Check if it is the right peripheral.
   top_earlgrey_plic_peripheral_t peripheral = (top_earlgrey_plic_peripheral_t)
@@ -126,9 +125,8 @@
   CHECK_DIF_OK(dif_spi_device_irq_acknowledge(&spi_device, spi_device_irq));
 
   // Complete the IRQ at PLIC.
-  CHECK(dif_rv_plic_irq_complete(&plic0, kTopEarlgreyPlicTargetIbex0,
-                                 plic_irq_id) == kDifRvPlicOk,
-        "dif_rv_plic_irq_complete failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_complete(&plic0, kTopEarlgreyPlicTargetIbex0,
+                                        plic_irq_id));
 }
 
 /**
@@ -167,74 +165,50 @@
 static void plic_init_with_irqs(mmio_region_t base_addr, dif_rv_plic_t *plic) {
   LOG_INFO("Initializing the PLIC.");
 
-  CHECK(dif_rv_plic_init((dif_rv_plic_params_t){.base_addr = base_addr},
-                         plic) == kDifRvPlicOk,
-        "dif_rv_plic_init failed");
+  CHECK_DIF_OK(dif_rv_plic_init(base_addr, plic));
 
   // Set the priority of SPI DEVICE interrupts at PLIC to be >=1 (so ensure the
   // target does get interrupted).
-  CHECK(dif_rv_plic_irq_set_priority(plic, kTopEarlgreyPlicIrqIdSpiDeviceRxFull,
-                                     kDifRvPlicMaxPriority) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic,
-                                     kTopEarlgreyPlicIrqIdSpiDeviceRxWatermark,
-                                     kDifRvPlicMaxPriority) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic,
-                                     kTopEarlgreyPlicIrqIdSpiDeviceTxWatermark,
-                                     kDifRvPlicMaxPriority) == kDifRvPlicOk,
-        , "dif_rv_plic_irq_set_priority failed");
-  CHECK(
-      dif_rv_plic_irq_set_priority(plic, kTopEarlgreyPlicIrqIdSpiDeviceRxError,
-                                   kDifRvPlicMaxPriority) == kDifRvPlicOk,
-      "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic,
-                                     kTopEarlgreyPlicIrqIdSpiDeviceRxOverflow,
-                                     kDifRvPlicMaxPriority) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic,
-                                     kTopEarlgreyPlicIrqIdSpiDeviceTxUnderflow,
-                                     kDifRvPlicMaxPriority) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceRxFull, kDifRvPlicMaxPriority));
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceRxWatermark, kDifRvPlicMaxPriority));
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceTxWatermark, kDifRvPlicMaxPriority));
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceRxError, kDifRvPlicMaxPriority));
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceRxOverflow, kDifRvPlicMaxPriority));
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceTxUnderflow, kDifRvPlicMaxPriority));
 
   // Set the threshold for the Ibex to 0.
-  CHECK(dif_rv_plic_target_set_threshold(plic, kTopEarlgreyPlicTargetIbex0,
-                                         0x0) == kDifRvPlicOk,
-        "dif_rv_plic_target_set_threshold failed");
+  CHECK_DIF_OK(
+      dif_rv_plic_target_set_threshold(plic, kTopEarlgreyPlicTargetIbex0, 0x0));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, kTopEarlgreyPlicIrqIdSpiDeviceRxFull,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceRxFull, kTopEarlgreyPlicTargetIbex0,
+      kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic,
-                                    kTopEarlgreyPlicIrqIdSpiDeviceRxWatermark,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceRxWatermark,
+      kTopEarlgreyPlicTargetIbex0, kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic,
-                                    kTopEarlgreyPlicIrqIdSpiDeviceTxWatermark,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceTxWatermark,
+      kTopEarlgreyPlicTargetIbex0, kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, kTopEarlgreyPlicIrqIdSpiDeviceRxError,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceRxError, kTopEarlgreyPlicTargetIbex0,
+      kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic,
-                                    kTopEarlgreyPlicIrqIdSpiDeviceRxOverflow,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceRxOverflow,
+      kTopEarlgreyPlicTargetIbex0, kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic,
-                                    kTopEarlgreyPlicIrqIdSpiDeviceTxUnderflow,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(
+      plic, kTopEarlgreyPlicIrqIdSpiDeviceTxUnderflow,
+      kTopEarlgreyPlicTargetIbex0, kDifToggleEnabled));
 }
 
 static bool exp_irqs_fired(void) {
diff --git a/sw/device/tests/sim_dv/uart_tx_rx_test.c b/sw/device/tests/sim_dv/uart_tx_rx_test.c
index cc077ae..1227df3 100644
--- a/sw/device/tests/sim_dv/uart_tx_rx_test.c
+++ b/sw/device/tests/sim_dv/uart_tx_rx_test.c
@@ -4,6 +4,7 @@
 
 #include "sw/device/lib/arch/device.h"
 #include "sw/device/lib/base/mmio.h"
+#include "sw/device/lib/dif/dif_base.h"
 #include "sw/device/lib/dif/dif_rv_plic.h"
 #include "sw/device/lib/dif/dif_uart.h"
 #include "sw/device/lib/handler.h"
@@ -221,9 +222,8 @@
 void handler_irq_external(void) {
   // Find which interrupt fired at PLIC by claiming it.
   dif_rv_plic_irq_id_t plic_irq_id;
-  CHECK(dif_rv_plic_irq_claim(&plic, kTopEarlgreyPlicTargetIbex0,
-                              &plic_irq_id) == kDifRvPlicOk,
-        "dif_rv_plic_irq_claim failed");
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_claim(&plic, kTopEarlgreyPlicTargetIbex0, &plic_irq_id));
 
   // Check if it is the right peripheral.
   top_earlgrey_plic_peripheral_t peripheral = (top_earlgrey_plic_peripheral_t)
@@ -267,9 +267,8 @@
   CHECK_DIF_OK(dif_uart_irq_acknowledge(&uart, uart_irq));
 
   // Complete the IRQ at PLIC.
-  CHECK(dif_rv_plic_irq_complete(&plic, kTopEarlgreyPlicTargetIbex0,
-                                 plic_irq_id) == kDifRvPlicOk,
-        "dif_rv_plic_irq_complete failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_complete(&plic, kTopEarlgreyPlicTargetIbex0,
+                                        plic_irq_id));
 }
 
 /**
@@ -308,82 +307,61 @@
 static void plic_init_with_irqs(mmio_region_t base_addr, dif_rv_plic_t *plic) {
   LOG_INFO("Initializing the PLIC. %0x", uart_irq_tx_watermartk_id);
 
-  CHECK(dif_rv_plic_init((dif_rv_plic_params_t){.base_addr = base_addr},
-                         plic) == kDifRvPlicOk,
-        "dif_rv_plic_init failed");
+  CHECK_DIF_OK(dif_rv_plic_init(base_addr, plic));
 
   // Set the priority of UART interrupts at PLIC to be >=1 (so ensure the target
   // does get interrupted).
-  CHECK(dif_rv_plic_irq_set_priority(plic, uart_irq_tx_watermartk_id, 0x1) ==
-            kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic, uart_irq_rx_watermartk_id, 0x2) ==
-            kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic, uart_irq_tx_empty_id, 0x3) ==
-            kDifRvPlicOk,
-        , "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic, uart_irq_rx_overflow_id, 0x1) ==
-            kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic, uart_irq_rx_frame_err_id, 0x2) ==
-            kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic, uart_irq_rx_break_err_id, 0x3) ==
-            kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic, uart_irq_rx_timeout_id, 0x1) ==
-            kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
-  CHECK(dif_rv_plic_irq_set_priority(plic, uart_irq_rx_parity_err_id, 0x2) ==
-            kDifRvPlicOk,
-        "dif_rv_plic_irq_set_priority failed");
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_set_priority(plic, uart_irq_tx_watermartk_id, 0x1));
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_set_priority(plic, uart_irq_rx_watermartk_id, 0x2));
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(plic, uart_irq_tx_empty_id, 0x3));
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_set_priority(plic, uart_irq_rx_overflow_id, 0x1));
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_set_priority(plic, uart_irq_rx_frame_err_id, 0x2));
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_set_priority(plic, uart_irq_rx_break_err_id, 0x3));
+  CHECK_DIF_OK(dif_rv_plic_irq_set_priority(plic, uart_irq_rx_timeout_id, 0x1));
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_set_priority(plic, uart_irq_rx_parity_err_id, 0x2));
 
   // Set the threshold for the Ibex to 0.
-  CHECK(dif_rv_plic_target_set_threshold(plic, kTopEarlgreyPlicTargetIbex0,
-                                         0x0) == kDifRvPlicOk,
-        "dif_rv_plic_target_set_threshold failed");
+  CHECK_DIF_OK(
+      dif_rv_plic_target_set_threshold(plic, kTopEarlgreyPlicTargetIbex0, 0x0));
 
   // Enable all UART interrupts at the PLIC.
-  CHECK(dif_rv_plic_irq_set_enabled(plic, uart_irq_tx_watermartk_id,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(plic, uart_irq_tx_watermartk_id,
+                                           kTopEarlgreyPlicTargetIbex0,
+                                           kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_watermartk_id,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_watermartk_id,
+                                           kTopEarlgreyPlicTargetIbex0,
+                                           kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, uart_irq_tx_empty_id,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(plic, uart_irq_tx_empty_id,
+                                           kTopEarlgreyPlicTargetIbex0,
+                                           kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_overflow_id,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_overflow_id,
+                                           kTopEarlgreyPlicTargetIbex0,
+                                           kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_frame_err_id,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_frame_err_id,
+                                           kTopEarlgreyPlicTargetIbex0,
+                                           kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_break_err_id,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_break_err_id,
+                                           kTopEarlgreyPlicTargetIbex0,
+                                           kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_timeout_id,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_timeout_id,
+                                           kTopEarlgreyPlicTargetIbex0,
+                                           kDifToggleEnabled));
 
-  CHECK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_parity_err_id,
-                                    kTopEarlgreyPlicTargetIbex0,
-                                    kDifRvPlicToggleEnabled) == kDifRvPlicOk,
-        "dif_rv_plic_irq_set_enabled failed");
+  CHECK_DIF_OK(dif_rv_plic_irq_set_enabled(plic, uart_irq_rx_parity_err_id,
+                                           kTopEarlgreyPlicTargetIbex0,
+                                           kDifToggleEnabled));
 }
 
 /**
diff --git a/util/topgen/templates/plic_all_irqs_test.c.tpl b/util/topgen/templates/plic_all_irqs_test.c.tpl
index 399fbc9..98e8975 100644
--- a/util/topgen/templates/plic_all_irqs_test.c.tpl
+++ b/util/topgen/templates/plic_all_irqs_test.c.tpl
@@ -68,7 +68,7 @@
 void handler_irq_external(void) {
   // Find which interrupt fired at PLIC by claiming it.
   dif_rv_plic_irq_id_t plic_irq_id;
-  CHECK(dif_rv_plic_irq_claim(&plic, kHart, &plic_irq_id) == kDifRvPlicOk);
+  CHECK_DIF_OK(dif_rv_plic_irq_claim(&plic, kHart, &plic_irq_id));
 
   // Check if it is the right peripheral.
   top_earlgrey_plic_peripheral_t peripheral = (top_earlgrey_plic_peripheral_t)
@@ -89,7 +89,7 @@
   }
 
   // Complete the IRQ at PLIC.
-  CHECK(dif_rv_plic_irq_complete(&plic, kHart, plic_irq_id) == kDifRvPlicOk);
+  CHECK_DIF_OK(dif_rv_plic_irq_complete(&plic, kHart, plic_irq_id));
 }
 
 /**
@@ -110,8 +110,7 @@
 
   mmio_region_t base_addr =
       mmio_region_from_addr(TOP_EARLGREY_RV_PLIC_BASE_ADDR);
-  CHECK(dif_rv_plic_init((dif_rv_plic_params_t){.base_addr = base_addr},
-                         &plic) == kDifRvPlicOk);
+  CHECK_DIF_OK(dif_rv_plic_init(base_addr, &plic));
 }
 
 /**