[lc_ctrl] Reduce number of diversification groups to 3

Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/lc_ctrl/data/lc_ctrl.hjson b/hw/ip/lc_ctrl/data/lc_ctrl.hjson
index ebaba55..271d2b4 100644
--- a/hw/ip/lc_ctrl/data/lc_ctrl.hjson
+++ b/hw/ip/lc_ctrl/data/lc_ctrl.hjson
@@ -28,31 +28,19 @@
 
   param_list: [
     // Random netlist constants
-    { name:      "RndCnstLcKeymgrDivInv",
+    { name:      "RndCnstLcKeymgrDivInvalid",
       desc:      "Compile-time random bits for lc state group diversification value",
       type:      "lc_ctrl_pkg::lc_keymgr_div_t",
       randcount: "64",
       randtype:  "data",
     }
-    { name:      "RndCnstLcKeymgrDivTest",
+    { name:      "RndCnstLcKeymgrDivTestDevRma",
       desc:      "Compile-time random bits for lc state group diversification value",
       type:      "lc_ctrl_pkg::lc_keymgr_div_t",
       randcount: "64",
       randtype:  "data",
     }
-    { name:      "RndCnstLcKeymgrDivProd",
-      desc:      "Compile-time random bits for lc state group diversification value",
-      type:      "lc_ctrl_pkg::lc_keymgr_div_t",
-      randcount: "64",
-      randtype:  "data",
-    }
-    { name:      "RndCnstLcKeymgrDivDev",
-      desc:      "Compile-time random bits for lc state group diversification value",
-      type:      "lc_ctrl_pkg::lc_keymgr_div_t",
-      randcount: "64",
-      randtype:  "data",
-    }
-    { name:      "RndCnstLcKeymgrDivRma",
+    { name:      "RndCnstLcKeymgrDivProduction",
       desc:      "Compile-time random bits for lc state group diversification value",
       type:      "lc_ctrl_pkg::lc_keymgr_div_t",
       randcount: "64",
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl.sv
index cc20dc7..dfa5d45 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl.sv
@@ -16,11 +16,9 @@
   // Idcode value for the JTAG.
   parameter logic [31:0]          IdcodeValue  = 32'h00000001,
   // Random netlist constants
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivInv  = LcKeymgrDivWidth'(0),
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivTest = LcKeymgrDivWidth'(1),
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivProd = LcKeymgrDivWidth'(2),
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivDev  = LcKeymgrDivWidth'(3),
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivRma  = LcKeymgrDivWidth'(4)
+  parameter lc_keymgr_div_t RndCnstLcKeymgrDivInvalid    = LcKeymgrDivWidth'(0),
+  parameter lc_keymgr_div_t RndCnstLcKeymgrDivTestDevRma = LcKeymgrDivWidth'(1),
+  parameter lc_keymgr_div_t RndCnstLcKeymgrDivProduction = LcKeymgrDivWidth'(2)
 ) (
   input                                              clk_i,
   input                                              rst_ni,
@@ -464,11 +462,9 @@
   assign lc_flash_rma_seed_o = transition_token_q[RmaSeedWidth-1:0];
 
   lc_ctrl_fsm #(
-    .RndCnstLcKeymgrDivInv  ( RndCnstLcKeymgrDivInv  ),
-    .RndCnstLcKeymgrDivTest ( RndCnstLcKeymgrDivTest ),
-    .RndCnstLcKeymgrDivProd ( RndCnstLcKeymgrDivProd ),
-    .RndCnstLcKeymgrDivDev  ( RndCnstLcKeymgrDivDev  ),
-    .RndCnstLcKeymgrDivRma  ( RndCnstLcKeymgrDivRma  )
+    .RndCnstLcKeymgrDivInvalid    ( RndCnstLcKeymgrDivInvalid    ),
+    .RndCnstLcKeymgrDivTestDevRma ( RndCnstLcKeymgrDivTestDevRma ),
+    .RndCnstLcKeymgrDivProduction ( RndCnstLcKeymgrDivProduction )
   ) u_lc_ctrl_fsm (
     .clk_i,
     .rst_ni,
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_fsm.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_fsm.sv
index 0a1f2b3..249813c 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_fsm.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_fsm.sv
@@ -7,11 +7,9 @@
 module lc_ctrl_fsm
   import lc_ctrl_pkg::*;
 #(// Random netlist constants
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivInv  = LcKeymgrDivWidth'(0),
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivTest = LcKeymgrDivWidth'(1),
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivProd = LcKeymgrDivWidth'(2),
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivDev  = LcKeymgrDivWidth'(3),
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivRma  = LcKeymgrDivWidth'(4)
+  parameter lc_keymgr_div_t RndCnstLcKeymgrDivInvalid    = LcKeymgrDivWidth'(0),
+  parameter lc_keymgr_div_t RndCnstLcKeymgrDivTestDevRma = LcKeymgrDivWidth'(1),
+  parameter lc_keymgr_div_t RndCnstLcKeymgrDivProduction = LcKeymgrDivWidth'(2)
 ) (
   // This module is combinational, but we
   // need the clock and reset for the assertions.
@@ -423,11 +421,9 @@
 
   // LC signal decoder and broadcasting logic.
   lc_ctrl_signal_decode #(
-    .RndCnstLcKeymgrDivInv  ( RndCnstLcKeymgrDivInv  ),
-    .RndCnstLcKeymgrDivTest ( RndCnstLcKeymgrDivTest ),
-    .RndCnstLcKeymgrDivProd ( RndCnstLcKeymgrDivProd ),
-    .RndCnstLcKeymgrDivDev  ( RndCnstLcKeymgrDivDev  ),
-    .RndCnstLcKeymgrDivRma  ( RndCnstLcKeymgrDivRma  )
+    .RndCnstLcKeymgrDivInvalid    ( RndCnstLcKeymgrDivInvalid    ),
+    .RndCnstLcKeymgrDivTestDevRma ( RndCnstLcKeymgrDivTestDevRma ),
+    .RndCnstLcKeymgrDivProduction ( RndCnstLcKeymgrDivProduction )
   ) u_lc_ctrl_signal_decode (
     .clk_i,
     .rst_ni,
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv
index 6256640..40caf5d 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv
@@ -9,16 +9,12 @@
 #(
   // Random netlist constants
   // SCRAP, RAW, TEST_LOCKED*, INVALID
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivInv  = LcKeymgrDivWidth'(0),
-  // TEST_UNLOCKED*
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivTest = LcKeymgrDivWidth'(1),
+  parameter lc_keymgr_div_t RndCnstLcKeymgrDivInvalid    = LcKeymgrDivWidth'(0),
+  // TEST_UNLOCKED*, DEV, RMA
+  parameter lc_keymgr_div_t RndCnstLcKeymgrDivTestDevRma = LcKeymgrDivWidth'(1),
   // PROD, PROD_END
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivProd = LcKeymgrDivWidth'(2),
-  // DEV
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivDev  = LcKeymgrDivWidth'(3),
-  // RMA
-  parameter lc_keymgr_div_t RndCnstLcKeymgrDivRma  = LcKeymgrDivWidth'(4)
-) (
+  parameter lc_keymgr_div_t RndCnstLcKeymgrDivProduction = LcKeymgrDivWidth'(2)
+  ) (
   input                  clk_i,
   input                  rst_ni,
   // Life cycle state vector.
@@ -69,7 +65,7 @@
     lc_keymgr_en_d       = Off;
     lc_escalate_en_d     = Off;
     // Set to invalid diversification value by default.
-    lc_keymgr_div_d      = RndCnstLcKeymgrDivInv;
+    lc_keymgr_div_d      = RndCnstLcKeymgrDivInvalid;
     // The escalation life cycle signal is always decoded, no matter
     // which state we currently are in.
     if (esc_wipe_secrets_i) begin
@@ -98,7 +94,7 @@
           lc_nvm_debug_en_d = On;
           lc_hw_debug_en_d  = On;
           lc_cpu_en_d       = On;
-          lc_keymgr_div_d   = RndCnstLcKeymgrDivTest;
+          lc_keymgr_div_d      = RndCnstLcKeymgrDivTestDevRma;
           lc_iso_flash_wr_en_d = On;
         end
         ///////////////////////////////////////////////////////////////////
@@ -107,7 +103,7 @@
           lc_cpu_en_d          = On;
           lc_keymgr_en_d       = On;
           lc_provision_rd_en_d = On;
-          lc_keymgr_div_d      = RndCnstLcKeymgrDivProd;
+          lc_keymgr_div_d      = RndCnstLcKeymgrDivProduction;
           // Only allow provisioning if the defice has not yet been personalized.
           if (lc_id_state_i == LcIdBlank) begin
             lc_provision_wr_en_d = On;
@@ -120,7 +116,7 @@
           lc_cpu_en_d          = On;
           lc_keymgr_en_d       = On;
           lc_provision_rd_en_d = On;
-          lc_keymgr_div_d      = RndCnstLcKeymgrDivDev;
+          lc_keymgr_div_d      = RndCnstLcKeymgrDivTestDevRma;
           // Only allow provisioning if the defice has not yet been personalized.
           if (lc_id_state_i == LcIdBlank) begin
             lc_provision_wr_en_d = On;
@@ -135,7 +131,7 @@
           lc_cpu_en_d          = On;
           lc_keymgr_en_d       = On;
           lc_provision_rd_en_d = On;
-          lc_keymgr_div_d      = RndCnstLcKeymgrDivRma;
+          lc_keymgr_div_d      = RndCnstLcKeymgrDivTestDevRma;
           // Only allow provisioning if the defice has not yet been personalized.
           if (lc_id_state_i == LcIdBlank) begin
             lc_provision_wr_en_d = On;
@@ -175,7 +171,7 @@
       lc_iso_flash_wr_en_q <= Off;
       lc_keymgr_en_q       <= Off;
       lc_escalate_en_q     <= Off;
-      lc_keymgr_div_q      <= RndCnstLcKeymgrDivInv;
+      lc_keymgr_div_q      <= RndCnstLcKeymgrDivInvalid;
     end else begin
       lc_dft_en_q          <= lc_dft_en_d;
       lc_nvm_debug_en_q    <= lc_nvm_debug_en_d;
@@ -196,16 +192,10 @@
 
   // Need to make sure that the random netlist constants
   // are unique.
-  `ASSERT_INIT(LcKeymgrDivUnique0_A, !(RndCnstLcKeymgrDivInv  inside {RndCnstLcKeymgrDivTest,
-                                                                      RndCnstLcKeymgrDivProd,
-                                                                      RndCnstLcKeymgrDivDev,
-                                                                      RndCnstLcKeymgrDivRma}))
-  `ASSERT_INIT(LcKeymgrDivUnique1_A, !(RndCnstLcKeymgrDivTest inside {RndCnstLcKeymgrDivProd,
-                                                                      RndCnstLcKeymgrDivDev,
-                                                                      RndCnstLcKeymgrDivRma}))
-  `ASSERT_INIT(LcKeymgrDivUnique2_A, !(RndCnstLcKeymgrDivProd inside {RndCnstLcKeymgrDivDev,
-                                                                      RndCnstLcKeymgrDivRma}))
-  `ASSERT_INIT(LcKeymgrDivUnique3_A, !(RndCnstLcKeymgrDivDev  inside {RndCnstLcKeymgrDivRma}))
+  `ASSERT_INIT(LcKeymgrDivUnique0_A,
+      !(RndCnstLcKeymgrDivInvalid inside {RndCnstLcKeymgrDivTestDevRma,
+                                          RndCnstLcKeymgrDivProduction}))
+  `ASSERT_INIT(LcKeymgrDivUnique1_A, RndCnstLcKeymgrDivProduction != RndCnstLcKeymgrDivTestDevRma)
 
   `ASSERT(SignalsAreOffWhenNotEnabled_A,
       !lc_state_valid_i
@@ -218,7 +208,7 @@
       lc_provision_rd_en_o == Off &&
       lc_keymgr_en_o == Off &&
       lc_dft_en_o == Off &&
-      lc_keymgr_div_o == RndCnstLcKeymgrDivInv)
+      lc_keymgr_div_o == RndCnstLcKeymgrDivInvalid)
 
   `ASSERT(EscalationAlwaysDecoded_A,
       (lc_escalate_en_o == On) == $past(esc_wipe_secrets_i))