[rv_dm] Gate JTAG in/out signals with life cycle

This is added for additional protection when we are
in a non-hw-debug-enabled life cycle stated.

Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/rv_dm/rtl/rv_dm.sv b/hw/ip/rv_dm/rtl/rv_dm.sv
index 24355bd..d63d1bd 100644
--- a/hw/ip/rv_dm/rtl/rv_dm.sv
+++ b/hw/ip/rv_dm/rtl/rv_dm.sv
@@ -117,13 +117,15 @@
   end
 
   // debug enable gating
-  typedef enum logic [2:0] {
+  typedef enum logic [3:0] {
     EnFetch,
     EnRom,
     EnSba,
     EnDebugReq,
     EnResetReq,
     EnDmiReq,
+    EnJtagIn,
+    EnJtagOut,
     EnLastPos
   } rv_dm_en_e;
 
@@ -409,6 +411,13 @@
     .rdata_o                 ( rdata                 )
   );
 
+  // Gating of JTAG signals
+  jtag_pkg::jtag_req_t jtag_in_int;
+  jtag_pkg::jtag_rsp_t jtag_out_int;
+
+  assign jtag_in_int = (lc_tx_test_true_strict(lc_hw_debug_en[EnJtagIn]))  ? jtag_i       : '0;
+  assign jtag_o      = (lc_tx_test_true_strict(lc_hw_debug_en[EnJtagOut])) ? jtag_out_int : '0;
+
   // Bound-in DPI module replaces the TAP
 `ifndef DMIDirectTAP
 
@@ -417,7 +426,7 @@
   prim_clock_mux2 #(
     .NoFpgaBufG(1'b1)
   ) u_prim_clock_mux2 (
-    .clk0_i(jtag_i.tck),
+    .clk0_i(jtag_in_int.tck),
     .clk1_i(clk_i),
     .sel_i (testmode),
     .clk_o (tck_muxed)
@@ -426,7 +435,7 @@
   prim_clock_mux2 #(
     .NoFpgaBufG(1'b1)
   ) u_prim_rst_n_mux2 (
-    .clk0_i(jtag_i.trst_n),
+    .clk0_i(jtag_in_int.trst_n),
     .clk1_i(scan_rst_ni),
     .sel_i (testmode),
     .clk_o (trst_n_muxed)
@@ -451,11 +460,11 @@
 
     //JTAG
     .tck_i            (tck_muxed),
-    .tms_i            (jtag_i.tms),
+    .tms_i            (jtag_in_int.tms),
     .trst_ni          (trst_n_muxed),
-    .td_i             (jtag_i.tdi),
-    .td_o             (jtag_o.tdo),
-    .tdo_oe_o         (jtag_o.tdo_oe)
+    .td_i             (jtag_in_int.tdi),
+    .td_o             (jtag_out_int.tdo),
+    .tdo_oe_o         (jtag_out_int.tdo_oe)
   );
 `endif