[ip/spi_device] Remove redundant interrupts

- Removed Async TX Empty, Full, Async RX Not Empty interrupts
- Revised the description of Async FIFO Pop

This is related to #5
diff --git a/hw/ip/spi_device/doc/spi_device.hjson b/hw/ip/spi_device/doc/spi_device.hjson
index 3c11b8a..d464511 100644
--- a/hw/ip/spi_device/doc/spi_device.hjson
+++ b/hw/ip/spi_device/doc/spi_device.hjson
@@ -13,13 +13,12 @@
     { name: "miso", desc: "SPI Output" },
   ],
   interrupt_list: [
-    { name: "rxne",  desc: "RX SRAM FIFO is not empty" },
+    { name: "rxf",   desc: "RX SRAM FIFO Full" },
     { name: "rxlvl", desc: "RX SRAM FIFO is above the level" },
-    { name: "txe",   desc: "TX SRAM FIFO is empty" },
-    { name: "txf",   desc: "TX SRAM FIFO is full" },
     { name: "txlvl", desc: "TX SRAM FIFO is under the level" },
     { name: "rxerr", desc: "MOSI in FwMode has error" },
   ],
+  scan: "true", // Enable `scanmode_i` port
   regwidth: "32",
   registers: [
     { name: "CONTROL",
diff --git a/hw/ip/spi_device/dv/env/spi_device_env_pkg.sv b/hw/ip/spi_device/dv/env/spi_device_env_pkg.sv
index 0af1175..5e79386 100644
--- a/hw/ip/spi_device/dv/env/spi_device_env_pkg.sv
+++ b/hw/ip/spi_device/dv/env/spi_device_env_pkg.sv
@@ -20,10 +20,8 @@
 
   // local parameters and types
   typedef enum {
-    RxFifoNotEmpty,
+    RxFifoFull,
     RxFifoGtLevel,
-    TxFifoEmpty,
-    TxFifoFull,
     TxFifoLtLevel,
     RxFwModeErr
   } spi_device_intr_e;
diff --git a/hw/ip/spi_device/dv/env/spi_device_reg_block.sv b/hw/ip/spi_device/dv/env/spi_device_reg_block.sv
index 50d473b..37a3078 100644
--- a/hw/ip/spi_device/dv/env/spi_device_reg_block.sv
+++ b/hw/ip/spi_device/dv/env/spi_device_reg_block.sv
@@ -25,10 +25,8 @@
 // Class: spi_device_reg_intr_state
 class spi_device_reg_intr_state extends dv_base_reg;
   // fields
-  rand dv_base_reg_field rxne;
+  rand dv_base_reg_field rxf;
   rand dv_base_reg_field rxlvl;
-  rand dv_base_reg_field txe;
-  rand dv_base_reg_field txf;
   rand dv_base_reg_field txlvl;
   rand dv_base_reg_field rxerr;
 
@@ -42,8 +40,8 @@
 
   virtual function void build();
     // create fields
-    rxne = dv_base_reg_field::type_id::create("rxne");
-    rxne.configure(
+    rxf = dv_base_reg_field::type_id::create("rxf");
+    rxf.configure(
       .parent(this),
       .size(1),
       .lsb_pos(0),
@@ -64,33 +62,11 @@
       .has_reset(1),
       .is_rand(1),
       .individually_accessible(1));
-    txe = dv_base_reg_field::type_id::create("txe");
-    txe.configure(
-      .parent(this),
-      .size(1),
-      .lsb_pos(2),
-      .access("W1C"),
-      .volatile(1),
-      .reset(0),
-      .has_reset(1),
-      .is_rand(1),
-      .individually_accessible(1));
-    txf = dv_base_reg_field::type_id::create("txf");
-    txf.configure(
-      .parent(this),
-      .size(1),
-      .lsb_pos(3),
-      .access("W1C"),
-      .volatile(1),
-      .reset(0),
-      .has_reset(1),
-      .is_rand(1),
-      .individually_accessible(1));
     txlvl = dv_base_reg_field::type_id::create("txlvl");
     txlvl.configure(
       .parent(this),
       .size(1),
-      .lsb_pos(4),
+      .lsb_pos(2),
       .access("W1C"),
       .volatile(1),
       .reset(0),
@@ -101,7 +77,7 @@
     rxerr.configure(
       .parent(this),
       .size(1),
-      .lsb_pos(5),
+      .lsb_pos(3),
       .access("W1C"),
       .volatile(1),
       .reset(0),
@@ -115,10 +91,8 @@
 // Class: spi_device_reg_intr_enable
 class spi_device_reg_intr_enable extends dv_base_reg;
   // fields
-  rand dv_base_reg_field rxne;
+  rand dv_base_reg_field rxf;
   rand dv_base_reg_field rxlvl;
-  rand dv_base_reg_field txe;
-  rand dv_base_reg_field txf;
   rand dv_base_reg_field txlvl;
   rand dv_base_reg_field rxerr;
 
@@ -132,8 +106,8 @@
 
   virtual function void build();
     // create fields
-    rxne = dv_base_reg_field::type_id::create("rxne");
-    rxne.configure(
+    rxf = dv_base_reg_field::type_id::create("rxf");
+    rxf.configure(
       .parent(this),
       .size(1),
       .lsb_pos(0),
@@ -154,33 +128,11 @@
       .has_reset(1),
       .is_rand(1),
       .individually_accessible(1));
-    txe = dv_base_reg_field::type_id::create("txe");
-    txe.configure(
-      .parent(this),
-      .size(1),
-      .lsb_pos(2),
-      .access("RW"),
-      .volatile(0),
-      .reset(0),
-      .has_reset(1),
-      .is_rand(1),
-      .individually_accessible(1));
-    txf = dv_base_reg_field::type_id::create("txf");
-    txf.configure(
-      .parent(this),
-      .size(1),
-      .lsb_pos(3),
-      .access("RW"),
-      .volatile(0),
-      .reset(0),
-      .has_reset(1),
-      .is_rand(1),
-      .individually_accessible(1));
     txlvl = dv_base_reg_field::type_id::create("txlvl");
     txlvl.configure(
       .parent(this),
       .size(1),
-      .lsb_pos(4),
+      .lsb_pos(2),
       .access("RW"),
       .volatile(0),
       .reset(0),
@@ -191,7 +143,7 @@
     rxerr.configure(
       .parent(this),
       .size(1),
-      .lsb_pos(5),
+      .lsb_pos(3),
       .access("RW"),
       .volatile(0),
       .reset(0),
@@ -205,10 +157,8 @@
 // Class: spi_device_reg_intr_test
 class spi_device_reg_intr_test extends dv_base_reg;
   // fields
-  rand dv_base_reg_field rxne;
+  rand dv_base_reg_field rxf;
   rand dv_base_reg_field rxlvl;
-  rand dv_base_reg_field txe;
-  rand dv_base_reg_field txf;
   rand dv_base_reg_field txlvl;
   rand dv_base_reg_field rxerr;
 
@@ -222,8 +172,8 @@
 
   virtual function void build();
     // create fields
-    rxne = dv_base_reg_field::type_id::create("rxne");
-    rxne.configure(
+    rxf = dv_base_reg_field::type_id::create("rxf");
+    rxf.configure(
       .parent(this),
       .size(1),
       .lsb_pos(0),
@@ -244,33 +194,11 @@
       .has_reset(1),
       .is_rand(1),
       .individually_accessible(1));
-    txe = dv_base_reg_field::type_id::create("txe");
-    txe.configure(
-      .parent(this),
-      .size(1),
-      .lsb_pos(2),
-      .access("WO"),
-      .volatile(0),
-      .reset(0),
-      .has_reset(1),
-      .is_rand(1),
-      .individually_accessible(1));
-    txf = dv_base_reg_field::type_id::create("txf");
-    txf.configure(
-      .parent(this),
-      .size(1),
-      .lsb_pos(3),
-      .access("WO"),
-      .volatile(0),
-      .reset(0),
-      .has_reset(1),
-      .is_rand(1),
-      .individually_accessible(1));
     txlvl = dv_base_reg_field::type_id::create("txlvl");
     txlvl.configure(
       .parent(this),
       .size(1),
-      .lsb_pos(4),
+      .lsb_pos(2),
       .access("WO"),
       .volatile(0),
       .reset(0),
@@ -281,7 +209,7 @@
     rxerr.configure(
       .parent(this),
       .size(1),
-      .lsb_pos(5),
+      .lsb_pos(3),
       .access("WO"),
       .volatile(0),
       .reset(0),
diff --git a/hw/ip/spi_device/dv/tb/tb.sv b/hw/ip/spi_device/dv/tb/tb.sv
index 399e53b..728b527 100644
--- a/hw/ip/spi_device/dv/tb/tb.sv
+++ b/hw/ip/spi_device/dv/tb/tb.sv
@@ -23,10 +23,8 @@
   wire miso_en;
   wire mosi_i;
 
-  wire intr_rxne;
+  wire intr_rxf;
   wire intr_rxlvl;
-  wire intr_txe;
-  wire intr_txf;
   wire intr_txlvl;
   wire intr_rxerr;
 
@@ -51,10 +49,8 @@
     .cio_miso_en_o  (miso_en   ),
     .cio_mosi_i     (mosi_i    ),
 
-    .intr_rxne_o    (intr_rxne ),
+    .intr_rxf_o     (intr_rxf  ),
     .intr_rxlvl_o   (intr_rxlvl),
-    .intr_txe_o     (intr_txe  ),
-    .intr_txf_o     (intr_txf  ),
     .intr_txlvl_o   (intr_txlvl),
     .intr_rxerr_o   (intr_rxerr)
   );
@@ -64,10 +60,8 @@
   assign mosi_i       = spi_if.mosi;
   assign spi_if.miso  = miso_en ? miso_o : 1'bz;
 
-  assign interrupts[RxFifoNotEmpty] = intr_rxne ;
+  assign interrupts[RxFifoFull]     = intr_rxf  ;
   assign interrupts[RxFifoGtLevel]  = intr_rxlvl;
-  assign interrupts[TxFifoEmpty]    = intr_txe  ;
-  assign interrupts[TxFifoFull]     = intr_txf  ;
   assign interrupts[TxFifoLtLevel]  = intr_txlvl;
   assign interrupts[RxFwModeErr]    = intr_rxerr;
 
diff --git a/hw/ip/spi_device/rtl/spi_device.sv b/hw/ip/spi_device/rtl/spi_device.sv
index 335f019..732afb8 100644
--- a/hw/ip/spi_device/rtl/spi_device.sv
+++ b/hw/ip/spi_device/rtl/spi_device.sv
@@ -25,10 +25,8 @@
   input              cio_mosi_i,
 
   // Interrupts
-  output logic intr_rxne_o,     // RX FIFO Not Empty
+  output logic intr_rxf_o,      // RX FIFO Full
   output logic intr_rxlvl_o,    // RX FIFO above level
-  output logic intr_txe_o,      // TX FIFO Empty
-  output logic intr_txf_o,      // TX FIFO Full
   output logic intr_txlvl_o,    // TX FIFO below level
   output logic intr_rxerr_o     // RX Frame error
 );
@@ -91,7 +89,7 @@
   spi_mode_e spi_mode;
   //spi_byte_t fw_dummy_byte;
 
-  logic intr_fwm_rxne, intr_fwm_txe, intr_fwm_txf, intr_fwm_rxerr;
+  logic intr_sram_rxf_full, intr_fwm_rxerr;
   logic intr_fwm_rxlvl, rxlvl, rxlvl_d, intr_fwm_txlvl, txlvl, txlvl_d;
 
   // RX FIFO Signals
@@ -198,33 +196,25 @@
   // Interrupt
 
   // Edge
-  logic fwm_txf_q, fwm_txe_q, fwm_rxne_q, fwm_rxerr_q;
-  logic fwm_txf  , fwm_txe  , fwm_rxne  , fwm_rxerr  ;
+  logic sram_rxf_full_q, fwm_rxerr_q;
+  logic sram_rxf_full  , fwm_rxerr  ;
 
-  assign fwm_txf = ~txf_wready;
-  assign fwm_txe = txf_empty_syncd;
-  assign fwm_rxne = rxf_rvalid;
-  assign fwm_rxerr = 1'b0; // TODO: Check if CE# deasserted in the middle of bit transfer
+  // TODO: Check if CE# deasserted in the middle of bit transfer
+  assign fwm_rxerr = 1'b0;
 
   always_ff @(posedge clk_i or negedge rst_ni) begin
     if (!rst_ni) begin
-      fwm_txf_q   <= 1'b0;
-      fwm_txe_q   <= 1'b1;
-      fwm_rxne_q  <= 1'b0;
-      fwm_rxerr_q <= 1'b0;
+      sram_rxf_full_q <= 1'b0;
+      fwm_rxerr_q     <= 1'b0;
     end else begin
-      fwm_txf_q   <= fwm_txf;
-      fwm_txe_q   <= fwm_txe;
-      fwm_rxne_q  <= fwm_rxne;
-      fwm_rxerr_q <= fwm_rxerr;
+      sram_rxf_full_q <= sram_rxf_full;
+      fwm_rxerr_q     <= fwm_rxerr;
     end
   end
 
   // Interrupt
-  assign intr_fwm_txf   = ~fwm_txf_q   & fwm_txf;
-  assign intr_fwm_txe   = ~fwm_txe_q   & fwm_txe;
-  assign intr_fwm_rxne  = ~fwm_rxne_q  & fwm_rxne;
-  assign intr_fwm_rxerr = ~fwm_rxerr_q & fwm_rxerr;
+  assign intr_sram_rxf_full = ~sram_rxf_full_q & sram_rxf_full;
+  assign intr_fwm_rxerr     = ~fwm_rxerr_q & fwm_rxerr;
 
   assign rxlvl_d = (sram_rxf_depth >= reg2hw.fifo_level.rxlvl.q[PtrW-1:0]) ;
   assign txlvl_d = (sram_txf_depth <  reg2hw.fifo_level.txlvl.q[PtrW-1:0]) ;
@@ -243,20 +233,12 @@
 
   assign intr_rxlvl_o = reg2hw.intr_enable.rxlvl.q & reg2hw.intr_state.rxlvl.q;
   assign intr_txlvl_o = reg2hw.intr_enable.txlvl.q & reg2hw.intr_state.txlvl.q;
-  assign intr_rxne_o  = reg2hw.intr_enable.rxne.q  & reg2hw.intr_state.rxne.q;
-  assign intr_txe_o   = reg2hw.intr_enable.txe.q   & reg2hw.intr_state.txe.q;
-  assign intr_txf_o   = reg2hw.intr_enable.txf.q   & reg2hw.intr_state.txf.q;
+  assign intr_rxf_o   = reg2hw.intr_enable.rxf.q   & reg2hw.intr_state.rxf.q;
   assign intr_rxerr_o = reg2hw.intr_enable.rxerr.q & reg2hw.intr_state.rxerr.q;
 
-  assign hw2reg.intr_state.rxne.d   = 1'b1;
-  assign hw2reg.intr_state.rxne.de  = intr_fwm_rxne  |
-                                      (reg2hw.intr_test.rxne.qe  & reg2hw.intr_test.rxne.q);
-  assign hw2reg.intr_state.txe.d    = 1'b1;
-  assign hw2reg.intr_state.txe.de   = intr_fwm_txe |
-                                      (reg2hw.intr_test.txe.qe   & reg2hw.intr_test.txe.q);
-  assign hw2reg.intr_state.txf.d    = 1'b1;
-  assign hw2reg.intr_state.txf.de   = intr_fwm_txf |
-                                      (reg2hw.intr_test.txf.qe   & reg2hw.intr_test.txf.q);
+  assign hw2reg.intr_state.rxf.d    = 1'b1;
+  assign hw2reg.intr_state.rxf.de   = intr_sram_rxf_full |
+                                      (reg2hw.intr_test.rxf.qe   & reg2hw.intr_test.rxf.q);
   assign hw2reg.intr_state.rxerr.d  = 1'b1;
   assign hw2reg.intr_state.rxerr.de = intr_fwm_rxerr |
                                       (reg2hw.intr_test.rxerr.qe & reg2hw.intr_test.rxerr.q);
@@ -372,6 +354,7 @@
     .rptr         (sram_rxf_rptr),  // Given by FW
     .wptr         (sram_rxf_wptr),  // to Register interface
     .depth        (sram_rxf_depth),
+    .full         (sram_rxf_full),
 
     .fifo_valid  (rxf_rvalid),
     .fifo_ready  (rxf_rready),
diff --git a/hw/ip/spi_device/rtl/spi_device_reg_pkg.sv b/hw/ip/spi_device/rtl/spi_device_reg_pkg.sv
index bd95db4..727ef6b 100644
--- a/hw/ip/spi_device/rtl/spi_device_reg_pkg.sv
+++ b/hw/ip/spi_device/rtl/spi_device_reg_pkg.sv
@@ -11,61 +11,41 @@
 
   struct packed {
     struct packed {
-      logic q; // [168]
-    } rxne;
-    struct packed {
-      logic q; // [167]
-    } rxlvl;
-    struct packed {
-      logic q; // [166]
-    } txe;
-    struct packed {
-      logic q; // [165]
-    } txf;
-    struct packed {
-      logic q; // [164]
-    } txlvl;
-    struct packed {
-      logic q; // [163]
-    } rxerr;
-  } intr_state;
-  struct packed {
-    struct packed {
-      logic q; // [162]
-    } rxne;
-    struct packed {
-      logic q; // [161]
-    } rxlvl;
-    struct packed {
       logic q; // [160]
-    } txe;
+    } rxf;
     struct packed {
       logic q; // [159]
-    } txf;
+    } rxlvl;
     struct packed {
       logic q; // [158]
     } txlvl;
     struct packed {
       logic q; // [157]
     } rxerr;
-  } intr_enable;
+  } intr_state;
   struct packed {
     struct packed {
       logic q; // [156]
-      logic qe; // [155]
-    } rxne;
+    } rxf;
+    struct packed {
+      logic q; // [155]
+    } rxlvl;
     struct packed {
       logic q; // [154]
-      logic qe; // [153]
-    } rxlvl;
+    } txlvl;
+    struct packed {
+      logic q; // [153]
+    } rxerr;
+  } intr_enable;
+  struct packed {
     struct packed {
       logic q; // [152]
       logic qe; // [151]
-    } txe;
+    } rxf;
     struct packed {
       logic q; // [150]
       logic qe; // [149]
-    } txf;
+    } rxlvl;
     struct packed {
       logic q; // [148]
       logic qe; // [147]
@@ -147,21 +127,13 @@
 
   struct packed {
     struct packed {
-      logic d;  // [66]
-      logic de; // [65]
-    } rxne;
-    struct packed {
-      logic d;  // [64]
-      logic de; // [63]
-    } rxlvl;
-    struct packed {
       logic d;  // [62]
       logic de; // [61]
-    } txe;
+    } rxf;
     struct packed {
       logic d;  // [60]
       logic de; // [59]
-    } txf;
+    } rxlvl;
     struct packed {
       logic d;  // [58]
       logic de; // [57]
diff --git a/hw/ip/spi_device/rtl/spi_device_reg_top.sv b/hw/ip/spi_device/rtl/spi_device_reg_top.sv
index 18a2b07..c53da41 100644
--- a/hw/ip/spi_device/rtl/spi_device_reg_top.sv
+++ b/hw/ip/spi_device/rtl/spi_device_reg_top.sv
@@ -174,50 +174,34 @@
   // Define SW related signals
   // Format: <reg>_<field>_{wd|we|qs}
   //        or <reg>_{wd|we|qs} if field == 1 or 0
-  logic intr_state_rxne_qs;
-  logic intr_state_rxne_wd;
-  logic intr_state_rxne_we;
+  logic intr_state_rxf_qs;
+  logic intr_state_rxf_wd;
+  logic intr_state_rxf_we;
   logic intr_state_rxlvl_qs;
   logic intr_state_rxlvl_wd;
   logic intr_state_rxlvl_we;
-  logic intr_state_txe_qs;
-  logic intr_state_txe_wd;
-  logic intr_state_txe_we;
-  logic intr_state_txf_qs;
-  logic intr_state_txf_wd;
-  logic intr_state_txf_we;
   logic intr_state_txlvl_qs;
   logic intr_state_txlvl_wd;
   logic intr_state_txlvl_we;
   logic intr_state_rxerr_qs;
   logic intr_state_rxerr_wd;
   logic intr_state_rxerr_we;
-  logic intr_enable_rxne_qs;
-  logic intr_enable_rxne_wd;
-  logic intr_enable_rxne_we;
+  logic intr_enable_rxf_qs;
+  logic intr_enable_rxf_wd;
+  logic intr_enable_rxf_we;
   logic intr_enable_rxlvl_qs;
   logic intr_enable_rxlvl_wd;
   logic intr_enable_rxlvl_we;
-  logic intr_enable_txe_qs;
-  logic intr_enable_txe_wd;
-  logic intr_enable_txe_we;
-  logic intr_enable_txf_qs;
-  logic intr_enable_txf_wd;
-  logic intr_enable_txf_we;
   logic intr_enable_txlvl_qs;
   logic intr_enable_txlvl_wd;
   logic intr_enable_txlvl_we;
   logic intr_enable_rxerr_qs;
   logic intr_enable_rxerr_wd;
   logic intr_enable_rxerr_we;
-  logic intr_test_rxne_wd;
-  logic intr_test_rxne_we;
+  logic intr_test_rxf_wd;
+  logic intr_test_rxf_we;
   logic intr_test_rxlvl_wd;
   logic intr_test_rxlvl_we;
-  logic intr_test_txe_wd;
-  logic intr_test_txe_we;
-  logic intr_test_txf_wd;
-  logic intr_test_txf_we;
   logic intr_test_txlvl_wd;
   logic intr_test_txlvl_we;
   logic intr_test_rxerr_wd;
@@ -293,29 +277,29 @@
   // Register instances
   // R[intr_state]: V(False)
 
-  //   F[rxne]: 0:0
+  //   F[rxf]: 0:0
   prim_subreg #(
     .DW      (1),
     .SWACCESS("W1C"),
     .RESVAL  (1'h0)
-  ) u_intr_state_rxne (
+  ) u_intr_state_rxf (
     .clk_i   (clk_i    ),
     .rst_ni  (rst_ni  ),
 
     // from register interface
-    .we     (intr_state_rxne_we),
-    .wd     (intr_state_rxne_wd),
+    .we     (intr_state_rxf_we),
+    .wd     (intr_state_rxf_wd),
 
     // from internal hardware
-    .de     (hw2reg.intr_state.rxne.de),
-    .d      (hw2reg.intr_state.rxne.d ),
+    .de     (hw2reg.intr_state.rxf.de),
+    .d      (hw2reg.intr_state.rxf.d ),
 
     // to internal hardware
     .qe     (),
-    .q      (reg2hw.intr_state.rxne.q ),
+    .q      (reg2hw.intr_state.rxf.q ),
 
     // to register interface (read)
-    .qs     (intr_state_rxne_qs)
+    .qs     (intr_state_rxf_qs)
   );
 
 
@@ -345,59 +329,7 @@
   );
 
 
-  //   F[txe]: 2:2
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("W1C"),
-    .RESVAL  (1'h0)
-  ) u_intr_state_txe (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (intr_state_txe_we),
-    .wd     (intr_state_txe_wd),
-
-    // from internal hardware
-    .de     (hw2reg.intr_state.txe.de),
-    .d      (hw2reg.intr_state.txe.d ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.intr_state.txe.q ),
-
-    // to register interface (read)
-    .qs     (intr_state_txe_qs)
-  );
-
-
-  //   F[txf]: 3:3
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("W1C"),
-    .RESVAL  (1'h0)
-  ) u_intr_state_txf (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (intr_state_txf_we),
-    .wd     (intr_state_txf_wd),
-
-    // from internal hardware
-    .de     (hw2reg.intr_state.txf.de),
-    .d      (hw2reg.intr_state.txf.d ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.intr_state.txf.q ),
-
-    // to register interface (read)
-    .qs     (intr_state_txf_qs)
-  );
-
-
-  //   F[txlvl]: 4:4
+  //   F[txlvl]: 2:2
   prim_subreg #(
     .DW      (1),
     .SWACCESS("W1C"),
@@ -423,7 +355,7 @@
   );
 
 
-  //   F[rxerr]: 5:5
+  //   F[rxerr]: 3:3
   prim_subreg #(
     .DW      (1),
     .SWACCESS("W1C"),
@@ -451,18 +383,18 @@
 
   // R[intr_enable]: V(False)
 
-  //   F[rxne]: 0:0
+  //   F[rxf]: 0:0
   prim_subreg #(
     .DW      (1),
     .SWACCESS("RW"),
     .RESVAL  (1'h0)
-  ) u_intr_enable_rxne (
+  ) u_intr_enable_rxf (
     .clk_i   (clk_i    ),
     .rst_ni  (rst_ni  ),
 
     // from register interface
-    .we     (intr_enable_rxne_we),
-    .wd     (intr_enable_rxne_wd),
+    .we     (intr_enable_rxf_we),
+    .wd     (intr_enable_rxf_wd),
 
     // from internal hardware
     .de     (1'b0),
@@ -470,10 +402,10 @@
 
     // to internal hardware
     .qe     (),
-    .q      (reg2hw.intr_enable.rxne.q ),
+    .q      (reg2hw.intr_enable.rxf.q ),
 
     // to register interface (read)
-    .qs     (intr_enable_rxne_qs)
+    .qs     (intr_enable_rxf_qs)
   );
 
 
@@ -503,59 +435,7 @@
   );
 
 
-  //   F[txe]: 2:2
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("RW"),
-    .RESVAL  (1'h0)
-  ) u_intr_enable_txe (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (intr_enable_txe_we),
-    .wd     (intr_enable_txe_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0  ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.intr_enable.txe.q ),
-
-    // to register interface (read)
-    .qs     (intr_enable_txe_qs)
-  );
-
-
-  //   F[txf]: 3:3
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("RW"),
-    .RESVAL  (1'h0)
-  ) u_intr_enable_txf (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (intr_enable_txf_we),
-    .wd     (intr_enable_txf_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0  ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.intr_enable.txf.q ),
-
-    // to register interface (read)
-    .qs     (intr_enable_txf_qs)
-  );
-
-
-  //   F[txlvl]: 4:4
+  //   F[txlvl]: 2:2
   prim_subreg #(
     .DW      (1),
     .SWACCESS("RW"),
@@ -581,7 +461,7 @@
   );
 
 
-  //   F[rxerr]: 5:5
+  //   F[rxerr]: 3:3
   prim_subreg #(
     .DW      (1),
     .SWACCESS("RW"),
@@ -609,17 +489,17 @@
 
   // R[intr_test]: V(True)
 
-  //   F[rxne]: 0:0
+  //   F[rxf]: 0:0
   prim_subreg_ext #(
     .DW    (1)
-  ) u_intr_test_rxne (
+  ) u_intr_test_rxf (
     .re     (1'b0),
-    .we     (intr_test_rxne_we),
-    .wd     (intr_test_rxne_wd),
+    .we     (intr_test_rxf_we),
+    .wd     (intr_test_rxf_wd),
     .d      ('0),
     .qre    (),
-    .qe     (reg2hw.intr_test.rxne.qe),
-    .q      (reg2hw.intr_test.rxne.q ),
+    .qe     (reg2hw.intr_test.rxf.qe),
+    .q      (reg2hw.intr_test.rxf.q ),
     .qs     ()
   );
 
@@ -639,37 +519,7 @@
   );
 
 
-  //   F[txe]: 2:2
-  prim_subreg_ext #(
-    .DW    (1)
-  ) u_intr_test_txe (
-    .re     (1'b0),
-    .we     (intr_test_txe_we),
-    .wd     (intr_test_txe_wd),
-    .d      ('0),
-    .qre    (),
-    .qe     (reg2hw.intr_test.txe.qe),
-    .q      (reg2hw.intr_test.txe.q ),
-    .qs     ()
-  );
-
-
-  //   F[txf]: 3:3
-  prim_subreg_ext #(
-    .DW    (1)
-  ) u_intr_test_txf (
-    .re     (1'b0),
-    .we     (intr_test_txf_we),
-    .wd     (intr_test_txf_wd),
-    .d      ('0),
-    .qre    (),
-    .qe     (reg2hw.intr_test.txf.qe),
-    .q      (reg2hw.intr_test.txf.q ),
-    .qs     ()
-  );
-
-
-  //   F[txlvl]: 4:4
+  //   F[txlvl]: 2:2
   prim_subreg_ext #(
     .DW    (1)
   ) u_intr_test_txlvl (
@@ -684,7 +534,7 @@
   );
 
 
-  //   F[rxerr]: 5:5
+  //   F[rxerr]: 3:3
   prim_subreg_ext #(
     .DW    (1)
   ) u_intr_test_rxerr (
@@ -1342,59 +1192,41 @@
 
   // Write Enable signal
 
-  assign intr_state_rxne_we = addr_hit[0] && reg_we;
-  assign intr_state_rxne_wd = reg_wdata[0];
+  assign intr_state_rxf_we = addr_hit[0] && reg_we;
+  assign intr_state_rxf_wd = reg_wdata[0];
 
   assign intr_state_rxlvl_we = addr_hit[0] && reg_we;
   assign intr_state_rxlvl_wd = reg_wdata[1];
 
-  assign intr_state_txe_we = addr_hit[0] && reg_we;
-  assign intr_state_txe_wd = reg_wdata[2];
-
-  assign intr_state_txf_we = addr_hit[0] && reg_we;
-  assign intr_state_txf_wd = reg_wdata[3];
-
   assign intr_state_txlvl_we = addr_hit[0] && reg_we;
-  assign intr_state_txlvl_wd = reg_wdata[4];
+  assign intr_state_txlvl_wd = reg_wdata[2];
 
   assign intr_state_rxerr_we = addr_hit[0] && reg_we;
-  assign intr_state_rxerr_wd = reg_wdata[5];
+  assign intr_state_rxerr_wd = reg_wdata[3];
 
-  assign intr_enable_rxne_we = addr_hit[1] && reg_we;
-  assign intr_enable_rxne_wd = reg_wdata[0];
+  assign intr_enable_rxf_we = addr_hit[1] && reg_we;
+  assign intr_enable_rxf_wd = reg_wdata[0];
 
   assign intr_enable_rxlvl_we = addr_hit[1] && reg_we;
   assign intr_enable_rxlvl_wd = reg_wdata[1];
 
-  assign intr_enable_txe_we = addr_hit[1] && reg_we;
-  assign intr_enable_txe_wd = reg_wdata[2];
-
-  assign intr_enable_txf_we = addr_hit[1] && reg_we;
-  assign intr_enable_txf_wd = reg_wdata[3];
-
   assign intr_enable_txlvl_we = addr_hit[1] && reg_we;
-  assign intr_enable_txlvl_wd = reg_wdata[4];
+  assign intr_enable_txlvl_wd = reg_wdata[2];
 
   assign intr_enable_rxerr_we = addr_hit[1] && reg_we;
-  assign intr_enable_rxerr_wd = reg_wdata[5];
+  assign intr_enable_rxerr_wd = reg_wdata[3];
 
-  assign intr_test_rxne_we = addr_hit[2] && reg_we;
-  assign intr_test_rxne_wd = reg_wdata[0];
+  assign intr_test_rxf_we = addr_hit[2] && reg_we;
+  assign intr_test_rxf_wd = reg_wdata[0];
 
   assign intr_test_rxlvl_we = addr_hit[2] && reg_we;
   assign intr_test_rxlvl_wd = reg_wdata[1];
 
-  assign intr_test_txe_we = addr_hit[2] && reg_we;
-  assign intr_test_txe_wd = reg_wdata[2];
-
-  assign intr_test_txf_we = addr_hit[2] && reg_we;
-  assign intr_test_txf_wd = reg_wdata[3];
-
   assign intr_test_txlvl_we = addr_hit[2] && reg_we;
-  assign intr_test_txlvl_wd = reg_wdata[4];
+  assign intr_test_txlvl_wd = reg_wdata[2];
 
   assign intr_test_rxerr_we = addr_hit[2] && reg_we;
-  assign intr_test_rxerr_wd = reg_wdata[5];
+  assign intr_test_rxerr_wd = reg_wdata[3];
 
   assign control_abort_we = addr_hit[3] && reg_we;
   assign control_abort_wd = reg_wdata[0];
@@ -1469,21 +1301,17 @@
     reg_rdata_next = '0;
     unique case (1'b1)
       addr_hit[0]: begin
-        reg_rdata_next[0] = intr_state_rxne_qs;
+        reg_rdata_next[0] = intr_state_rxf_qs;
         reg_rdata_next[1] = intr_state_rxlvl_qs;
-        reg_rdata_next[2] = intr_state_txe_qs;
-        reg_rdata_next[3] = intr_state_txf_qs;
-        reg_rdata_next[4] = intr_state_txlvl_qs;
-        reg_rdata_next[5] = intr_state_rxerr_qs;
+        reg_rdata_next[2] = intr_state_txlvl_qs;
+        reg_rdata_next[3] = intr_state_rxerr_qs;
       end
 
       addr_hit[1]: begin
-        reg_rdata_next[0] = intr_enable_rxne_qs;
+        reg_rdata_next[0] = intr_enable_rxf_qs;
         reg_rdata_next[1] = intr_enable_rxlvl_qs;
-        reg_rdata_next[2] = intr_enable_txe_qs;
-        reg_rdata_next[3] = intr_enable_txf_qs;
-        reg_rdata_next[4] = intr_enable_txlvl_qs;
-        reg_rdata_next[5] = intr_enable_rxerr_qs;
+        reg_rdata_next[2] = intr_enable_txlvl_qs;
+        reg_rdata_next[3] = intr_enable_rxerr_qs;
       end
 
       addr_hit[2]: begin
@@ -1491,8 +1319,6 @@
         reg_rdata_next[1] = '0;
         reg_rdata_next[2] = '0;
         reg_rdata_next[3] = '0;
-        reg_rdata_next[4] = '0;
-        reg_rdata_next[5] = '0;
       end
 
       addr_hit[3]: begin
diff --git a/hw/ip/spi_device/rtl/spi_fwm_rxf_ctrl.sv b/hw/ip/spi_device/rtl/spi_fwm_rxf_ctrl.sv
index 2947400..bab909d 100644
--- a/hw/ip/spi_device/rtl/spi_fwm_rxf_ctrl.sv
+++ b/hw/ip/spi_device/rtl/spi_fwm_rxf_ctrl.sv
@@ -26,6 +26,8 @@
   output logic [PtrW-1:0] wptr,
   output logic [PtrW-1:0] depth,
 
+  output logic            full,
+
   input               fifo_valid,
   output logic        fifo_ready,
   input  [FifoDw-1:0] fifo_rdata,
@@ -86,6 +88,7 @@
   assign ptr_cmp = rptr ^ wptr;
   // TODO: Check partial SRAM width read condition
   assign sramf_full = (ptr_cmp[PtrW-1] == 1'b1) && (ptr_cmp[PtrW-2:SDW] == '0);
+  assign full = sramf_full;
 
   assign sramf_limit = limit_index_i - base_index_i;
 
diff --git a/hw/ip/spi_device/rtl/spi_fwmode.sv b/hw/ip/spi_device/rtl/spi_fwmode.sv
index 4c0df32..1241284 100644
--- a/hw/ip/spi_device/rtl/spi_fwmode.sv
+++ b/hw/ip/spi_device/rtl/spi_fwmode.sv
@@ -41,7 +41,8 @@
   localparam int unsigned BITWIDTH = $clog2(BITS);
 
   logic [BITWIDTH-1:0] rx_bitcount;
-  typedef enum {
+
+  typedef enum logic {
     TxIdle,
     TxActive
   } tx_state_e;
@@ -91,11 +92,10 @@
   assign first_bit = (tx_bitcount == BITWIDTH'(BITS-1)) ? 1'b1 : 1'b0;
   assign last_bit  = (tx_bitcount == '0) ? 1'b1 : 1'b0;
   // Pop the entry from the FIFO at bit 1.
-  //    This let the module pop the entry correctly when CPHA == 1
-  //    If CPHA is set, there is no clock posedge after bitcnt is 0.
-  //    So TX Async FIFO pop signal cannot be latched inside FIFO.
-  //    It is safe to pop between bitcnt 6 to 1. If pop signal is asserted
-  //    when bitcnt 7 it can pop twice if CPHA is 1.
+  //    This let the module pop the entry correctly when CPHA == 1 If CPHA is set, there is no clock
+  //    posedge after bitcnt is 0 right before CSb is de-asserted.  So TX Async FIFO pop signal
+  //    cannot be latched inside FIFO.  It is safe to pop between bitcnt 6 to 1. If pop signal is
+  //    asserted when bitcnt 7 it can pop twice if CPHA is 1.
   assign tx_rready_o = (tx_bitcount == BITWIDTH'(1)); // Pop at second bit transfer
   always_ff @(posedge clk_out_i or negedge rst_out_ni) begin
     if (!rst_out_ni) begin
diff --git a/hw/ip/spi_device/sw/spi_device_regs.h b/hw/ip/spi_device/sw/spi_device_regs.h
index 8f109ae..6b340d4 100644
--- a/hw/ip/spi_device/sw/spi_device_regs.h
+++ b/hw/ip/spi_device/sw/spi_device_regs.h
@@ -12,30 +12,24 @@
 
 // Interrupt State Register
 #define SPI_DEVICE_INTR_STATE(id) (SPI_DEVICE##id##_BASE_ADDR + 0x0)
-#define SPI_DEVICE_INTR_STATE_RXNE 0
+#define SPI_DEVICE_INTR_STATE_RXF 0
 #define SPI_DEVICE_INTR_STATE_RXLVL 1
-#define SPI_DEVICE_INTR_STATE_TXE 2
-#define SPI_DEVICE_INTR_STATE_TXF 3
-#define SPI_DEVICE_INTR_STATE_TXLVL 4
-#define SPI_DEVICE_INTR_STATE_RXERR 5
+#define SPI_DEVICE_INTR_STATE_TXLVL 2
+#define SPI_DEVICE_INTR_STATE_RXERR 3
 
 // Interrupt Enable Register
 #define SPI_DEVICE_INTR_ENABLE(id) (SPI_DEVICE##id##_BASE_ADDR + 0x4)
-#define SPI_DEVICE_INTR_ENABLE_RXNE 0
+#define SPI_DEVICE_INTR_ENABLE_RXF 0
 #define SPI_DEVICE_INTR_ENABLE_RXLVL 1
-#define SPI_DEVICE_INTR_ENABLE_TXE 2
-#define SPI_DEVICE_INTR_ENABLE_TXF 3
-#define SPI_DEVICE_INTR_ENABLE_TXLVL 4
-#define SPI_DEVICE_INTR_ENABLE_RXERR 5
+#define SPI_DEVICE_INTR_ENABLE_TXLVL 2
+#define SPI_DEVICE_INTR_ENABLE_RXERR 3
 
 // Interrupt Test Register
 #define SPI_DEVICE_INTR_TEST(id) (SPI_DEVICE##id##_BASE_ADDR + 0x8)
-#define SPI_DEVICE_INTR_TEST_RXNE 0
+#define SPI_DEVICE_INTR_TEST_RXF 0
 #define SPI_DEVICE_INTR_TEST_RXLVL 1
-#define SPI_DEVICE_INTR_TEST_TXE 2
-#define SPI_DEVICE_INTR_TEST_TXF 3
-#define SPI_DEVICE_INTR_TEST_TXLVL 4
-#define SPI_DEVICE_INTR_TEST_RXERR 5
+#define SPI_DEVICE_INTR_TEST_TXLVL 2
+#define SPI_DEVICE_INTR_TEST_RXERR 3
 
 // Control register
 #define SPI_DEVICE_CONTROL(id) (SPI_DEVICE##id##_BASE_ADDR + 0xc)
diff --git a/hw/top_earlgrey/doc/rv_plic.hjson b/hw/top_earlgrey/doc/rv_plic.hjson
index ed0e47d..4fea638 100644
--- a/hw/top_earlgrey/doc/rv_plic.hjson
+++ b/hw/top_earlgrey/doc/rv_plic.hjson
@@ -6,6 +6,10 @@
 // PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED WITH THE FOLLOWING COMMAND:
 // util/topgen.py -t hw/top_earlgrey/doc/top_earlgrey.hjson --plic-only -o hw/top_earlgrey/
 
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
 # RV_PLIC register template
 #
 # Parameter (given by python tool)
@@ -22,7 +26,7 @@
     { multireg: {
         name: "IP",
         desc: "Interrupt Pending",
-        count: 54,
+        count: 52,
         cname: "RV_PLIC",
         swaccess: "ro",
         hwaccess: "hwo",
@@ -34,7 +38,7 @@
     { multireg: {
         name: "LE",
         desc: "Interrupt Source mode. 0: Level, 1: Edge-triggered",
-        count: 54,
+        count: 52,
         cname: "RV_PLIC",
         swaccess: "rw",
         hwaccess: "hro",
@@ -459,27 +463,11 @@
         { bits: "1:0" }
       ],
     }
-    { name: "PRIO52",
-      desc: "Interrupt Source 52 Priority",
-      swaccess: "rw",
-      hwaccess: "hro",
-      fields: [
-        { bits: "1:0" }
-      ],
-    }
-    { name: "PRIO53",
-      desc: "Interrupt Source 53 Priority",
-      swaccess: "rw",
-      hwaccess: "hro",
-      fields: [
-        { bits: "1:0" }
-      ],
-    }
     { skipto: 256 }
     { multireg: {
         name: "IE0",
         desc: "Interrupt Enable for Target 0",
-        count: 54,
+        count: 52,
         cname: "RV_PLIC",
         swaccess: "rw",
         hwaccess: "hro",
diff --git a/hw/top_earlgrey/doc/top_earlgrey.gen.hjson b/hw/top_earlgrey/doc/top_earlgrey.gen.hjson
index a9dc310..3a2fb3b 100644
--- a/hw/top_earlgrey/doc/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/doc/top_earlgrey.gen.hjson
@@ -140,7 +140,7 @@
       interrupt_list:
       [
         {
-          name: rxne
+          name: rxf
           width: 1
         }
         {
@@ -148,14 +148,6 @@
           width: 1
         }
         {
-          name: txe
-          width: 1
-        }
-        {
-          name: txf
-          width: 1
-        }
-        {
           name: txlvl
           width: 1
         }
@@ -493,7 +485,7 @@
       width: 1
     }
     {
-      name: spi_device_rxne
+      name: spi_device_rxf
       width: 1
     }
     {
@@ -501,14 +493,6 @@
       width: 1
     }
     {
-      name: spi_device_txe
-      width: 1
-    }
-    {
-      name: spi_device_txf
-      width: 1
-    }
-    {
       name: spi_device_txlvl
       width: 1
     }
diff --git a/hw/top_earlgrey/rtl/rv_plic.sv b/hw/top_earlgrey/rtl/rv_plic.sv
index df10f6d..a2c9227 100644
--- a/hw/top_earlgrey/rtl/rv_plic.sv
+++ b/hw/top_earlgrey/rtl/rv_plic.sv
@@ -25,7 +25,7 @@
 //   MAX_PRIO: Maximum value of interrupt priority
 
 module rv_plic #(
-  parameter int N_SOURCE    = 54,
+  parameter int N_SOURCE    = 52,
   parameter int N_TARGET    = 1,
   parameter     FIND_MAX    = "SEQUENTIAL", // SEQUENTIAL | MATRIX
 
@@ -152,8 +152,6 @@
   assign prio[49] = reg2hw.prio49.q;
   assign prio[50] = reg2hw.prio50.q;
   assign prio[51] = reg2hw.prio51.q;
-  assign prio[52] = reg2hw.prio52.q;
-  assign prio[53] = reg2hw.prio53.q;
   //----------------------------------------------------------------------------
 
   //////////////////////////////////////////////////////////////////////////////
@@ -210,8 +208,6 @@
   assign ie[0][49] = reg2hw.ie01.e49.q;
   assign ie[0][50] = reg2hw.ie01.e50.q;
   assign ie[0][51] = reg2hw.ie01.e51.q;
-  assign ie[0][52] = reg2hw.ie01.e52.q;
-  assign ie[0][53] = reg2hw.ie01.e53.q;
   //----------------------------------------------------------------------------
 
   //////////////////////////////////////////////////////////////////////////////
@@ -287,8 +283,6 @@
   assign hw2reg.ip1.p49.de = 1'b1; // Always write
   assign hw2reg.ip1.p50.de = 1'b1; // Always write
   assign hw2reg.ip1.p51.de = 1'b1; // Always write
-  assign hw2reg.ip1.p52.de = 1'b1; // Always write
-  assign hw2reg.ip1.p53.de = 1'b1; // Always write
   assign hw2reg.ip0.p0.d  = ip[0];
   assign hw2reg.ip0.p1.d  = ip[1];
   assign hw2reg.ip0.p2.d  = ip[2];
@@ -341,8 +335,6 @@
   assign hw2reg.ip1.p49.d  = ip[49];
   assign hw2reg.ip1.p50.d  = ip[50];
   assign hw2reg.ip1.p51.d  = ip[51];
-  assign hw2reg.ip1.p52.d  = ip[52];
-  assign hw2reg.ip1.p53.d  = ip[53];
   //----------------------------------------------------------------------------
 
   //////////////////////////////////////////////////////////////////////////////
@@ -399,8 +391,6 @@
   assign le[49] = reg2hw.le1.le49.q;
   assign le[50] = reg2hw.le1.le50.q;
   assign le[51] = reg2hw.le1.le51.q;
-  assign le[52] = reg2hw.le1.le52.q;
-  assign le[53] = reg2hw.le1.le53.q;
   //----------------------------------------------------------------------------
 
   // Gateways
diff --git a/hw/top_earlgrey/rtl/rv_plic_reg_pkg.sv b/hw/top_earlgrey/rtl/rv_plic_reg_pkg.sv
index f704b54..4b083da 100644
--- a/hw/top_earlgrey/rtl/rv_plic_reg_pkg.sv
+++ b/hw/top_earlgrey/rtl/rv_plic_reg_pkg.sv
@@ -11,497 +11,479 @@
 
   struct packed {
     struct packed {
-      logic q; // [226]
+      logic q; // [218]
     } le0;
     struct packed {
-      logic q; // [225]
+      logic q; // [217]
     } le1;
     struct packed {
-      logic q; // [224]
+      logic q; // [216]
     } le2;
     struct packed {
-      logic q; // [223]
+      logic q; // [215]
     } le3;
     struct packed {
-      logic q; // [222]
+      logic q; // [214]
     } le4;
     struct packed {
-      logic q; // [221]
+      logic q; // [213]
     } le5;
     struct packed {
-      logic q; // [220]
+      logic q; // [212]
     } le6;
     struct packed {
-      logic q; // [219]
+      logic q; // [211]
     } le7;
     struct packed {
-      logic q; // [218]
+      logic q; // [210]
     } le8;
     struct packed {
-      logic q; // [217]
+      logic q; // [209]
     } le9;
     struct packed {
-      logic q; // [216]
+      logic q; // [208]
     } le10;
     struct packed {
-      logic q; // [215]
+      logic q; // [207]
     } le11;
     struct packed {
-      logic q; // [214]
+      logic q; // [206]
     } le12;
     struct packed {
-      logic q; // [213]
+      logic q; // [205]
     } le13;
     struct packed {
-      logic q; // [212]
+      logic q; // [204]
     } le14;
     struct packed {
-      logic q; // [211]
+      logic q; // [203]
     } le15;
     struct packed {
-      logic q; // [210]
+      logic q; // [202]
     } le16;
     struct packed {
-      logic q; // [209]
+      logic q; // [201]
     } le17;
     struct packed {
-      logic q; // [208]
+      logic q; // [200]
     } le18;
     struct packed {
-      logic q; // [207]
+      logic q; // [199]
     } le19;
     struct packed {
-      logic q; // [206]
+      logic q; // [198]
     } le20;
     struct packed {
-      logic q; // [205]
+      logic q; // [197]
     } le21;
     struct packed {
-      logic q; // [204]
+      logic q; // [196]
     } le22;
     struct packed {
-      logic q; // [203]
+      logic q; // [195]
     } le23;
     struct packed {
-      logic q; // [202]
+      logic q; // [194]
     } le24;
     struct packed {
-      logic q; // [201]
+      logic q; // [193]
     } le25;
     struct packed {
-      logic q; // [200]
+      logic q; // [192]
     } le26;
     struct packed {
-      logic q; // [199]
+      logic q; // [191]
     } le27;
     struct packed {
-      logic q; // [198]
+      logic q; // [190]
     } le28;
     struct packed {
-      logic q; // [197]
+      logic q; // [189]
     } le29;
     struct packed {
-      logic q; // [196]
+      logic q; // [188]
     } le30;
     struct packed {
-      logic q; // [195]
+      logic q; // [187]
     } le31;
   } le0;
   struct packed {
     struct packed {
-      logic q; // [194]
+      logic q; // [186]
     } le32;
     struct packed {
-      logic q; // [193]
+      logic q; // [185]
     } le33;
     struct packed {
-      logic q; // [192]
+      logic q; // [184]
     } le34;
     struct packed {
-      logic q; // [191]
+      logic q; // [183]
     } le35;
     struct packed {
-      logic q; // [190]
+      logic q; // [182]
     } le36;
     struct packed {
-      logic q; // [189]
+      logic q; // [181]
     } le37;
     struct packed {
-      logic q; // [188]
+      logic q; // [180]
     } le38;
     struct packed {
-      logic q; // [187]
+      logic q; // [179]
     } le39;
     struct packed {
-      logic q; // [186]
+      logic q; // [178]
     } le40;
     struct packed {
-      logic q; // [185]
+      logic q; // [177]
     } le41;
     struct packed {
-      logic q; // [184]
+      logic q; // [176]
     } le42;
     struct packed {
-      logic q; // [183]
+      logic q; // [175]
     } le43;
     struct packed {
-      logic q; // [182]
+      logic q; // [174]
     } le44;
     struct packed {
-      logic q; // [181]
+      logic q; // [173]
     } le45;
     struct packed {
-      logic q; // [180]
+      logic q; // [172]
     } le46;
     struct packed {
-      logic q; // [179]
+      logic q; // [171]
     } le47;
     struct packed {
-      logic q; // [178]
+      logic q; // [170]
     } le48;
     struct packed {
-      logic q; // [177]
+      logic q; // [169]
     } le49;
     struct packed {
-      logic q; // [176]
+      logic q; // [168]
     } le50;
     struct packed {
-      logic q; // [175]
+      logic q; // [167]
     } le51;
-    struct packed {
-      logic q; // [174]
-    } le52;
-    struct packed {
-      logic q; // [173]
-    } le53;
   } le1;
   struct packed {
-    logic [1:0] q; // [172:171]
+    logic [1:0] q; // [166:165]
   } prio0;
   struct packed {
-    logic [1:0] q; // [170:169]
+    logic [1:0] q; // [164:163]
   } prio1;
   struct packed {
-    logic [1:0] q; // [168:167]
+    logic [1:0] q; // [162:161]
   } prio2;
   struct packed {
-    logic [1:0] q; // [166:165]
+    logic [1:0] q; // [160:159]
   } prio3;
   struct packed {
-    logic [1:0] q; // [164:163]
+    logic [1:0] q; // [158:157]
   } prio4;
   struct packed {
-    logic [1:0] q; // [162:161]
+    logic [1:0] q; // [156:155]
   } prio5;
   struct packed {
-    logic [1:0] q; // [160:159]
+    logic [1:0] q; // [154:153]
   } prio6;
   struct packed {
-    logic [1:0] q; // [158:157]
+    logic [1:0] q; // [152:151]
   } prio7;
   struct packed {
-    logic [1:0] q; // [156:155]
+    logic [1:0] q; // [150:149]
   } prio8;
   struct packed {
-    logic [1:0] q; // [154:153]
+    logic [1:0] q; // [148:147]
   } prio9;
   struct packed {
-    logic [1:0] q; // [152:151]
+    logic [1:0] q; // [146:145]
   } prio10;
   struct packed {
-    logic [1:0] q; // [150:149]
+    logic [1:0] q; // [144:143]
   } prio11;
   struct packed {
-    logic [1:0] q; // [148:147]
+    logic [1:0] q; // [142:141]
   } prio12;
   struct packed {
-    logic [1:0] q; // [146:145]
+    logic [1:0] q; // [140:139]
   } prio13;
   struct packed {
-    logic [1:0] q; // [144:143]
+    logic [1:0] q; // [138:137]
   } prio14;
   struct packed {
-    logic [1:0] q; // [142:141]
+    logic [1:0] q; // [136:135]
   } prio15;
   struct packed {
-    logic [1:0] q; // [140:139]
+    logic [1:0] q; // [134:133]
   } prio16;
   struct packed {
-    logic [1:0] q; // [138:137]
+    logic [1:0] q; // [132:131]
   } prio17;
   struct packed {
-    logic [1:0] q; // [136:135]
+    logic [1:0] q; // [130:129]
   } prio18;
   struct packed {
-    logic [1:0] q; // [134:133]
+    logic [1:0] q; // [128:127]
   } prio19;
   struct packed {
-    logic [1:0] q; // [132:131]
+    logic [1:0] q; // [126:125]
   } prio20;
   struct packed {
-    logic [1:0] q; // [130:129]
+    logic [1:0] q; // [124:123]
   } prio21;
   struct packed {
-    logic [1:0] q; // [128:127]
+    logic [1:0] q; // [122:121]
   } prio22;
   struct packed {
-    logic [1:0] q; // [126:125]
+    logic [1:0] q; // [120:119]
   } prio23;
   struct packed {
-    logic [1:0] q; // [124:123]
+    logic [1:0] q; // [118:117]
   } prio24;
   struct packed {
-    logic [1:0] q; // [122:121]
+    logic [1:0] q; // [116:115]
   } prio25;
   struct packed {
-    logic [1:0] q; // [120:119]
+    logic [1:0] q; // [114:113]
   } prio26;
   struct packed {
-    logic [1:0] q; // [118:117]
+    logic [1:0] q; // [112:111]
   } prio27;
   struct packed {
-    logic [1:0] q; // [116:115]
+    logic [1:0] q; // [110:109]
   } prio28;
   struct packed {
-    logic [1:0] q; // [114:113]
+    logic [1:0] q; // [108:107]
   } prio29;
   struct packed {
-    logic [1:0] q; // [112:111]
+    logic [1:0] q; // [106:105]
   } prio30;
   struct packed {
-    logic [1:0] q; // [110:109]
+    logic [1:0] q; // [104:103]
   } prio31;
   struct packed {
-    logic [1:0] q; // [108:107]
+    logic [1:0] q; // [102:101]
   } prio32;
   struct packed {
-    logic [1:0] q; // [106:105]
+    logic [1:0] q; // [100:99]
   } prio33;
   struct packed {
-    logic [1:0] q; // [104:103]
+    logic [1:0] q; // [98:97]
   } prio34;
   struct packed {
-    logic [1:0] q; // [102:101]
+    logic [1:0] q; // [96:95]
   } prio35;
   struct packed {
-    logic [1:0] q; // [100:99]
+    logic [1:0] q; // [94:93]
   } prio36;
   struct packed {
-    logic [1:0] q; // [98:97]
+    logic [1:0] q; // [92:91]
   } prio37;
   struct packed {
-    logic [1:0] q; // [96:95]
+    logic [1:0] q; // [90:89]
   } prio38;
   struct packed {
-    logic [1:0] q; // [94:93]
+    logic [1:0] q; // [88:87]
   } prio39;
   struct packed {
-    logic [1:0] q; // [92:91]
+    logic [1:0] q; // [86:85]
   } prio40;
   struct packed {
-    logic [1:0] q; // [90:89]
+    logic [1:0] q; // [84:83]
   } prio41;
   struct packed {
-    logic [1:0] q; // [88:87]
+    logic [1:0] q; // [82:81]
   } prio42;
   struct packed {
-    logic [1:0] q; // [86:85]
+    logic [1:0] q; // [80:79]
   } prio43;
   struct packed {
-    logic [1:0] q; // [84:83]
+    logic [1:0] q; // [78:77]
   } prio44;
   struct packed {
-    logic [1:0] q; // [82:81]
+    logic [1:0] q; // [76:75]
   } prio45;
   struct packed {
-    logic [1:0] q; // [80:79]
+    logic [1:0] q; // [74:73]
   } prio46;
   struct packed {
-    logic [1:0] q; // [78:77]
+    logic [1:0] q; // [72:71]
   } prio47;
   struct packed {
-    logic [1:0] q; // [76:75]
+    logic [1:0] q; // [70:69]
   } prio48;
   struct packed {
-    logic [1:0] q; // [74:73]
+    logic [1:0] q; // [68:67]
   } prio49;
   struct packed {
-    logic [1:0] q; // [72:71]
+    logic [1:0] q; // [66:65]
   } prio50;
   struct packed {
-    logic [1:0] q; // [70:69]
+    logic [1:0] q; // [64:63]
   } prio51;
   struct packed {
-    logic [1:0] q; // [68:67]
-  } prio52;
-  struct packed {
-    logic [1:0] q; // [66:65]
-  } prio53;
-  struct packed {
-    struct packed {
-      logic q; // [64]
-    } e0;
-    struct packed {
-      logic q; // [63]
-    } e1;
     struct packed {
       logic q; // [62]
-    } e2;
+    } e0;
     struct packed {
       logic q; // [61]
-    } e3;
+    } e1;
     struct packed {
       logic q; // [60]
-    } e4;
+    } e2;
     struct packed {
       logic q; // [59]
-    } e5;
+    } e3;
     struct packed {
       logic q; // [58]
-    } e6;
+    } e4;
     struct packed {
       logic q; // [57]
-    } e7;
+    } e5;
     struct packed {
       logic q; // [56]
-    } e8;
+    } e6;
     struct packed {
       logic q; // [55]
-    } e9;
+    } e7;
     struct packed {
       logic q; // [54]
-    } e10;
+    } e8;
     struct packed {
       logic q; // [53]
-    } e11;
+    } e9;
     struct packed {
       logic q; // [52]
-    } e12;
+    } e10;
     struct packed {
       logic q; // [51]
-    } e13;
+    } e11;
     struct packed {
       logic q; // [50]
-    } e14;
+    } e12;
     struct packed {
       logic q; // [49]
-    } e15;
+    } e13;
     struct packed {
       logic q; // [48]
-    } e16;
+    } e14;
     struct packed {
       logic q; // [47]
-    } e17;
+    } e15;
     struct packed {
       logic q; // [46]
-    } e18;
+    } e16;
     struct packed {
       logic q; // [45]
-    } e19;
+    } e17;
     struct packed {
       logic q; // [44]
-    } e20;
+    } e18;
     struct packed {
       logic q; // [43]
-    } e21;
+    } e19;
     struct packed {
       logic q; // [42]
-    } e22;
+    } e20;
     struct packed {
       logic q; // [41]
-    } e23;
+    } e21;
     struct packed {
       logic q; // [40]
-    } e24;
+    } e22;
     struct packed {
       logic q; // [39]
-    } e25;
+    } e23;
     struct packed {
       logic q; // [38]
-    } e26;
+    } e24;
     struct packed {
       logic q; // [37]
-    } e27;
+    } e25;
     struct packed {
       logic q; // [36]
-    } e28;
+    } e26;
     struct packed {
       logic q; // [35]
-    } e29;
+    } e27;
     struct packed {
       logic q; // [34]
-    } e30;
+    } e28;
     struct packed {
       logic q; // [33]
+    } e29;
+    struct packed {
+      logic q; // [32]
+    } e30;
+    struct packed {
+      logic q; // [31]
     } e31;
   } ie00;
   struct packed {
     struct packed {
-      logic q; // [32]
+      logic q; // [30]
     } e32;
     struct packed {
-      logic q; // [31]
+      logic q; // [29]
     } e33;
     struct packed {
-      logic q; // [30]
+      logic q; // [28]
     } e34;
     struct packed {
-      logic q; // [29]
+      logic q; // [27]
     } e35;
     struct packed {
-      logic q; // [28]
+      logic q; // [26]
     } e36;
     struct packed {
-      logic q; // [27]
+      logic q; // [25]
     } e37;
     struct packed {
-      logic q; // [26]
+      logic q; // [24]
     } e38;
     struct packed {
-      logic q; // [25]
+      logic q; // [23]
     } e39;
     struct packed {
-      logic q; // [24]
+      logic q; // [22]
     } e40;
     struct packed {
-      logic q; // [23]
+      logic q; // [21]
     } e41;
     struct packed {
-      logic q; // [22]
+      logic q; // [20]
     } e42;
     struct packed {
-      logic q; // [21]
+      logic q; // [19]
     } e43;
     struct packed {
-      logic q; // [20]
+      logic q; // [18]
     } e44;
     struct packed {
-      logic q; // [19]
+      logic q; // [17]
     } e45;
     struct packed {
-      logic q; // [18]
+      logic q; // [16]
     } e46;
     struct packed {
-      logic q; // [17]
+      logic q; // [15]
     } e47;
     struct packed {
-      logic q; // [16]
+      logic q; // [14]
     } e48;
     struct packed {
-      logic q; // [15]
+      logic q; // [13]
     } e49;
     struct packed {
-      logic q; // [14]
+      logic q; // [12]
     } e50;
     struct packed {
-      logic q; // [13]
-    } e51;
-    struct packed {
-      logic q; // [12]
-    } e52;
-    struct packed {
       logic q; // [11]
-    } e53;
+    } e51;
   } ie01;
   struct packed {
     logic [1:0] q; // [10:9]
@@ -521,223 +503,215 @@
 
   struct packed {
     struct packed {
-      logic d;  // [113]
-      logic de; // [112]
-    } p0;
-    struct packed {
-      logic d;  // [111]
-      logic de; // [110]
-    } p1;
-    struct packed {
       logic d;  // [109]
       logic de; // [108]
-    } p2;
+    } p0;
     struct packed {
       logic d;  // [107]
       logic de; // [106]
-    } p3;
+    } p1;
     struct packed {
       logic d;  // [105]
       logic de; // [104]
-    } p4;
+    } p2;
     struct packed {
       logic d;  // [103]
       logic de; // [102]
-    } p5;
+    } p3;
     struct packed {
       logic d;  // [101]
       logic de; // [100]
-    } p6;
+    } p4;
     struct packed {
       logic d;  // [99]
       logic de; // [98]
-    } p7;
+    } p5;
     struct packed {
       logic d;  // [97]
       logic de; // [96]
-    } p8;
+    } p6;
     struct packed {
       logic d;  // [95]
       logic de; // [94]
-    } p9;
+    } p7;
     struct packed {
       logic d;  // [93]
       logic de; // [92]
-    } p10;
+    } p8;
     struct packed {
       logic d;  // [91]
       logic de; // [90]
-    } p11;
+    } p9;
     struct packed {
       logic d;  // [89]
       logic de; // [88]
-    } p12;
+    } p10;
     struct packed {
       logic d;  // [87]
       logic de; // [86]
-    } p13;
+    } p11;
     struct packed {
       logic d;  // [85]
       logic de; // [84]
-    } p14;
+    } p12;
     struct packed {
       logic d;  // [83]
       logic de; // [82]
-    } p15;
+    } p13;
     struct packed {
       logic d;  // [81]
       logic de; // [80]
-    } p16;
+    } p14;
     struct packed {
       logic d;  // [79]
       logic de; // [78]
-    } p17;
+    } p15;
     struct packed {
       logic d;  // [77]
       logic de; // [76]
-    } p18;
+    } p16;
     struct packed {
       logic d;  // [75]
       logic de; // [74]
-    } p19;
+    } p17;
     struct packed {
       logic d;  // [73]
       logic de; // [72]
-    } p20;
+    } p18;
     struct packed {
       logic d;  // [71]
       logic de; // [70]
-    } p21;
+    } p19;
     struct packed {
       logic d;  // [69]
       logic de; // [68]
-    } p22;
+    } p20;
     struct packed {
       logic d;  // [67]
       logic de; // [66]
-    } p23;
+    } p21;
     struct packed {
       logic d;  // [65]
       logic de; // [64]
-    } p24;
+    } p22;
     struct packed {
       logic d;  // [63]
       logic de; // [62]
-    } p25;
+    } p23;
     struct packed {
       logic d;  // [61]
       logic de; // [60]
-    } p26;
+    } p24;
     struct packed {
       logic d;  // [59]
       logic de; // [58]
-    } p27;
+    } p25;
     struct packed {
       logic d;  // [57]
       logic de; // [56]
-    } p28;
+    } p26;
     struct packed {
       logic d;  // [55]
       logic de; // [54]
-    } p29;
+    } p27;
     struct packed {
       logic d;  // [53]
       logic de; // [52]
-    } p30;
+    } p28;
     struct packed {
       logic d;  // [51]
       logic de; // [50]
+    } p29;
+    struct packed {
+      logic d;  // [49]
+      logic de; // [48]
+    } p30;
+    struct packed {
+      logic d;  // [47]
+      logic de; // [46]
     } p31;
   } ip0;
   struct packed {
     struct packed {
-      logic d;  // [49]
-      logic de; // [48]
-    } p32;
-    struct packed {
-      logic d;  // [47]
-      logic de; // [46]
-    } p33;
-    struct packed {
       logic d;  // [45]
       logic de; // [44]
-    } p34;
+    } p32;
     struct packed {
       logic d;  // [43]
       logic de; // [42]
-    } p35;
+    } p33;
     struct packed {
       logic d;  // [41]
       logic de; // [40]
-    } p36;
+    } p34;
     struct packed {
       logic d;  // [39]
       logic de; // [38]
-    } p37;
+    } p35;
     struct packed {
       logic d;  // [37]
       logic de; // [36]
-    } p38;
+    } p36;
     struct packed {
       logic d;  // [35]
       logic de; // [34]
-    } p39;
+    } p37;
     struct packed {
       logic d;  // [33]
       logic de; // [32]
-    } p40;
+    } p38;
     struct packed {
       logic d;  // [31]
       logic de; // [30]
-    } p41;
+    } p39;
     struct packed {
       logic d;  // [29]
       logic de; // [28]
-    } p42;
+    } p40;
     struct packed {
       logic d;  // [27]
       logic de; // [26]
-    } p43;
+    } p41;
     struct packed {
       logic d;  // [25]
       logic de; // [24]
-    } p44;
+    } p42;
     struct packed {
       logic d;  // [23]
       logic de; // [22]
-    } p45;
+    } p43;
     struct packed {
       logic d;  // [21]
       logic de; // [20]
-    } p46;
+    } p44;
     struct packed {
       logic d;  // [19]
       logic de; // [18]
-    } p47;
+    } p45;
     struct packed {
       logic d;  // [17]
       logic de; // [16]
-    } p48;
+    } p46;
     struct packed {
       logic d;  // [15]
       logic de; // [14]
-    } p49;
+    } p47;
     struct packed {
       logic d;  // [13]
       logic de; // [12]
-    } p50;
+    } p48;
     struct packed {
       logic d;  // [11]
       logic de; // [10]
-    } p51;
+    } p49;
     struct packed {
       logic d;  // [9]
       logic de; // [8]
-    } p52;
+    } p50;
     struct packed {
       logic d;  // [7]
       logic de; // [6]
-    } p53;
+    } p51;
   } ip1;
   struct packed {
     logic [5:0] d; // [5:0]
@@ -801,8 +775,6 @@
   parameter RV_PLIC_PRIO49_OFFSET = 9'h d4;
   parameter RV_PLIC_PRIO50_OFFSET = 9'h d8;
   parameter RV_PLIC_PRIO51_OFFSET = 9'h dc;
-  parameter RV_PLIC_PRIO52_OFFSET = 9'h e0;
-  parameter RV_PLIC_PRIO53_OFFSET = 9'h e4;
   parameter RV_PLIC_IE00_OFFSET = 9'h 100;
   parameter RV_PLIC_IE01_OFFSET = 9'h 104;
   parameter RV_PLIC_THRESHOLD0_OFFSET = 9'h 108;
diff --git a/hw/top_earlgrey/rtl/rv_plic_reg_top.sv b/hw/top_earlgrey/rtl/rv_plic_reg_top.sv
index 7f56d4f..f64f327 100644
--- a/hw/top_earlgrey/rtl/rv_plic_reg_top.sv
+++ b/hw/top_earlgrey/rtl/rv_plic_reg_top.sv
@@ -180,8 +180,6 @@
   logic ip1_p49_qs;
   logic ip1_p50_qs;
   logic ip1_p51_qs;
-  logic ip1_p52_qs;
-  logic ip1_p53_qs;
   logic le0_le0_qs;
   logic le0_le0_wd;
   logic le0_le0_we;
@@ -338,12 +336,6 @@
   logic le1_le51_qs;
   logic le1_le51_wd;
   logic le1_le51_we;
-  logic le1_le52_qs;
-  logic le1_le52_wd;
-  logic le1_le52_we;
-  logic le1_le53_qs;
-  logic le1_le53_wd;
-  logic le1_le53_we;
   logic [1:0] prio0_qs;
   logic [1:0] prio0_wd;
   logic prio0_we;
@@ -500,12 +492,6 @@
   logic [1:0] prio51_qs;
   logic [1:0] prio51_wd;
   logic prio51_we;
-  logic [1:0] prio52_qs;
-  logic [1:0] prio52_wd;
-  logic prio52_we;
-  logic [1:0] prio53_qs;
-  logic [1:0] prio53_wd;
-  logic prio53_we;
   logic ie00_e0_qs;
   logic ie00_e0_wd;
   logic ie00_e0_we;
@@ -662,12 +648,6 @@
   logic ie01_e51_qs;
   logic ie01_e51_wd;
   logic ie01_e51_we;
-  logic ie01_e52_qs;
-  logic ie01_e52_wd;
-  logic ie01_e52_we;
-  logic ie01_e53_qs;
-  logic ie01_e53_wd;
-  logic ie01_e53_we;
   logic [1:0] threshold0_qs;
   logic [1:0] threshold0_wd;
   logic threshold0_we;
@@ -1984,56 +1964,6 @@
   );
 
 
-  //   F[p52]: 20:20
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("RO"),
-    .RESVAL  (1'h0)
-  ) u_ip1_p52 (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    .we     (1'b0),
-    .wd     ('0  ),
-
-    // from internal hardware
-    .de     (hw2reg.ip1.p52.de),
-    .d      (hw2reg.ip1.p52.d ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (),
-
-    // to register interface (read)
-    .qs     (ip1_p52_qs)
-  );
-
-
-  //   F[p53]: 21:21
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("RO"),
-    .RESVAL  (1'h0)
-  ) u_ip1_p53 (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    .we     (1'b0),
-    .wd     ('0  ),
-
-    // from internal hardware
-    .de     (hw2reg.ip1.p53.de),
-    .d      (hw2reg.ip1.p53.d ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (),
-
-    // to register interface (read)
-    .qs     (ip1_p53_qs)
-  );
-
-
   // R[le0]: V(False)
 
   //   F[le0]: 0:0
@@ -3390,58 +3320,6 @@
   );
 
 
-  //   F[le52]: 20:20
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("RW"),
-    .RESVAL  (1'h0)
-  ) u_le1_le52 (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (le1_le52_we),
-    .wd     (le1_le52_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0  ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.le1.le52.q ),
-
-    // to register interface (read)
-    .qs     (le1_le52_qs)
-  );
-
-
-  //   F[le53]: 21:21
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("RW"),
-    .RESVAL  (1'h0)
-  ) u_le1_le53 (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (le1_le53_we),
-    .wd     (le1_le53_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0  ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.le1.le53.q ),
-
-    // to register interface (read)
-    .qs     (le1_le53_qs)
-  );
-
-
   // R[prio0]: V(False)
 
   prim_subreg #(
@@ -4846,60 +4724,6 @@
   );
 
 
-  // R[prio52]: V(False)
-
-  prim_subreg #(
-    .DW      (2),
-    .SWACCESS("RW"),
-    .RESVAL  (2'h0)
-  ) u_prio52 (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (prio52_we),
-    .wd     (prio52_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0  ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.prio52.q ),
-
-    // to register interface (read)
-    .qs     (prio52_qs)
-  );
-
-
-  // R[prio53]: V(False)
-
-  prim_subreg #(
-    .DW      (2),
-    .SWACCESS("RW"),
-    .RESVAL  (2'h0)
-  ) u_prio53 (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (prio53_we),
-    .wd     (prio53_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0  ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.prio53.q ),
-
-    // to register interface (read)
-    .qs     (prio53_qs)
-  );
-
-
   // R[ie00]: V(False)
 
   //   F[e0]: 0:0
@@ -6256,58 +6080,6 @@
   );
 
 
-  //   F[e52]: 20:20
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("RW"),
-    .RESVAL  (1'h0)
-  ) u_ie01_e52 (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (ie01_e52_we),
-    .wd     (ie01_e52_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0  ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.ie01.e52.q ),
-
-    // to register interface (read)
-    .qs     (ie01_e52_qs)
-  );
-
-
-  //   F[e53]: 21:21
-  prim_subreg #(
-    .DW      (1),
-    .SWACCESS("RW"),
-    .RESVAL  (1'h0)
-  ) u_ie01_e53 (
-    .clk_i   (clk_i    ),
-    .rst_ni  (rst_ni  ),
-
-    // from register interface
-    .we     (ie01_e53_we),
-    .wd     (ie01_e53_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0  ),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.ie01.e53.q ),
-
-    // to register interface (read)
-    .qs     (ie01_e53_qs)
-  );
-
-
   // R[threshold0]: V(False)
 
   prim_subreg #(
@@ -6379,7 +6151,7 @@
 
 
 
-  logic [62:0] addr_hit;
+  logic [60:0] addr_hit;
   always_comb begin
     addr_hit = '0;
     addr_hit[0] = (reg_addr == RV_PLIC_IP0_OFFSET);
@@ -6438,13 +6210,11 @@
     addr_hit[53] = (reg_addr == RV_PLIC_PRIO49_OFFSET);
     addr_hit[54] = (reg_addr == RV_PLIC_PRIO50_OFFSET);
     addr_hit[55] = (reg_addr == RV_PLIC_PRIO51_OFFSET);
-    addr_hit[56] = (reg_addr == RV_PLIC_PRIO52_OFFSET);
-    addr_hit[57] = (reg_addr == RV_PLIC_PRIO53_OFFSET);
-    addr_hit[58] = (reg_addr == RV_PLIC_IE00_OFFSET);
-    addr_hit[59] = (reg_addr == RV_PLIC_IE01_OFFSET);
-    addr_hit[60] = (reg_addr == RV_PLIC_THRESHOLD0_OFFSET);
-    addr_hit[61] = (reg_addr == RV_PLIC_CC0_OFFSET);
-    addr_hit[62] = (reg_addr == RV_PLIC_MSIP0_OFFSET);
+    addr_hit[56] = (reg_addr == RV_PLIC_IE00_OFFSET);
+    addr_hit[57] = (reg_addr == RV_PLIC_IE01_OFFSET);
+    addr_hit[58] = (reg_addr == RV_PLIC_THRESHOLD0_OFFSET);
+    addr_hit[59] = (reg_addr == RV_PLIC_CC0_OFFSET);
+    addr_hit[60] = (reg_addr == RV_PLIC_MSIP0_OFFSET);
   end
 
   always_ff @(posedge clk_i or negedge rst_ni) begin
@@ -6509,8 +6279,6 @@
 
 
 
-
-
   assign le0_le0_we = addr_hit[2] && reg_we;
   assign le0_le0_wd = reg_wdata[0];
 
@@ -6667,12 +6435,6 @@
   assign le1_le51_we = addr_hit[3] && reg_we;
   assign le1_le51_wd = reg_wdata[19];
 
-  assign le1_le52_we = addr_hit[3] && reg_we;
-  assign le1_le52_wd = reg_wdata[20];
-
-  assign le1_le53_we = addr_hit[3] && reg_we;
-  assign le1_le53_wd = reg_wdata[21];
-
   assign prio0_we = addr_hit[4] && reg_we;
   assign prio0_wd = reg_wdata[1:0];
 
@@ -6829,182 +6591,170 @@
   assign prio51_we = addr_hit[55] && reg_we;
   assign prio51_wd = reg_wdata[1:0];
 
-  assign prio52_we = addr_hit[56] && reg_we;
-  assign prio52_wd = reg_wdata[1:0];
-
-  assign prio53_we = addr_hit[57] && reg_we;
-  assign prio53_wd = reg_wdata[1:0];
-
-  assign ie00_e0_we = addr_hit[58] && reg_we;
+  assign ie00_e0_we = addr_hit[56] && reg_we;
   assign ie00_e0_wd = reg_wdata[0];
 
-  assign ie00_e1_we = addr_hit[58] && reg_we;
+  assign ie00_e1_we = addr_hit[56] && reg_we;
   assign ie00_e1_wd = reg_wdata[1];
 
-  assign ie00_e2_we = addr_hit[58] && reg_we;
+  assign ie00_e2_we = addr_hit[56] && reg_we;
   assign ie00_e2_wd = reg_wdata[2];
 
-  assign ie00_e3_we = addr_hit[58] && reg_we;
+  assign ie00_e3_we = addr_hit[56] && reg_we;
   assign ie00_e3_wd = reg_wdata[3];
 
-  assign ie00_e4_we = addr_hit[58] && reg_we;
+  assign ie00_e4_we = addr_hit[56] && reg_we;
   assign ie00_e4_wd = reg_wdata[4];
 
-  assign ie00_e5_we = addr_hit[58] && reg_we;
+  assign ie00_e5_we = addr_hit[56] && reg_we;
   assign ie00_e5_wd = reg_wdata[5];
 
-  assign ie00_e6_we = addr_hit[58] && reg_we;
+  assign ie00_e6_we = addr_hit[56] && reg_we;
   assign ie00_e6_wd = reg_wdata[6];
 
-  assign ie00_e7_we = addr_hit[58] && reg_we;
+  assign ie00_e7_we = addr_hit[56] && reg_we;
   assign ie00_e7_wd = reg_wdata[7];
 
-  assign ie00_e8_we = addr_hit[58] && reg_we;
+  assign ie00_e8_we = addr_hit[56] && reg_we;
   assign ie00_e8_wd = reg_wdata[8];
 
-  assign ie00_e9_we = addr_hit[58] && reg_we;
+  assign ie00_e9_we = addr_hit[56] && reg_we;
   assign ie00_e9_wd = reg_wdata[9];
 
-  assign ie00_e10_we = addr_hit[58] && reg_we;
+  assign ie00_e10_we = addr_hit[56] && reg_we;
   assign ie00_e10_wd = reg_wdata[10];
 
-  assign ie00_e11_we = addr_hit[58] && reg_we;
+  assign ie00_e11_we = addr_hit[56] && reg_we;
   assign ie00_e11_wd = reg_wdata[11];
 
-  assign ie00_e12_we = addr_hit[58] && reg_we;
+  assign ie00_e12_we = addr_hit[56] && reg_we;
   assign ie00_e12_wd = reg_wdata[12];
 
-  assign ie00_e13_we = addr_hit[58] && reg_we;
+  assign ie00_e13_we = addr_hit[56] && reg_we;
   assign ie00_e13_wd = reg_wdata[13];
 
-  assign ie00_e14_we = addr_hit[58] && reg_we;
+  assign ie00_e14_we = addr_hit[56] && reg_we;
   assign ie00_e14_wd = reg_wdata[14];
 
-  assign ie00_e15_we = addr_hit[58] && reg_we;
+  assign ie00_e15_we = addr_hit[56] && reg_we;
   assign ie00_e15_wd = reg_wdata[15];
 
-  assign ie00_e16_we = addr_hit[58] && reg_we;
+  assign ie00_e16_we = addr_hit[56] && reg_we;
   assign ie00_e16_wd = reg_wdata[16];
 
-  assign ie00_e17_we = addr_hit[58] && reg_we;
+  assign ie00_e17_we = addr_hit[56] && reg_we;
   assign ie00_e17_wd = reg_wdata[17];
 
-  assign ie00_e18_we = addr_hit[58] && reg_we;
+  assign ie00_e18_we = addr_hit[56] && reg_we;
   assign ie00_e18_wd = reg_wdata[18];
 
-  assign ie00_e19_we = addr_hit[58] && reg_we;
+  assign ie00_e19_we = addr_hit[56] && reg_we;
   assign ie00_e19_wd = reg_wdata[19];
 
-  assign ie00_e20_we = addr_hit[58] && reg_we;
+  assign ie00_e20_we = addr_hit[56] && reg_we;
   assign ie00_e20_wd = reg_wdata[20];
 
-  assign ie00_e21_we = addr_hit[58] && reg_we;
+  assign ie00_e21_we = addr_hit[56] && reg_we;
   assign ie00_e21_wd = reg_wdata[21];
 
-  assign ie00_e22_we = addr_hit[58] && reg_we;
+  assign ie00_e22_we = addr_hit[56] && reg_we;
   assign ie00_e22_wd = reg_wdata[22];
 
-  assign ie00_e23_we = addr_hit[58] && reg_we;
+  assign ie00_e23_we = addr_hit[56] && reg_we;
   assign ie00_e23_wd = reg_wdata[23];
 
-  assign ie00_e24_we = addr_hit[58] && reg_we;
+  assign ie00_e24_we = addr_hit[56] && reg_we;
   assign ie00_e24_wd = reg_wdata[24];
 
-  assign ie00_e25_we = addr_hit[58] && reg_we;
+  assign ie00_e25_we = addr_hit[56] && reg_we;
   assign ie00_e25_wd = reg_wdata[25];
 
-  assign ie00_e26_we = addr_hit[58] && reg_we;
+  assign ie00_e26_we = addr_hit[56] && reg_we;
   assign ie00_e26_wd = reg_wdata[26];
 
-  assign ie00_e27_we = addr_hit[58] && reg_we;
+  assign ie00_e27_we = addr_hit[56] && reg_we;
   assign ie00_e27_wd = reg_wdata[27];
 
-  assign ie00_e28_we = addr_hit[58] && reg_we;
+  assign ie00_e28_we = addr_hit[56] && reg_we;
   assign ie00_e28_wd = reg_wdata[28];
 
-  assign ie00_e29_we = addr_hit[58] && reg_we;
+  assign ie00_e29_we = addr_hit[56] && reg_we;
   assign ie00_e29_wd = reg_wdata[29];
 
-  assign ie00_e30_we = addr_hit[58] && reg_we;
+  assign ie00_e30_we = addr_hit[56] && reg_we;
   assign ie00_e30_wd = reg_wdata[30];
 
-  assign ie00_e31_we = addr_hit[58] && reg_we;
+  assign ie00_e31_we = addr_hit[56] && reg_we;
   assign ie00_e31_wd = reg_wdata[31];
 
-  assign ie01_e32_we = addr_hit[59] && reg_we;
+  assign ie01_e32_we = addr_hit[57] && reg_we;
   assign ie01_e32_wd = reg_wdata[0];
 
-  assign ie01_e33_we = addr_hit[59] && reg_we;
+  assign ie01_e33_we = addr_hit[57] && reg_we;
   assign ie01_e33_wd = reg_wdata[1];
 
-  assign ie01_e34_we = addr_hit[59] && reg_we;
+  assign ie01_e34_we = addr_hit[57] && reg_we;
   assign ie01_e34_wd = reg_wdata[2];
 
-  assign ie01_e35_we = addr_hit[59] && reg_we;
+  assign ie01_e35_we = addr_hit[57] && reg_we;
   assign ie01_e35_wd = reg_wdata[3];
 
-  assign ie01_e36_we = addr_hit[59] && reg_we;
+  assign ie01_e36_we = addr_hit[57] && reg_we;
   assign ie01_e36_wd = reg_wdata[4];
 
-  assign ie01_e37_we = addr_hit[59] && reg_we;
+  assign ie01_e37_we = addr_hit[57] && reg_we;
   assign ie01_e37_wd = reg_wdata[5];
 
-  assign ie01_e38_we = addr_hit[59] && reg_we;
+  assign ie01_e38_we = addr_hit[57] && reg_we;
   assign ie01_e38_wd = reg_wdata[6];
 
-  assign ie01_e39_we = addr_hit[59] && reg_we;
+  assign ie01_e39_we = addr_hit[57] && reg_we;
   assign ie01_e39_wd = reg_wdata[7];
 
-  assign ie01_e40_we = addr_hit[59] && reg_we;
+  assign ie01_e40_we = addr_hit[57] && reg_we;
   assign ie01_e40_wd = reg_wdata[8];
 
-  assign ie01_e41_we = addr_hit[59] && reg_we;
+  assign ie01_e41_we = addr_hit[57] && reg_we;
   assign ie01_e41_wd = reg_wdata[9];
 
-  assign ie01_e42_we = addr_hit[59] && reg_we;
+  assign ie01_e42_we = addr_hit[57] && reg_we;
   assign ie01_e42_wd = reg_wdata[10];
 
-  assign ie01_e43_we = addr_hit[59] && reg_we;
+  assign ie01_e43_we = addr_hit[57] && reg_we;
   assign ie01_e43_wd = reg_wdata[11];
 
-  assign ie01_e44_we = addr_hit[59] && reg_we;
+  assign ie01_e44_we = addr_hit[57] && reg_we;
   assign ie01_e44_wd = reg_wdata[12];
 
-  assign ie01_e45_we = addr_hit[59] && reg_we;
+  assign ie01_e45_we = addr_hit[57] && reg_we;
   assign ie01_e45_wd = reg_wdata[13];
 
-  assign ie01_e46_we = addr_hit[59] && reg_we;
+  assign ie01_e46_we = addr_hit[57] && reg_we;
   assign ie01_e46_wd = reg_wdata[14];
 
-  assign ie01_e47_we = addr_hit[59] && reg_we;
+  assign ie01_e47_we = addr_hit[57] && reg_we;
   assign ie01_e47_wd = reg_wdata[15];
 
-  assign ie01_e48_we = addr_hit[59] && reg_we;
+  assign ie01_e48_we = addr_hit[57] && reg_we;
   assign ie01_e48_wd = reg_wdata[16];
 
-  assign ie01_e49_we = addr_hit[59] && reg_we;
+  assign ie01_e49_we = addr_hit[57] && reg_we;
   assign ie01_e49_wd = reg_wdata[17];
 
-  assign ie01_e50_we = addr_hit[59] && reg_we;
+  assign ie01_e50_we = addr_hit[57] && reg_we;
   assign ie01_e50_wd = reg_wdata[18];
 
-  assign ie01_e51_we = addr_hit[59] && reg_we;
+  assign ie01_e51_we = addr_hit[57] && reg_we;
   assign ie01_e51_wd = reg_wdata[19];
 
-  assign ie01_e52_we = addr_hit[59] && reg_we;
-  assign ie01_e52_wd = reg_wdata[20];
-
-  assign ie01_e53_we = addr_hit[59] && reg_we;
-  assign ie01_e53_wd = reg_wdata[21];
-
-  assign threshold0_we = addr_hit[60] && reg_we;
+  assign threshold0_we = addr_hit[58] && reg_we;
   assign threshold0_wd = reg_wdata[1:0];
 
-  assign cc0_we = addr_hit[61] && reg_we;
+  assign cc0_we = addr_hit[59] && reg_we;
   assign cc0_wd = reg_wdata[5:0];
-  assign cc0_re = addr_hit[61] && reg_re;
+  assign cc0_re = addr_hit[59] && reg_re;
 
-  assign msip0_we = addr_hit[62] && reg_we;
+  assign msip0_we = addr_hit[60] && reg_we;
   assign msip0_wd = reg_wdata[0];
 
   // Read data return
@@ -7068,8 +6818,6 @@
         reg_rdata_next[17] = ip1_p49_qs;
         reg_rdata_next[18] = ip1_p50_qs;
         reg_rdata_next[19] = ip1_p51_qs;
-        reg_rdata_next[20] = ip1_p52_qs;
-        reg_rdata_next[21] = ip1_p53_qs;
       end
 
       addr_hit[2]: begin
@@ -7128,8 +6876,6 @@
         reg_rdata_next[17] = le1_le49_qs;
         reg_rdata_next[18] = le1_le50_qs;
         reg_rdata_next[19] = le1_le51_qs;
-        reg_rdata_next[20] = le1_le52_qs;
-        reg_rdata_next[21] = le1_le53_qs;
       end
 
       addr_hit[4]: begin
@@ -7341,14 +7087,6 @@
       end
 
       addr_hit[56]: begin
-        reg_rdata_next[1:0] = prio52_qs;
-      end
-
-      addr_hit[57]: begin
-        reg_rdata_next[1:0] = prio53_qs;
-      end
-
-      addr_hit[58]: begin
         reg_rdata_next[0] = ie00_e0_qs;
         reg_rdata_next[1] = ie00_e1_qs;
         reg_rdata_next[2] = ie00_e2_qs;
@@ -7383,7 +7121,7 @@
         reg_rdata_next[31] = ie00_e31_qs;
       end
 
-      addr_hit[59]: begin
+      addr_hit[57]: begin
         reg_rdata_next[0] = ie01_e32_qs;
         reg_rdata_next[1] = ie01_e33_qs;
         reg_rdata_next[2] = ie01_e34_qs;
@@ -7404,19 +7142,17 @@
         reg_rdata_next[17] = ie01_e49_qs;
         reg_rdata_next[18] = ie01_e50_qs;
         reg_rdata_next[19] = ie01_e51_qs;
-        reg_rdata_next[20] = ie01_e52_qs;
-        reg_rdata_next[21] = ie01_e53_qs;
       end
 
-      addr_hit[60]: begin
+      addr_hit[58]: begin
         reg_rdata_next[1:0] = threshold0_qs;
       end
 
-      addr_hit[61]: begin
+      addr_hit[59]: begin
         reg_rdata_next[5:0] = cc0_qs;
       end
 
-      addr_hit[62]: begin
+      addr_hit[60]: begin
         reg_rdata_next[0] = msip0_qs;
       end
 
diff --git a/hw/top_earlgrey/rtl/top_earlgrey.sv b/hw/top_earlgrey/rtl/top_earlgrey.sv
index 8128ba7..b67b3b3 100644
--- a/hw/top_earlgrey/rtl/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/top_earlgrey.sv
@@ -74,7 +74,7 @@
   tl_d2h_t tl_ram_main_d_d2h;
   tl_h2d_t tl_eflash_d_h2d;
   tl_d2h_t tl_eflash_d_d2h;
-  logic [53:0]  intr_vector;
+  logic [51:0]  intr_vector;
   // Interrupt source list
   logic intr_uart_tx_watermark;
   logic intr_uart_rx_watermark;
@@ -85,10 +85,8 @@
   logic intr_uart_rx_timeout;
   logic intr_uart_rx_parity_err;
   logic [31:0] intr_gpio_gpio;
-  logic intr_spi_device_rxne;
+  logic intr_spi_device_rxf;
   logic intr_spi_device_rxlvl;
-  logic intr_spi_device_txe;
-  logic intr_spi_device_txf;
   logic intr_spi_device_txlvl;
   logic intr_spi_device_rxerr;
   logic intr_flash_ctrl_prog_empty;
@@ -360,10 +358,8 @@
       .cio_mosi_i (cio_spi_device_mosi_p2d_i),
       .cio_miso_o    (cio_spi_device_miso_d2p_o),
       .cio_miso_en_o (cio_spi_device_miso_en_d2p_o),
-      .intr_rxne_o (intr_spi_device_rxne),
+      .intr_rxf_o (intr_spi_device_rxf),
       .intr_rxlvl_o (intr_spi_device_rxlvl),
-      .intr_txe_o (intr_spi_device_txe),
-      .intr_txf_o (intr_spi_device_txf),
       .intr_txlvl_o (intr_spi_device_txlvl),
       .intr_rxerr_o (intr_spi_device_rxerr),
       .clk_i(clk_i),
@@ -427,10 +423,8 @@
       intr_flash_ctrl_prog_empty,
       intr_spi_device_rxerr,
       intr_spi_device_txlvl,
-      intr_spi_device_txf,
-      intr_spi_device_txe,
       intr_spi_device_rxlvl,
-      intr_spi_device_rxne,
+      intr_spi_device_rxf,
       intr_uart_rx_parity_err,
       intr_uart_rx_timeout,
       intr_uart_rx_break_err,