[spi_host] Address small regression failures

- fixes #9932

- move tx window usage from tlul_adapter_reg to tlul_adapter_sram
  - the former does not support byte writes completely

- add a couple of exclusions to error status that can be triggered
  by errornous writes to the tx_fifo. Since window regions canot be
  excluded, exclude the status instead.

Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/ip/spi_host/data/spi_host.hjson b/hw/ip/spi_host/data/spi_host.hjson
index 522ac5b..211dfa4 100644
--- a/hw/ip/spi_host/data/spi_host.hjson
+++ b/hw/ip/spi_host/data/spi_host.hjson
@@ -485,6 +485,8 @@
           desc: '''Indicates that TLUL attempted to write to TXDATA with no bytes enabled. Such
                    'zero byte' writes are not supported.''',
           resval: "0x0"
+          tags: [// Updated by the hw. Exclude from init and write-checks.
+                 "excl:CsrAllTests:CsrExclCheck"]
         },
         { bits: "4",
           name: "CSIDINVAL",
@@ -508,6 +510,8 @@
           name: "OVERFLOW",
           desc: '''Indicates that firmware has overflowed the TX FIFO'''
           resval: "0x0"
+          tags: [// Updated by the hw. Exclude from init and write-checks.
+                 "excl:CsrAllTests:CsrExclCheck"]
         },
         { bits: "0",
           name: "CMDBUSY",
diff --git a/hw/ip/spi_host/rtl/spi_host_window.sv b/hw/ip/spi_host/rtl/spi_host_window.sv
index 6cf0d61..cc3dfb3 100644
--- a/hw/ip/spi_host/rtl/spi_host_window.sv
+++ b/hw/ip/spi_host/rtl/spi_host_window.sv
@@ -21,8 +21,9 @@
 
   localparam int AW = spi_host_reg_pkg::BlockAw;
   localparam int DW = 32;
+  localparam int ByteMaskW = DW / 8;
 
-  logic rx_we, tx_re;
+  logic         rx_we;
 
   // Only support reads from the data RX fifo window
   logic  rx_access_error;
@@ -46,26 +47,41 @@
     .busy_i  ('0)
   );
 
-  // Only support writes to the data TX fifo window
-  logic  tx_access_error;
-  assign tx_access_error = tx_re;
+  // translate bitmask to byte mask
+  logic [DW-1:0] bit_mask;
+  for (genvar i = 0; i < ByteMaskW; i++) begin : gen_byte_mask
+     assign tx_be_o[i] = |bit_mask[i*8 +: 8];
 
-  tlul_adapter_reg #(
-    .RegAw (AW),
-    .RegDw (DW)
+    // all the bits of particular byte must be the same
+    `ASSERT(BitMaskCheck_A, (|bit_mask[i*8 +: 8] == 1'b0) ||
+                            (&bit_mask[i*8 +: 8] == 1'b1))
+  end
+
+  // Only support writes to the data TX fifo window
+  tlul_adapter_sram #(
+    .SramAw(AW),
+    .SramDw(DW),
+    .Outstanding(1),
+    .ByteAccess(1),
+    .ErrOnWrite(0),
+    .ErrOnRead(1)
   ) u_adapter_tx (
     .clk_i,
     .rst_ni,
-    .tl_i    (tx_win_i),
-    .tl_o    (tx_win_o),
-    .we_o    (tx_valid_o),
-    .re_o    (tx_re),
-    .addr_o  (),
-    .wdata_o (tx_data_o),
-    .be_o    (tx_be_o),
-    .rdata_i ({DW{1'b0}}),
-    .error_i (tx_access_error),
-    .busy_i  ('0)
+    .tl_i(tx_win_i),
+    .tl_o(tx_win_o),
+    .en_ifetch_i(prim_mubi_pkg::MuBi4False),
+    .req_o(tx_valid_o),
+    .req_type_o(),
+    .gnt_i(1'b1),
+    .we_o(),
+    .addr_o(),
+    .wdata_o(tx_data_o),
+    .wmask_o(bit_mask),
+    .intg_error_o(),
+    .rdata_i('0),
+    .rvalid_i('0),
+    .rerror_i('0)
   );
 
 endmodule : spi_host_window