[otp_ctrl] Use prim_lc_sender for token valid signals

Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/otp_ctrl/otp_ctrl.core b/hw/ip/otp_ctrl/otp_ctrl.core
index acdf488..a157608 100644
--- a/hw/ip/otp_ctrl/otp_ctrl.core
+++ b/hw/ip/otp_ctrl/otp_ctrl.core
@@ -15,6 +15,7 @@
       - lowrisc:prim:otp
       - lowrisc:prim:double_lfsr
       - lowrisc:prim:count
+      - lowrisc:prim:lc_sender
       - lowrisc:prim:lc_sync
       - lowrisc:prim:buf
       - lowrisc:prim:flop
diff --git a/hw/ip/otp_ctrl/rtl/otp_ctrl.sv b/hw/ip/otp_ctrl/rtl/otp_ctrl.sv
index 627dbf7..c89a9e9 100644
--- a/hw/ip/otp_ctrl/rtl/otp_ctrl.sv
+++ b/hw/ip/otp_ctrl/rtl/otp_ctrl.sv
@@ -1253,29 +1253,32 @@
   assign secrets_valid = (part_digest[Secret2Idx] != '0) ? lc_ctrl_pkg::On : lc_ctrl_pkg::Off;
 
   // Buffer these constants in order to ensure that synthesis does not try to optimize the encoding.
-  logic [lc_ctrl_pkg::TxWidth-1:0] test_tokens_valid_buf, rma_token_valid_buf, secrets_valid_buf;
-  prim_buf #(
-    .Width(lc_ctrl_pkg::TxWidth)
-  ) u_prim_buf_test_tokens_valid (
-    .in_i(test_tokens_valid),
-    .out_o(test_tokens_valid_buf)
-  );
-  prim_buf #(
-    .Width(lc_ctrl_pkg::TxWidth)
-  ) u_prim_buf_rma_token_valid (
-    .in_i(rma_token_valid),
-    .out_o(rma_token_valid_buf)
-  );
-  prim_buf #(
-    .Width(lc_ctrl_pkg::TxWidth)
-  ) u_prim_buf_secrets_valid (
-    .in_i(secrets_valid),
-    .out_o(secrets_valid_buf)
+  prim_lc_sender #(
+    .AsyncOn(0)
+  ) u_prim_lc_sender_test_tokens_valid (
+    .clk_i,
+    .rst_ni,
+    .lc_en_i(test_tokens_valid),
+    .lc_en_o(otp_lc_data_o.test_tokens_valid)
   );
 
-  assign otp_lc_data_o.test_tokens_valid = lc_ctrl_pkg::lc_tx_t'(test_tokens_valid_buf);
-  assign otp_lc_data_o.rma_token_valid = lc_ctrl_pkg::lc_tx_t'(rma_token_valid_buf);
-  assign otp_lc_data_o.secrets_valid = lc_ctrl_pkg::lc_tx_t'(secrets_valid_buf);
+  prim_lc_sender #(
+    .AsyncOn(0)
+  ) u_prim_lc_sender_rma_token_valid (
+    .clk_i,
+    .rst_ni,
+    .lc_en_i(rma_token_valid),
+    .lc_en_o(otp_lc_data_o.rma_token_valid)
+  );
+
+  prim_lc_sender #(
+    .AsyncOn(0)
+  ) u_prim_lc_sender_secrets_valid (
+    .clk_i,
+    .rst_ni,
+    .lc_en_i(secrets_valid),
+    .lc_en_o(otp_lc_data_o.secrets_valid)
+  );
 
   // Lifecycle state
   assign otp_lc_data_o.state = lc_ctrl_state_pkg::lc_state_e'(part_buf_data[LcStateOffset +: