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)
