diff --git a/hw/dv/sv/scoreboard/scoreboard_queue.sv b/hw/dv/sv/scoreboard/scoreboard_queue.sv
index c0305a1..4baeda3 100644
--- a/hw/dv/sv/scoreboard/scoreboard_queue.sv
+++ b/hw/dv/sv/scoreboard/scoreboard_queue.sv
@@ -39,7 +39,7 @@
     end
     expected_items.push_back(tr);
     expected_items_timestamp.push_back(current_cycle_cnt);
-    if (actual_items.size() != 0) check_item();
+    if (actual_items.size() != 0) void'(check_item());
     token.put(1);
   endtask
 
@@ -53,7 +53,7 @@
     end
     actual_items.push_back(tr);
     actual_items_timestamp.push_back(current_cycle_cnt);
-    if (expected_items.size() != 0) check_item();
+    if (expected_items.size() != 0) void'(check_item());
     token.put(1);
   endtask
 
@@ -113,7 +113,7 @@
       end
       // Custom checking policy
       kCustomCheck: begin
-        custom_check();
+        void'(custom_check());
       end
       default: begin
         `uvm_error(get_full_name(), $sformatf("%0s check policy is not supported", policy.name()))
diff --git a/hw/dv/sv/tl_agent/tl_agent.sv b/hw/dv/sv/tl_agent/tl_agent.sv
index e654642..5cb37ce 100644
--- a/hw/dv/sv/tl_agent/tl_agent.sv
+++ b/hw/dv/sv/tl_agent/tl_agent.sv
@@ -31,6 +31,7 @@
         device_driver = tl_device_driver::type_id::create("device_driver", this);
       end
       seqr = tl_sequencer::type_id::create("seqr", this);
+      seqr.cfg = cfg;
     end
     mon = tl_monitor::type_id::create("mon", this);
   endfunction : build_phase
diff --git a/hw/dv/sv/tl_agent/tl_agent_cfg.sv b/hw/dv/sv/tl_agent/tl_agent_cfg.sv
index c93431c..c690fe9 100644
--- a/hw/dv/sv/tl_agent/tl_agent_cfg.sv
+++ b/hw/dv/sv/tl_agent/tl_agent_cfg.sv
@@ -16,7 +16,7 @@
   // 0: Unlimited from the master perspective, might be back-pressured by the slave
   // 1: Only single transaction at a time
   // n: Number of maximum oustanding requests
-  int unsigned max_outstanding_req = 0;
+  int unsigned max_outstanding_req = 1; // most of IPs only support 1 outstanding req
 
   // TileLink channel valid delay (host mode)
   bit use_seq_item_a_valid_delay;
diff --git a/hw/dv/sv/tl_agent/tl_host_driver.sv b/hw/dv/sv/tl_agent/tl_host_driver.sv
index b824fab..b1e1f7d 100644
--- a/hw/dv/sv/tl_agent/tl_host_driver.sv
+++ b/hw/dv/sv/tl_agent/tl_host_driver.sv
@@ -99,10 +99,6 @@
     seq_item_port.item_done();
     pending_a_req.push_back(req);
     `uvm_info(get_full_name(), $sformatf("Req sent: %0s", req.convert2string()), UVM_HIGH)
-    while((cfg.max_outstanding_req > 0) &&
-          (pending_a_req.size() >= cfg.max_outstanding_req) && !reset_asserted) begin
-      @(vif.host_cb);
-    end
   endtask : send_a_channel_request
 
   // Collect ack from D channel
diff --git a/hw/dv/sv/tl_agent/tl_monitor.sv b/hw/dv/sv/tl_agent/tl_monitor.sv
index cc8db13..d628f36 100644
--- a/hw/dv/sv/tl_agent/tl_monitor.sv
+++ b/hw/dv/sv/tl_agent/tl_monitor.sv
@@ -6,8 +6,17 @@
 // ---------------------------------------------
 // TileLink interface monitor
 // ---------------------------------------------
-// TODO: Implement protocl check in the monitor
 
+// TODO merge with Shail's PR and move to cov obj
+covergroup tl_max_outsanding_cg(string name, int max_req) with function sample(bit hit_max = 1);
+  option.per_instance = 1;
+  option.name = name;
+  cp_hit_max: coverpoint hit_max {
+    bins hit  = {[1:max_req]};
+  }
+endgroup : tl_max_outsanding_cg
+
+// TODO: Implement protocl check in the monitor
 class tl_monitor extends uvm_monitor;
 
   virtual tl_if  vif;
@@ -17,6 +26,8 @@
   bit            objection_raised;
   uvm_phase      run_phase_h;
 
+  tl_max_outsanding_cg tl_max_outsanding_cg;
+
   uvm_analysis_port #(tl_seq_item) d_chan_port;
   uvm_analysis_port #(tl_seq_item) a_chan_port;
 
@@ -38,6 +49,9 @@
     if (!uvm_config_db#(tl_agent_cfg)::get(this, "", "cfg", cfg)) begin
       `uvm_fatal("NO_CFG", {"cfg must be set for:", get_full_name(),".cfg"});
     end
+
+    // if outstanding is only 1, don't need to sample this cg
+    if (cfg.max_outstanding_req > 1) tl_max_outsanding_cg = new(`gfn, cfg.max_outstanding_req);
   endfunction : build_phase
 
   virtual task run_phase(uvm_phase phase);
@@ -82,10 +96,14 @@
                    agent_name, req.convert2string()), UVM_HIGH)
         a_chan_port.write(req);
         pending_a_req.push_back(req);
-        if ((cfg.max_outstanding_req > 0) &&
-            (pending_a_req.size() > cfg.max_outstanding_req)) begin
-          `uvm_error(get_full_name(), $sformatf("Number of pending a_req exceeds limit %0d",
-                                      pending_a_req.size()))
+        if (cfg.max_outstanding_req > 0) begin
+          if (pending_a_req.size() > cfg.max_outstanding_req) begin
+            `uvm_error(get_full_name(), $sformatf("Number of pending a_req exceeds limit %0d",
+                                        pending_a_req.size()))
+          end
+          if (cfg.max_outstanding_req > 1 && pending_a_req.size() == cfg.max_outstanding_req) begin
+            tl_max_outsanding_cg.sample();
+          end
         end
         if (!objection_raised) begin
           run_phase_h.raise_objection(this);
diff --git a/hw/dv/sv/tl_agent/tl_seq_lib.sv b/hw/dv/sv/tl_agent/tl_seq_lib.sv
index 13605cc..2e54090 100644
--- a/hw/dv/sv/tl_agent/tl_seq_lib.sv
+++ b/hw/dv/sv/tl_agent/tl_seq_lib.sv
@@ -15,12 +15,12 @@
   tl_seq_item       pending_req[$];
   int               min_req_delay = 0;
   int               max_req_delay = 10;
-  int               max_outstanding = 8;
 
   `uvm_object_utils(tl_host_seq)
   `uvm_object_new
 
   virtual task body();
+    set_response_queue_depth(p_sequencer.cfg.max_outstanding_req);
     fork
       begin : wait_response_thread
         for (int i = 0; i < req_cnt; i++) begin
@@ -48,8 +48,8 @@
       begin : request_thread
         `uvm_info(`gfn, $sformatf("Start sending %0d host requests", req_cnt), UVM_HIGH)
         for (int i = 0; i < req_cnt; i++) begin
-          wait(pending_req.size < max_outstanding);
           req = tl_seq_item::type_id::create("req");
+          pre_start_item(req);
           start_item(req);
           randomize_req(req, i);
           finish_item(req);
@@ -74,11 +74,9 @@
   virtual function void process_response(tl_seq_item req, tl_seq_item rsp);
   endfunction
 
-  virtual function void set_max_outstanding(int value);
-    max_outstanding = value;
-    set_response_queue_depth(value);
-    `uvm_info(`gfn, $sformatf("Max outstanding: %0d", value), UVM_HIGH)
-  endfunction
+  // A reserved task that prevents seq runs out of source ID
+  virtual task pre_start_item(tl_seq_item req);
+  endtask
 
 endclass : tl_host_seq
 
diff --git a/hw/dv/sv/tl_agent/tl_sequencer.sv b/hw/dv/sv/tl_agent/tl_sequencer.sv
index eac0026..391ccac 100644
--- a/hw/dv/sv/tl_agent/tl_sequencer.sv
+++ b/hw/dv/sv/tl_agent/tl_sequencer.sv
@@ -6,6 +6,7 @@
   `uvm_component_utils(tl_sequencer)
 
   uvm_tlm_analysis_fifo#(tl_seq_item) a_chan_req_fifo;
+  tl_agent_cfg cfg;
 
   `uvm_component_new
 
diff --git a/hw/ip/tlul/dv/Makefile b/hw/ip/tlul/dv/Makefile
index aa602de..0ce4849 100644
--- a/hw/ip/tlul/dv/Makefile
+++ b/hw/ip/tlul/dv/Makefile
@@ -48,8 +48,8 @@
   UVM_TEST_SEQ   = xbar_sanity_vseq
   RUN_OPTS      += +max_host_req_delay=10
   RUN_OPTS      += +max_host_rsp_delay=1000
-  RUN_OPTS      += +max_device_req_delay=10
-  RUN_OPTS      += +max_device_rsp_delay=1000
+  RUN_OPTS      += +max_device_req_delay=1000
+  RUN_OPTS      += +max_device_rsp_delay=10
 endif
 
 ifeq (${TEST_NAME},xbar_random)
@@ -73,8 +73,8 @@
   UVM_TEST_SEQ   = xbar_random_vseq
   RUN_OPTS      += +max_host_req_delay=10
   RUN_OPTS      += +max_host_rsp_delay=1000
-  RUN_OPTS      += +max_device_req_delay=10
-  RUN_OPTS      += +max_device_rsp_delay=1000
+  RUN_OPTS      += +max_device_req_delay=1000
+  RUN_OPTS      += +max_device_rsp_delay=10
 endif
 
 ifeq (${TEST_NAME},xbar_access_same_device)
@@ -85,8 +85,8 @@
   UVM_TEST_SEQ   = xbar_access_same_device_vseq
   RUN_OPTS      += +max_host_req_delay=10
   RUN_OPTS      += +max_host_rsp_delay=1000
-  RUN_OPTS      += +max_device_req_delay=10
-  RUN_OPTS      += +max_device_rsp_delay=1000
+  RUN_OPTS      += +max_device_req_delay=1000
+  RUN_OPTS      += +max_device_rsp_delay=10
 endif
 
 ifeq (${TEST_NAME},xbar_same_source)
diff --git a/hw/ip/tlul/dv/env/seq_lib/xbar_base_vseq.sv b/hw/ip/tlul/dv/env/seq_lib/xbar_base_vseq.sv
index 5709300..61cfdcb 100644
--- a/hw/ip/tlul/dv/env/seq_lib/xbar_base_vseq.sv
+++ b/hw/ip/tlul/dv/env/seq_lib/xbar_base_vseq.sv
@@ -40,7 +40,6 @@
     foreach (host_seq[i]) begin
       host_seq[i] = xbar_tl_host_seq::type_id::create(
                     $sformatf("%0s_seq", xbar_hosts[i].host_name));
-      host_seq[i].set_max_outstanding(1 << VALID_HOST_ID_WIDTH);
       // Default only send request to valid devices that is accessible by the host
       foreach (xbar_devices[j]) begin
         if (is_valid_path(xbar_hosts[i].host_name, xbar_devices[j].device_name)) begin
diff --git a/hw/ip/tlul/dv/env/seq_lib/xbar_stress_all_vseq.sv b/hw/ip/tlul/dv/env/seq_lib/xbar_stress_all_vseq.sv
index bf8a6b0..b51af9f 100644
--- a/hw/ip/tlul/dv/env/seq_lib/xbar_stress_all_vseq.sv
+++ b/hw/ip/tlul/dv/env/seq_lib/xbar_stress_all_vseq.sv
@@ -52,7 +52,10 @@
           join_none
         end
         wait fork;
-        if ($urandom_range(0, 1)) dut_init();
+        // if this seq is called as a sub-seq, and run with another seq that contains reset,
+        // when reset is issued in both seq at the same time, can't know where is the end of reset
+        // hence, if we want to kill unfinished seq after reset, we may not kill it at a right time
+        if (do_dut_init && $urandom_range(0, 1)) dut_init();
         `uvm_info(`gfn, $sformatf("finished run %0d/%0d", i, num_trans), UVM_LOW)
       end // isolation thread
     join
diff --git a/hw/ip/tlul/dv/env/seq_lib/xbar_stress_all_with_reset_vseq.sv b/hw/ip/tlul/dv/env/seq_lib/xbar_stress_all_with_reset_vseq.sv
index 0007550..93d3245 100644
--- a/hw/ip/tlul/dv/env/seq_lib/xbar_stress_all_with_reset_vseq.sv
+++ b/hw/ip/tlul/dv/env/seq_lib/xbar_stress_all_with_reset_vseq.sv
@@ -23,9 +23,9 @@
   task body();
     for (int i = 1; i <= num_trans; i++) begin
       bit reset_ongoing;
+      xbar_stress_all_vseq xbar_vseq;
       fork
         begin : seq_wo_reset
-          xbar_stress_all_vseq xbar_vseq;
           xbar_vseq = xbar_stress_all_vseq::type_id::create("xbar_stress_all_vseq");
 
           xbar_vseq.do_dut_init = 0;
@@ -52,7 +52,6 @@
           `uvm_info(`gfn, $sformatf("Reset is issued for run %0d/%0d", i, num_trans), UVM_LOW)
         end
       join_any
-      p_sequencer.stop_sequences();
       disable fork;
       // delay to avoid race condition when sending item and checking no item after reset occur at
       // the same time
diff --git a/hw/ip/tlul/dv/env/seq_lib/xbar_tl_host_seq.sv b/hw/ip/tlul/dv/env/seq_lib/xbar_tl_host_seq.sv
index 56d4ff7..332d938 100644
--- a/hw/ip/tlul/dv/env/seq_lib/xbar_tl_host_seq.sv
+++ b/hw/ip/tlul/dv/env/seq_lib/xbar_tl_host_seq.sv
@@ -52,4 +52,9 @@
     end
   endfunction
 
+  // prevent seq runs out of source ID
+  virtual task pre_start_item(tl_seq_item req);
+    wait(pending_req.size < p_sequencer.cfg.max_outstanding_req);
+  endtask
+
 endclass
diff --git a/hw/ip/tlul/dv/env/xbar_env_cfg.sv b/hw/ip/tlul/dv/env/xbar_env_cfg.sv
index 81f0558..cd4d9bb 100644
--- a/hw/ip/tlul/dv/env/xbar_env_cfg.sv
+++ b/hw/ip/tlul/dv/env/xbar_env_cfg.sv
@@ -40,6 +40,7 @@
       host_agent_cfg[i] = tl_agent_cfg::type_id::
                           create($sformatf("%0s_agent_cfg", xbar_hosts[i].host_name));
       host_agent_cfg[i].is_host = 1;
+      host_agent_cfg[i].max_outstanding_req = 1 << VALID_HOST_ID_WIDTH;
     end
     // Device TL agent cfg
     num_devices      = xbar_devices.size();
@@ -48,6 +49,14 @@
       device_agent_cfg[i] = tl_agent_cfg::type_id::
                             create($sformatf("%0s_agent_cfg", xbar_devices[i].device_name));
       device_agent_cfg[i].is_host = 0;
-    end
+      // the max_outstanding_req depends on how many hosts can access the device
+      // device.max_outstanding_req = sum(all its hosts max_outstanding_req)
+      device_agent_cfg[i].max_outstanding_req = 0; // clear default value
+      foreach (xbar_hosts[j]) begin
+        if (xbar_devices[i].device_name inside {xbar_hosts[j].valid_devices}) begin
+          device_agent_cfg[i].max_outstanding_req += host_agent_cfg[j].max_outstanding_req;
+        end
+      end // foreach (xbar_hosts[j])
+    end // foreach (device_agent_cfg[i])
   endfunction
 endclass
diff --git a/hw/ip/tlul/dv/env/xbar_env_cov.sv b/hw/ip/tlul/dv/env/xbar_env_cov.sv
index 292b9de..25f194b 100644
--- a/hw/ip/tlul/dv/env/xbar_env_cov.sv
+++ b/hw/ip/tlul/dv/env/xbar_env_cov.sv
@@ -18,11 +18,41 @@
   }
 endgroup
 
+// wrap covergroup as a class to use it as an associative array
+// sample at xbar_env_cov::build_phase
+class max_delay_cg_obj;
+
+  covergroup max_delay_cg (string name) with function sample(uint req_dly, uint rsp_dly);
+    option.per_instance = 1;
+    option.name = name;
+    cp_req_dly: coverpoint req_dly {
+      bins zero        = {0};
+      bins small_delay = {[1:20]};
+      bins big_delay   = {[100:1000]};
+    }
+    cp_rsp_dly: coverpoint rsp_dly {
+      bins zero        = {0};
+      bins small_delay = {[1:20]};
+      bins big_delay   = {[100:1000]};
+    }
+  endgroup
+
+  function new(string name = "");
+    max_delay_cg = new(name);
+  endfunction : new
+
+  function void sample(uint req_dly, uint rsp_dly);
+    max_delay_cg.sample(req_dly, rsp_dly);
+  endfunction : sample
+endclass : max_delay_cg_obj
+
 class xbar_env_cov extends dv_base_env_cov #(.CFG_T(xbar_env_cfg));
   same_device_access_cg   same_device_access_cg;
   same_source_access_cg   same_source_access_cg;
   // cover mapped/unmapped addr per host
   dv_base_generic_cov_obj host_access_mapped_addr_cg[string];
+  // cover max_delay per host/device
+  max_delay_cg_obj        max_delay_cg_obj[string];
   `uvm_component_utils(xbar_env_cov)
 
   function new(string name, uvm_component parent);
@@ -35,6 +65,14 @@
     same_source_access_cg = new(1 << VALID_HOST_ID_WIDTH);
     foreach (xbar_hosts[i]) begin
       host_access_mapped_addr_cg[xbar_hosts[i].host_name] = new(xbar_hosts[i].host_name);
+      max_delay_cg_obj[xbar_hosts[i].host_name]           = new(xbar_hosts[i].host_name);
+      max_delay_cg_obj[xbar_hosts[i].host_name].sample(cfg.max_host_req_delay,
+                                                       cfg.max_host_rsp_delay);
+    end
+    foreach (xbar_devices[i]) begin
+      max_delay_cg_obj[xbar_devices[i].device_name] = new(xbar_devices[i].device_name);
+      max_delay_cg_obj[xbar_devices[i].device_name].sample(cfg.max_device_req_delay,
+                                                           cfg.max_device_rsp_delay);
     end
   endfunction
 
diff --git a/hw/ip/tlul/dv/env/xbar_params.svh b/hw/ip/tlul/dv/env/xbar_params.svh
index 5f27369..3a4fd67 100644
--- a/hw/ip/tlul/dv/env/xbar_params.svh
+++ b/hw/ip/tlul/dv/env/xbar_params.svh
@@ -18,13 +18,16 @@
     '{"TlFlashCtrl", ADDR_SPACE_FLASH_CTRL, ADDR_SPACE_FLASH_CTRL | ADDR_MASK_FLASH_CTRL},
     '{"TlRvTimer",   ADDR_SPACE_RV_TIMER  , ADDR_SPACE_RV_TIMER   | ADDR_MASK_RV_TIMER  },
     '{"TlHmac",      ADDR_SPACE_HMAC      , ADDR_SPACE_HMAC       | ADDR_MASK_HMAC      },
-    '{"TlAes",       ADDR_SPACE_AES      , ADDR_SPACE_AES         | ADDR_MASK_AES       },
-    '{"TlRvPlic",    ADDR_SPACE_RV_PLIC   , ADDR_SPACE_RV_PLIC    | ADDR_MASK_RV_PLIC   }};
+    '{"TlAes",       ADDR_SPACE_AES       , ADDR_SPACE_AES        | ADDR_MASK_AES       },
+    '{"TlRvPlic",    ADDR_SPACE_RV_PLIC   , ADDR_SPACE_RV_PLIC    | ADDR_MASK_RV_PLIC   },
+    '{"TlPinmux",    ADDR_SPACE_PINMUX    , ADDR_SPACE_PINMUX     | ADDR_MASK_PINMUX   }};
 
 // List of Xbar hosts
 tl_host_t xbar_hosts[$] = '{
     '{"TlCorei", 0, '{"TlRom", "TlDebugMem", "TlRamMain", "TlEflash"}},
     '{"TlCored", 1, '{"TlRom", "TlDebugMem", "TlRamMain", "TlEflash", "TlUart", "TlGpio",
-                       "TlSpiDevice", "TlFlashCtrl", "TlRvTimer", "TlHmac", "TlAes", "TlRvPlic"}},
+                      "TlSpiDevice", "TlFlashCtrl", "TlRvTimer", "TlHmac", "TlAes", "TlRvPlic",
+                      "TlPinmux"}},
     '{"TlDmSba", 2, '{"TlRom", "TlRamMain", "TlEflash", "TlUart", "TlGpio",
-                      "TlSpiDevice", "TlFlashCtrl", "TlRvTimer", "TlHmac", "TlAes", "TlRvPlic"}}};
+                      "TlSpiDevice", "TlFlashCtrl", "TlRvTimer", "TlHmac", "TlAes", "TlRvPlic",
+                      "TlPinmux"}}};
diff --git a/hw/ip/tlul/dv/seq/host_dir_seq.sv b/hw/ip/tlul/dv/seq/host_dir_seq.sv
deleted file mode 100644
index 16c7390..0000000
--- a/hw/ip/tlul/dv/seq/host_dir_seq.sv
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright lowRISC contributors.
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-//
-class host_dir_seq extends xbar_seq_base;
-
-  function new(string name);
-    super.new(name);
-  endfunction : new
-
-  task body();
-    logic [31:0] rdata, rdata2;
-
-    write('h4, 'h DEAD_BEEF, 'hF);
-
-    read('h4, rdata);
-    $display("Data received");
-    assert(rdata == 'h DEAD_BEEF)
-      else $error("Data mismatch: ADDR(0x%08x) EXP(0x%08x) GOT(0x%08x)",
-      'h4, 'h DEAD_BEEF, rdata);
-
-    // Read back twice to check if correct randomized data received
-    read('hFF0, rdata);
-    read('hFF0, rdata2);
-
-    assert(rdata == rdata2)
-      else $error("Read twice test failed: ADDR(0x%08x) RD1(0x%08x) RD2(0x%08x)",
-      'hFF0, rdata, rdata2);
-
-  endtask : body
-
-endclass
diff --git a/hw/ip/tlul/dv/seq/host_rand_seq.sv b/hw/ip/tlul/dv/seq/host_rand_seq.sv
deleted file mode 100644
index 02f9c5b..0000000
--- a/hw/ip/tlul/dv/seq/host_rand_seq.sv
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright lowRISC contributors.
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-//
-class host_rand_seq_item extends xbar_seq_item;
-  constraint addr_range  { addr%4 == 0; addr > 'h0 ; addr < 'h8000_0000; }
-  constraint wstrb_fixed { wstrb == 'hF; }
-endclass : host_rand_seq_item
-
-class host_rand_seq extends xbar_seq_base;
-
-  function new(string name);
-    super.new(name);
-  endfunction : new
-
-  task body();
-    host_rand_seq_item item_wr;
-    xbar_seq_item      item_rd;
-    xbar_seq_item      item_rsp;
-
-    int trial;
-
-    trial = $urandom_range(4,20);
-
-    item_wr = new;
-    void'(item_wr.randomize());
-    item_wr.op = xbar_pkg::BUS_WR;
-
-    super.req.put(item_wr);
-
-    item_rd = item_wr.copy();
-    item_rd.op = xbar_pkg::BUS_RD;
-
-    super.req.put(item_rd);
-
-    super.rsp.get(item_rsp); // for write, discard
-    super.rsp.get(item_rsp);
-
-    $display("Data received");
-    assert(item_rsp.data == item_wr.data)
-      else $error("Data mismatch: ADDR(0x%08x) EXP(0x%08x) GOT(0x%08x)",
-      item_wr.addr, item_wr.data, item_rsp.data);
-
-    // Try #req greater than FIFO depth
-    for (int i = 0 ; i < trial ; i++) begin
-      host_rand_seq_item req_item;
-      req_item = new;
-      void'(req_item.randomize());
-      super.req.put(req_item);
-    end
-    // Accept
-    for (int i = 0 ; i < trial ; i++) begin
-      super.rsp.get(item_rsp);
-    end
-  endtask : body
-
-endclass
diff --git a/hw/ip/tlul/dv/seq/host_socket1n_seq.sv b/hw/ip/tlul/dv/seq/host_socket1n_seq.sv
deleted file mode 100644
index e05b395..0000000
--- a/hw/ip/tlul/dv/seq/host_socket1n_seq.sv
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright lowRISC contributors.
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-//
-class host_socket1n_seq_item extends xbar_seq_item;
-  constraint addr_range  { addr[31:30] dist { 0:=1, 1:=1, 2:=1, 3:= 1}; }
-  constraint wstrb_fixed { wstrb == 'hF; }
-endclass : host_socket1n_seq_item
-
-class host_socket1n_seq extends xbar_seq_base;
-
-  function new(string name);
-    super.new(name);
-  endfunction : new
-
-  task body();
-    host_socket1n_seq_item item;
-    xbar_seq_item item_rsp;
-    xbar_seq_item item_cmp;
-
-    int trial;
-    mailbox #(xbar_seq_item) cmpbox;
-    cmpbox = new;
-
-    // Response handling
-    fork
-      forever begin
-        cmpbox.get(item_cmp);
-        super.rsp.get(item_rsp); // Write
-        super.rsp.get(item_rsp); // Read
-        assert (item_cmp.data == item_rsp.data)
-          else $error("Data mismatch: ADDR(0x%08x) EXP(0x%08x) GOT(0x%08x)",
-            item_cmp.addr,
-            item_cmp.data,
-            item_rsp.data);
-      end
-    join_none
-
-    trial = $urandom_range(100,200);
-
-    for (int i = 0 ; i < trial ; i++) begin
-      item = new;
-      void'(item.randomize());
-      this.write_req(item.addr, item.data, '1);
-      this.read_req(item.addr);
-      cmpbox.put(item);
-    end
-  endtask : body
-
-endclass
diff --git a/hw/ip/tlul/dv/seq/xbar_factory.sv b/hw/ip/tlul/dv/seq/xbar_factory.sv
deleted file mode 100644
index 1fe8cb8..0000000
--- a/hw/ip/tlul/dv/seq/xbar_factory.sv
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright lowRISC contributors.
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-//
-class xbar_factory;
-
-  function xbar_seq_base get_xbar_seq(string name);
-    if (name == "host_dir_seq") begin
-      host_dir_seq ob;
-      ob = new("host_dir_seq");
-      return ob;
-    end else if (name == "host_rand_seq") begin
-      host_rand_seq ob;
-      ob = new("host_rand_seq");
-      return ob;
-    end else if (name == "host_socket1n_seq") begin
-      host_socket1n_seq ob;
-      ob = new("host_socket1n_seq");
-      return ob;
-    end
-
-  endfunction : get_xbar_seq
-
-endclass
diff --git a/hw/ip/tlul/dv/seq/xbar_seq_base.svh b/hw/ip/tlul/dv/seq/xbar_seq_base.svh
deleted file mode 100644
index 76ff53f..0000000
--- a/hw/ip/tlul/dv/seq/xbar_seq_base.svh
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright lowRISC contributors.
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-//
-
-class xbar_seq_base;
-
-  virtual xbar_if vif;
-
-  mailbox #(xbar_seq_item) req;
-  mailbox #(xbar_seq_item) rsp;
-
-  string name;
-
-  function new(string name);
-    this.name = name;
-  endfunction : new
-
-  task connect(mailbox #(xbar_seq_item) req,
-               mailbox #(xbar_seq_item) rsp
-             );
-    this.req = req;
-    this.rsp = rsp;
-  endtask : connect
-
-  task pre_start(virtual xbar_if xbar_if);
-    this.vif = xbar_if;
-  endtask : pre_start
-
-  task run();
-    // Call body
-    body();
-  endtask : run
-
-  virtual task body();
-    // FATAL: Need to override
-  endtask : body
-
-  task write_req(input bit [31:0] addr,
-                 input bit [31:0] data,
-                 input bit [3:0]  wstrb);
-    xbar_seq_item item;
-    item = new;
-    item.addr  = addr;
-    item.data  = data;
-    item.wstrb = wstrb;
-    item.op    = xbar_pkg::BUS_WR;
-    this.req.put(item);
-
-  endtask : write_req
-
-  task write_rsp();
-    xbar_seq_item item;
-    this.rsp.get(item);
-  endtask : write_rsp
-
-  task write(input bit [31:0] addr,
-             input bit [31:0] data,
-             input bit [3:0]  wstrb);
-    this.write_req(addr, data, wstrb);
-    this.write_rsp(); // 1 outstanding
-  endtask : write
-
-  task write_async(input bit [31:0] addr,
-                   input bit [31:0] data,
-                   input bit [3:0]  wstrb);
-    this.write_req(addr, data, wstrb);
-    fork
-      this.write_rsp();
-    join_none
-  endtask : write_async
-
-  task read_req(input bit [31:0] addr);
-    xbar_seq_item item;
-    item = new;
-    item.addr = addr;
-    item.op   = xbar_pkg::BUS_RD;
-    this.req.put(item);
-  endtask : read_req
-
-  task read_data(output bit [31:0] data);
-    xbar_seq_item item;
-    this.rsp.get(item);
-    data = item.data;
-  endtask : read_data
-
-  task read(input  bit [31:0] addr,
-            output bit [31:0] data);
-    this.read_req(addr);
-
-    this.read_data(data);
-  endtask : read
-
-  task compare(input  bit [31:0] addr,
-           input  bit [31:0] data);
-    logic [31:0] rdata;
-    this.write_req(addr, data, '1);
-    this.read_req(addr);
-    this.write_rsp();
-    this.read_data(rdata);
-    assert(data == rdata)
-      else $error("Data mismatch: ADDR(0x%08x) EXP(0x%08x) GOT(0x%08x)", addr, data, rdata);
-  endtask : compare
-
-  task compare_async(input bit [31:0] addr,
-                     input bit [31:0] data);
-    logic [31:0] rdata;
-    this.write_req(addr, data, '1);
-    this.read_req(addr);
-    fork
-      begin
-        this.write_rsp();
-        this.read_data(rdata);
-        assert(data == rdata)
-          else $error("Data mismatch: ADDR(0x%08x) EXP(0x%08x) GOT(0x%08x)", addr, data, rdata);
-      end
-    join_none
-  endtask : compare_async
-endclass
diff --git a/hw/ip/tlul/dv/seq/xbar_seq_item.svh b/hw/ip/tlul/dv/seq/xbar_seq_item.svh
deleted file mode 100644
index 16e1a01..0000000
--- a/hw/ip/tlul/dv/seq/xbar_seq_item.svh
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright lowRISC contributors.
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-//
-class xbar_seq_item;
-  rand logic [31:0]        addr;
-  rand logic [31:0]        data;
-  rand logic [3:0]         wstrb;
-  rand xbar_pkg::xbar_op_e op;
-
-  function xbar_seq_item copy();
-    copy = new;
-    copy.addr = this.addr;
-    copy.data = this.data;
-    copy.wstrb = this.wstrb;
-    copy.op = this.op;
-    return copy;
-  endfunction : copy
-endclass : xbar_seq_item
diff --git a/hw/ip/tlul/dv/tb/xbar_tl_if_connection.sv b/hw/ip/tlul/dv/tb/xbar_tl_if_connection.sv
index 83dc2be..41723ac 100644
--- a/hw/ip/tlul/dv/tb/xbar_tl_if_connection.sv
+++ b/hw/ip/tlul/dv/tb/xbar_tl_if_connection.sv
@@ -15,6 +15,7 @@
 `CONNECT_TL_DEVICE_IF(hmac_tl_if, dut.tl_hmac_o, dut.tl_hmac_i, TlHmac)
 `CONNECT_TL_DEVICE_IF(aes_tl_if, dut.tl_aes_o, dut.tl_aes_i, TlAes)
 `CONNECT_TL_DEVICE_IF(rv_plic_tl_if, dut.tl_rv_plic_o, dut.tl_rv_plic_i, TlRvPlic)
+`CONNECT_TL_DEVICE_IF(pinmux_tl_if, dut.tl_pinmux_o, dut.tl_pinmux_i, TlPinmux)
 
 // Host TileLink interface connections
 `CONNECT_TL_HOST_IF(corei_tl_if, dut.tl_corei_i, dut.tl_corei_o, TlCorei)
