[dv/lc_ctrl] update tb with new lc outputs

Recent LC_CTRL added a few new outputs, this PR added all outputs in
tb.sv and check their value via scb.

Signed-off-by: Cindy Chen <chencindy@google.com>
diff --git a/hw/ip/lc_ctrl/dv/env/lc_ctrl_env_pkg.sv b/hw/ip/lc_ctrl/dv/env/lc_ctrl_env_pkg.sv
index 6e26e70..85f36f2 100644
--- a/hw/ip/lc_ctrl/dv/env/lc_ctrl_env_pkg.sv
+++ b/hw/ip/lc_ctrl/dv/env/lc_ctrl_env_pkg.sv
@@ -30,45 +30,51 @@
     lc_ctrl_pkg::lc_tx_e lc_nvm_debug_en_o;
     lc_ctrl_pkg::lc_tx_e lc_hw_debug_en_o;
     lc_ctrl_pkg::lc_tx_e lc_cpu_en_o;
+    lc_ctrl_pkg::lc_tx_e lc_creator_seed_sw_rw_en_o;
+    lc_ctrl_pkg::lc_tx_e lc_owner_seed_sw_rw_en_o;
+    lc_ctrl_pkg::lc_tx_e lc_seed_hw_rd_en_o;
+    lc_ctrl_pkg::lc_tx_e lc_iso_part_sw_rd_en_o;
+    lc_ctrl_pkg::lc_tx_e lc_iso_part_sw_wr_en_o;
     lc_ctrl_pkg::lc_tx_e lc_keymgr_en_o;
     lc_ctrl_pkg::lc_tx_e lc_escalate_en_o;
   } lc_outputs_t;
 
   const lc_outputs_t EXP_LC_OUTPUTS[NUM_STATES] = {
-    // Order: lc_dft_en_o, lc_nvm_debug_en_o, lc_hw_debug_en_o, lc_cpu_en_o, lc_keymgr_en_o,
-    //        lc_escalate_en_o
     // Raw (fixed size array index 0)
-    {Off, Off, Off, Off, Off, Off},
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
     // TestUnlock0
-    {On,  On,  On,  On,  Off, Off},
+    {On,  On,  On,  On,  Off, Off, Off, Off, On,  Off, Off},
     // TestLock0
-    {Off, Off, Off, Off, Off, Off},
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
     // TestUnlock1
-    {On,  On,  On,  On,  Off, Off},
+    {On,  On,  On,  On,  Off, Off, Off, Off, On,  Off, Off},
     // TestLock1
-    {Off, Off, Off, Off, Off, Off},
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
     // TestUnlock2
-    {On,  On,  On,  On,  Off, Off},
+    {On,  On,  On,  On,  Off, Off, Off, Off, On,  Off, Off},
     // TestLock2
-    {Off, Off, Off, Off, Off, Off},
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
     // TestUnlock3
-    {On,  On,  On,  On,  Off, Off},
-    // Dev
-    {Off, Off, On,  On,  On,  Off},
-    // Prod
-    {Off, Off, Off, On,  On,  Off},
-    // ProdEnd
-    {Off, Off, Off, On,  On,  Off},
+    {On,  On,  On,  On,  Off, Off, Off, Off, On,  Off, Off},
+    // Dev: lc_creator_seed_sw_rw_en_o (On if device is not personalized),
+    // lc_seed_hw_rd_en_o (On if device is personalized)
+    {Off, Off, On,  On,  On,  On,  On,  On,  On,  On,  Off},
+    // Prod: lc_creator_seed_sw_rw_en_o (On if device is not personalized),
+    // lc_seed_hw_rd_en_o (On if device is personalized)
+    {Off, Off, Off, On,  On,  On,  On,  On,  On,  On,  Off},
+    // ProdEnd: lc_creator_seed_sw_rw_en_o (On if device is not personalized),
+    // lc_seed_hw_rd_en_o (On if device is personalized)
+    {Off, Off, Off, On,  On,  On,  On,  On,  On,  On,  Off},
     // Rma
-    {On,  On,  On,  On,  On,  Off},
+    {On,  On,  On,  On,  On,  On,  On,  On,  On,  On,  Off},
     // Scrap
-    {Off, Off, Off, Off, Off, Off},
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
     // PostTrans
-    {Off, Off, Off, Off, Off, Off},
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
     // Escalate
-    {Off, Off, Off, Off, Off, On},
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, On},
     // Invalid
-    {Off, Off, Off, Off, Off, Off}
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off}
   };
 
   // associative array cannot declare parameter here, so we used const instead
diff --git a/hw/ip/lc_ctrl/dv/env/lc_ctrl_if.sv b/hw/ip/lc_ctrl/dv/env/lc_ctrl_if.sv
index db976b8..dd14862 100644
--- a/hw/ip/lc_ctrl/dv/env/lc_ctrl_if.sv
+++ b/hw/ip/lc_ctrl/dv/env/lc_ctrl_if.sv
@@ -7,14 +7,22 @@
 
   import lc_ctrl_pkg::*;
   import otp_ctrl_pkg::*;
+  import otp_ctrl_part_pkg::*;
 
-  otp_ctrl_pkg::otp_lc_data_t otp_i;
-  lc_ctrl_pkg::lc_tx_t        lc_dft_en_o;
-  lc_ctrl_pkg::lc_tx_t        lc_nvm_debug_en_o;
-  lc_ctrl_pkg::lc_tx_t        lc_hw_debug_en_o;
-  lc_ctrl_pkg::lc_tx_t        lc_cpu_en_o;
-  lc_ctrl_pkg::lc_tx_t        lc_keymgr_en_o;
-  lc_ctrl_pkg::lc_tx_t        lc_escalate_en_o;
+  otp_ctrl_pkg::otp_lc_data_t     otp_i;
+  otp_ctrl_part_pkg::otp_hw_cfg_t otp_hw_cfg_i;
+
+  lc_ctrl_pkg::lc_tx_t lc_dft_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_nvm_debug_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_hw_debug_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_cpu_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_creator_seed_sw_rw_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_owner_seed_sw_rw_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_iso_part_sw_rd_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_iso_part_sw_wr_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_seed_hw_rd_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_keymgr_en_o;
+  lc_ctrl_pkg::lc_tx_t lc_escalate_en_o;
 
   task automatic init(lc_ctrl_pkg::lc_state_e lc_state = LcStRaw,
                       lc_ctrl_pkg::lc_cnt_e   lc_cnt = LcCntRaw);
@@ -27,6 +35,9 @@
     otp_i.test_exit_token = 0;
     otp_i.rma_token = 0;
     otp_i.id_state = LcIdBlank;
+
+    otp_hw_cfg_i.valid = lc_ctrl_pkg::Off;
+    otp_hw_cfg_i.data = 0;
   endtask
 
 endinterface
diff --git a/hw/ip/lc_ctrl/dv/env/lc_ctrl_scoreboard.sv b/hw/ip/lc_ctrl/dv/env/lc_ctrl_scoreboard.sv
index 0473aab..dd3362b 100644
--- a/hw/ip/lc_ctrl/dv/env/lc_ctrl_scoreboard.sv
+++ b/hw/ip/lc_ctrl/dv/env/lc_ctrl_scoreboard.sv
@@ -10,7 +10,7 @@
   `uvm_component_utils(lc_ctrl_scoreboard)
 
   // local variables
-
+  bit is_personalized = 0;
   // TLM agent fifos
 
   // local queues to hold incoming packets pending comparison
@@ -47,6 +47,27 @@
         `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_cpu_en_o,       exp_lc_o.lc_cpu_en_o,       err_msg)
         `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_keymgr_en_o,    exp_lc_o.lc_keymgr_en_o,    err_msg)
         `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_escalate_en_o,  exp_lc_o.lc_escalate_en_o,  err_msg)
+        `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_owner_seed_sw_rw_en_o,
+                     exp_lc_o.lc_owner_seed_sw_rw_en_o, err_msg)
+        `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_iso_part_sw_rd_en_o,
+                     exp_lc_o.lc_iso_part_sw_rd_en_o, err_msg)
+        `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_iso_part_sw_wr_en_o,
+                     exp_lc_o.lc_iso_part_sw_wr_en_o, err_msg)
+
+        // lc_creator_seed_sw_rw_en_o is ON only when device has NOT been personalized or RMA state
+        if ((exp_lc_o.lc_creator_seed_sw_rw_en_o == lc_ctrl_pkg::On && !is_personalized) ||
+            lc_state == DecLcStRma) begin
+          `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_creator_seed_sw_rw_en_o, lc_ctrl_pkg::On, err_msg)
+        end else begin
+          `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_creator_seed_sw_rw_en_o, lc_ctrl_pkg::Off, err_msg)
+        end
+        // lc_seed_hw_rd_en_o is ON only when device has been personalized or RMA state
+        if ((exp_lc_o.lc_seed_hw_rd_en_o == lc_ctrl_pkg::On && is_personalized) ||
+            lc_state == DecLcStRma) begin
+          `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_seed_hw_rd_en_o, lc_ctrl_pkg::On, err_msg)
+        end else begin
+          `DV_CHECK_EQ(cfg.lc_ctrl_vif.lc_seed_hw_rd_en_o, lc_ctrl_pkg::Off, err_msg)
+        end
       end
     end
   endtask
diff --git a/hw/ip/lc_ctrl/dv/tb.sv b/hw/ip/lc_ctrl/dv/tb.sv
index 07a1397..d4abb05 100644
--- a/hw/ip/lc_ctrl/dv/tb.sv
+++ b/hw/ip/lc_ctrl/dv/tb.sv
@@ -35,48 +35,56 @@
 
   // dut
   lc_ctrl dut (
-    .clk_i                 (clk      ),
-    .rst_ni                (rst_n    ),
+    .clk_i                      (clk      ),
+    .rst_ni                     (rst_n    ),
 
-    .tl_i                  (tl_if.h2d),
-    .tl_o                  (tl_if.d2h),
-    .alert_rx_i            (alert_rx ),
-    .alert_tx_o            (alert_tx ),
+    .tl_i                       (tl_if.h2d),
+    .tl_o                       (tl_if.d2h),
+    .alert_rx_i                 (alert_rx ),
+    .alert_tx_o                 (alert_tx ),
 
-    .jtag_i                (0),
-    .jtag_o                (),
+    .jtag_i                     (4'b0),
+    .jtag_o                     (),
+    .scanmode_i                 (1'b0     ),
 
-    .esc_wipe_secrets_tx_i ({2'b01}),
-    .esc_wipe_secrets_rx_o (),
-    .esc_scrap_state_tx_i  ({2'b01}),
-    .esc_scrap_state_rx_o  (),
+    .esc_wipe_secrets_tx_i      ({2'b01}),
+    .esc_wipe_secrets_rx_o      (),
+    .esc_scrap_state_tx_i       ({2'b01}),
+    .esc_scrap_state_rx_o       (),
 
-    .pwr_lc_i              (pwr_lc[LcPwrInitReq]),
-    .pwr_lc_o              (pwr_lc[LcPwrDoneRsp:LcPwrIdleRsp]),
+    .pwr_lc_i                   (pwr_lc[LcPwrInitReq]),
+    .pwr_lc_o                   (pwr_lc[LcPwrDoneRsp:LcPwrIdleRsp]),
 
-    .lc_otp_program_o      (),
-    .lc_otp_program_i      ('b01),
+    .lc_otp_program_o           (),
+    .lc_otp_program_i           (2'b01),
 
-    .lc_otp_token_o        (),
-    .lc_otp_token_i        (lc_rsp),
+    .lc_otp_token_o             (),
+    .lc_otp_token_i             (lc_rsp),
 
-    .otp_lc_data_i         (lc_ctrl_if.otp_i),
+    .otp_lc_data_i              (lc_ctrl_if.otp_i),
 
-    .lc_dft_en_o           (lc_ctrl_if.lc_dft_en_o),
-    .lc_nvm_debug_en_o     (lc_ctrl_if.lc_nvm_debug_en_o),
-    .lc_hw_debug_en_o      (lc_ctrl_if.lc_hw_debug_en_o),
-    .lc_cpu_en_o           (lc_ctrl_if.lc_cpu_en_o),
-    .lc_keymgr_en_o        (lc_ctrl_if.lc_keymgr_en_o),
-    .lc_escalate_en_o      (lc_ctrl_if.lc_escalate_en_o),
+    .lc_dft_en_o                (lc_ctrl_if.lc_dft_en_o),
+    .lc_nvm_debug_en_o          (lc_ctrl_if.lc_nvm_debug_en_o),
+    .lc_hw_debug_en_o           (lc_ctrl_if.lc_hw_debug_en_o),
+    .lc_cpu_en_o                (lc_ctrl_if.lc_cpu_en_o),
+    .lc_creator_seed_sw_rw_en_o (lc_ctrl_if.lc_creator_seed_sw_rw_en_o),
+    .lc_owner_seed_sw_rw_en_o   (lc_ctrl_if.lc_owner_seed_sw_rw_en_o),
+    .lc_iso_part_sw_rd_en_o     (lc_ctrl_if.lc_iso_part_sw_rd_en_o),
+    .lc_iso_part_sw_wr_en_o     (lc_ctrl_if.lc_iso_part_sw_wr_en_o),
+    .lc_seed_hw_rd_en_o         (lc_ctrl_if.lc_seed_hw_rd_en_o),
+    .lc_keymgr_en_o             (lc_ctrl_if.lc_keymgr_en_o),
+    .lc_escalate_en_o           (lc_ctrl_if.lc_escalate_en_o),
 
-    .lc_clk_byp_req_o      (),
-    .lc_clk_byp_ack_i      (lc_ctrl_pkg::On),
+    .lc_clk_byp_req_o           (),
+    .lc_clk_byp_ack_i           (lc_ctrl_pkg::On),
 
-    .lc_flash_rma_seed_o   (),
-    .lc_flash_rma_req_o    (),
-    .lc_flash_rma_ack_i    (lc_ctrl_pkg::Off),
+    .lc_flash_rma_seed_o        (),
+    .lc_flash_rma_req_o         (),
+    .lc_flash_rma_ack_i         (lc_ctrl_pkg::Off),
 
-    .otp_hw_cfg_i          (0)
+    .lc_keymgr_div_o            (),
+
+    .otp_hw_cfg_i               (lc_ctrl_if.otp_hw_cfg_i)
   );
 
   initial begin