[lc_ctrl] Increase number of test states from 4 to 8

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 d03547e..f80250d 100644
--- a/hw/ip/lc_ctrl/data/lc_ctrl.hjson
+++ b/hw/ip/lc_ctrl/data/lc_ctrl.hjson
@@ -64,7 +64,7 @@
     { name:    "CsrLcStateWidth",
       desc:    "Number of life cycle state enum bits.",
       type:    "int"
-      default: "4",
+      default: "5",
       local:   "true"
     }
     { name:    "CsrLcCountWidth",
@@ -546,22 +546,54 @@
               desc:  "Unlocked test state where debug functions are enabled."
             }
             { value: "8",
+              name:  "TEST_LOCKED3",
+              desc:  "Locked test state where debug all functions are disabled."
+            }
+            { value: "9",
+              name:  "TEST_UNLOCKED4",
+              desc:  "Unlocked test state where debug functions are enabled."
+            }
+            { value: "10",
+              name:  "TEST_LOCKED4",
+              desc:  "Locked test state where debug all functions are disabled."
+            }
+            { value: "11",
+              name:  "TEST_UNLOCKED5",
+              desc:  "Unlocked test state where debug functions are enabled."
+            }
+            { value: "12",
+              name:  "TEST_LOCKED5",
+              desc:  "Locked test state where debug all functions are disabled."
+            }
+            { value: "13",
+              name:  "TEST_UNLOCKED6",
+              desc:  "Unlocked test state where debug functions are enabled."
+            }
+            { value: "14",
+              name:  "TEST_LOCKED6",
+              desc:  "Locked test state where debug all functions are disabled."
+            }
+            { value: "15",
+              name:  "TEST_UNLOCKED7",
+              desc:  "Unlocked test state where debug functions are enabled."
+            }
+            { value: "16",
               name:  "DEV",
               desc:  "Development life cycle state where limited debug functionality is available."
             }
-            { value: "9",
+            { value: "17",
               name:  "PROD",
               desc:  "Production life cycle state."
             }
-            { value: "10",
+            { value: "18",
               name:  "PROD_END",
-              desc:  "Production life cycle state."
+              desc:  "Same as PROD, but transition into RMA is not possible from this state."
             }
-            { value: "11",
+            { value: "19",
               name:  "RMA",
               desc:  "RMA life cycle state."
             }
-            { value: "12",
+            { value: "20",
               name:  "SCRAP",
               desc:  "SCRAP life cycle state where all functions are disabled."
             }
@@ -652,35 +684,67 @@
               desc:  "Unlocked test state where debug functions are enabled."
             }
             { value: "8",
+              name:  "TEST_LOCKED3",
+              desc:  "Locked test state where debug all functions are disabled."
+            }
+            { value: "9",
+              name:  "TEST_UNLOCKED4",
+              desc:  "Unlocked test state where debug functions are enabled."
+            }
+            { value: "10",
+              name:  "TEST_LOCKED4",
+              desc:  "Locked test state where debug all functions are disabled."
+            }
+            { value: "11",
+              name:  "TEST_UNLOCKED5",
+              desc:  "Unlocked test state where debug functions are enabled."
+            }
+            { value: "12",
+              name:  "TEST_LOCKED5",
+              desc:  "Locked test state where debug all functions are disabled."
+            }
+            { value: "13",
+              name:  "TEST_UNLOCKED6",
+              desc:  "Unlocked test state where debug functions are enabled."
+            }
+            { value: "14",
+              name:  "TEST_LOCKED6",
+              desc:  "Locked test state where debug all functions are disabled."
+            }
+            { value: "15",
+              name:  "TEST_UNLOCKED7",
+              desc:  "Unlocked test state where debug functions are enabled."
+            }
+            { value: "16",
               name:  "DEV",
               desc:  "Development life cycle state where limited debug functionality is available."
             }
-            { value: "9",
+            { value: "17",
               name:  "PROD",
               desc:  "Production life cycle state."
             }
-            { value: "10",
+            { value: "18",
               name:  "PROD_END",
               desc:  "Same as PROD, but transition into RMA is not possible from this state."
             }
-            { value: "11",
+            { value: "19",
               name:  "RMA",
               desc:  "RMA life cycle state."
             }
-            { value: "12",
+            { value: "20",
               name:  "SCRAP",
               desc:  "SCRAP life cycle state where all functions are disabled."
             }
             // The following states are temporary.
-            { value: "13",
+            { value: "21",
               name:  "POST_TRANSITION",
               desc:  "This state is temporary and behaves the same way as SCRAP."
             }
-            { value: "14",
+            { value: "22",
               name:  "ESCALATE",
               desc:  "This state is temporary and behaves the same way as SCRAP."
             }
-            { value: "15",
+            { value: "23",
               name:  "INVALID",
               desc:   '''
                       This state is reported when the life cycle state encoding is invalid.
diff --git a/hw/ip/lc_ctrl/data/lc_ctrl_state.hjson b/hw/ip/lc_ctrl/data/lc_ctrl_state.hjson
index f24dbea..c463f41 100644
--- a/hw/ip/lc_ctrl/data/lc_ctrl_state.hjson
+++ b/hw/ip/lc_ctrl/data/lc_ctrl_state.hjson
@@ -49,40 +49,56 @@
     // Life cycle state definition.
     // From least to most significant OTP word in ascending order.
     lc_state : {
-        RAW            : [ '0',  '0',  '0',  '0', '0',  '0',  '0',   '0',  '0',  '0',   '0',   '0'],
-        TEST_UNLOCKED0 : ['B0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11'],
-        TEST_LOCKED0   : ['B0', 'B1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11'],
-        TEST_UNLOCKED1 : ['B0', 'B1', 'B2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11'],
-        TEST_LOCKED1   : ['B0', 'B1', 'B2', 'B3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11'],
-        TEST_UNLOCKED2 : ['B0', 'B1', 'B2', 'B3', 'B4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11'],
-        TEST_LOCKED2   : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11'],
-        TEST_UNLOCKED3 : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'A7', 'A8', 'A9', 'A10', 'A11'],
-        DEV            : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'A8', 'A9', 'A10', 'A11'],
-        PROD           : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'A7', 'B8', 'A9', 'A10', 'A11'],
-        PROD_END       : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'A7', 'A8', 'B9', 'A10', 'A11'],
-        RMA            : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'A9', 'B10', 'B11'],
-        SCRAP          : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11']
+        RAW            : [ '0',  '0',  '0',  '0', '0',  '0',  '0',   '0',  '0',  '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',],
+        TEST_UNLOCKED0 : ['B0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_LOCKED0   : ['B0', 'B1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_UNLOCKED1 : ['B0', 'B1', 'B2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_LOCKED1   : ['B0', 'B1', 'B2', 'B3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_UNLOCKED2 : ['B0', 'B1', 'B2', 'B3', 'B4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_LOCKED2   : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_UNLOCKED3 : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_LOCKED3   : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_UNLOCKED4 : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_LOCKED4   : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_UNLOCKED5 : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_LOCKED5   : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_UNLOCKED6 : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_LOCKED6   : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'A14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        TEST_UNLOCKED7 : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'B14', 'A15', 'A16', 'A17', 'A18', 'A19',],
+        DEV            : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'B14', 'B15', 'A16', 'A17', 'A18', 'A19',],
+        PROD           : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'B14', 'A15', 'B16', 'A17', 'A18', 'A19',],
+        PROD_END       : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'B14', 'A15', 'A16', 'B17', 'A18', 'A19',],
+        RMA            : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'A17', 'B18', 'B19',],
+        SCRAP          : ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'B17', 'B18', 'B19',]
     }
 
     // Life cycle state transition counter definition.
     // From least to most significant OTP word in ascending order.
     lc_cnt : {
-        0   : [ '0',  '0',  '0',  '0', '0',  '0',  '0',   '0',  '0',  '0',   '0',   '0',   '0',   '0',   '0',   '0'],
-        1   : ['D0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        2   : ['D0', 'D1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        3   : ['D0', 'D1', 'D2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        4   : ['D0', 'D1', 'D2', 'D3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        5   : ['D0', 'D1', 'D2', 'D3', 'D4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        6   : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        7   : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        8   : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        9   : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        10  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        11  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'C11', 'C12', 'C13', 'C14', 'C15'],
-        12  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'C12', 'C13', 'C14', 'C15'],
-        13  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'C13', 'C14', 'C15'],
-        14  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'C14', 'C15'],
-        15  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'C15'],
-        16  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15']
+        0   : [ '0',  '0',  '0',  '0', '0',  '0',  '0',   '0',  '0',  '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0',   '0'],
+        1   : ['D0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        2   : ['D0', 'D1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        3   : ['D0', 'D1', 'D2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        4   : ['D0', 'D1', 'D2', 'D3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        5   : ['D0', 'D1', 'D2', 'D3', 'D4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        6   : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        7   : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        8   : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        9   : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        10  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        11  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        12  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        13  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        14  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        15  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        16  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        17  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        18  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'C18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        19  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'C19', 'C20', 'C21', 'C22', 'C23'],
+        20  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19', 'C20', 'C21', 'C22', 'C23'],
+        21  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19', 'D20', 'C21', 'C22', 'C23'],
+        22  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'C22', 'C23'],
+        23  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'C23'],
+        24  : ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'D23'],
     }
 }
diff --git a/hw/ip/lc_ctrl/doc/_index.md b/hw/ip/lc_ctrl/doc/_index.md
index 6132773..2581676 100644
--- a/hw/ip/lc_ctrl/doc/_index.md
+++ b/hw/ip/lc_ctrl/doc/_index.md
@@ -98,7 +98,7 @@
 For conditional transitions, there is a limit to how many times they can be attempted.
 This is to prevent an attacker from brute-forcing any specific token, as this also helps to reduce the overall required token size.
 
-For OpenTitan, the total amount of state transitions and transition attempts is limited to 16.
+For OpenTitan, the total amount of state transitions and transition attempts is limited to 24.
 Once this number is reached, the life cycle controller rejects further attempts, effectively locking the device into its current state.
 
 The token counters are maintained in the OTP.
@@ -527,7 +527,7 @@
 
 ### Transition Counter Encoding
 
-The life cycle transition counter has 16 strokes where each stroke maps to one 16bit OTP word.
+The life cycle transition counter has 24 strokes where each stroke maps to one 16bit OTP word.
 The strokes are similarly encoded as the life cycle state in the sense that upon the first transition attempt, all words are initialized with unique Cx values that can later be overwritten with unique Dx values without producing an ECC error.
 
 {{< snippet "lc_ctrl_counter_table.md" >}}
diff --git a/hw/ip/lc_ctrl/doc/lc_ctrl_counter_table.md b/hw/ip/lc_ctrl/doc/lc_ctrl_counter_table.md
index 79e4677..5bc6d75 100644
--- a/hw/ip/lc_ctrl/doc/lc_ctrl_counter_table.md
+++ b/hw/ip/lc_ctrl/doc/lc_ctrl_counter_table.md
@@ -20,6 +20,14 @@
     <td><strong>13</strong></td>
     <td><strong>14</strong></td>
     <td><strong>15</strong></td>
+    <td><strong>16</strong></td>
+    <td><strong>17</strong></td>
+    <td><strong>18</strong></td>
+    <td><strong>19</strong></td>
+    <td><strong>20</strong></td>
+    <td><strong>21</strong></td>
+    <td><strong>22</strong></td>
+    <td><strong>23</strong></td>
   </tr>
   <tr>
     <td style="text-align:left">0 strokes</td>
@@ -39,6 +47,14 @@
     <td style="background:#bbedc2">0</td>
     <td style="background:#bbedc2">0</td>
     <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
   </tr>
   <tr>
    <td style="text-align:left">1 stroke</td>
@@ -57,7 +73,15 @@
     <td style="background:#c9daf8">C12</td>
     <td style="background:#c9daf8">C13</td>
     <td style="background:#c9daf8">C14</td>
-    <td style="background:#c9daf8">D15</td>
+    <td style="background:#c9daf8">C15</td>
+    <td style="background:#c9daf8">C16</td>
+    <td style="background:#c9daf8">C17</td>
+    <td style="background:#c9daf8">C18</td>
+    <td style="background:#c9daf8">C19</td>
+    <td style="background:#c9daf8">C20</td>
+    <td style="background:#c9daf8">C21</td>
+    <td style="background:#c9daf8">C22</td>
+    <td style="background:#c9daf8">C23</td>
   </tr>
   <tr>
    <td style="text-align:left">2 strokes</td>
@@ -77,6 +101,14 @@
     <td style="background:#c9daf8">C13</td>
     <td style="background:#c9daf8">C14</td>
     <td style="background:#c9daf8">C15</td>
+    <td style="background:#c9daf8">C16</td>
+    <td style="background:#c9daf8">C17</td>
+    <td style="background:#c9daf8">C18</td>
+    <td style="background:#c9daf8">C19</td>
+    <td style="background:#c9daf8">C20</td>
+    <td style="background:#c9daf8">C21</td>
+    <td style="background:#c9daf8">C22</td>
+    <td style="background:#c9daf8">C23</td>
   </tr>
   <tr>
    <td style="text-align:left">3 strokes</td>
@@ -96,9 +128,17 @@
     <td style="background:#c9daf8">C13</td>
     <td style="background:#c9daf8">C14</td>
     <td style="background:#c9daf8">C15</td>
+    <td style="background:#c9daf8">C16</td>
+    <td style="background:#c9daf8">C17</td>
+    <td style="background:#c9daf8">C18</td>
+    <td style="background:#c9daf8">C19</td>
+    <td style="background:#c9daf8">C20</td>
+    <td style="background:#c9daf8">C21</td>
+    <td style="background:#c9daf8">C22</td>
+    <td style="background:#c9daf8">C23</td>
   </tr>
   <tr>
-   <td style="text-align:left">16 strokes</td>
+   <td style="text-align:left">24 strokes</td>
     <td style="background:#dadce0">D0</td>
     <td style="background:#dadce0">D1</td>
     <td style="background:#dadce0">D2</td>
@@ -115,5 +155,13 @@
     <td style="background:#dadce0">D13</td>
     <td style="background:#dadce0">D14</td>
     <td style="background:#dadce0">D15</td>
+    <td style="background:#dadce0">D16</td>
+    <td style="background:#dadce0">D17</td>
+    <td style="background:#dadce0">D18</td>
+    <td style="background:#dadce0">D19</td>
+    <td style="background:#dadce0">D20</td>
+    <td style="background:#dadce0">D21</td>
+    <td style="background:#dadce0">D22</td>
+    <td style="background:#dadce0">D23</td>
   </tr>
 </table>
\ No newline at end of file
diff --git a/hw/ip/lc_ctrl/doc/lc_ctrl_encoding_table.md b/hw/ip/lc_ctrl/doc/lc_ctrl_encoding_table.md
index c0a0047..68dac6e 100644
--- a/hw/ip/lc_ctrl/doc/lc_ctrl_encoding_table.md
+++ b/hw/ip/lc_ctrl/doc/lc_ctrl_encoding_table.md
@@ -16,6 +16,14 @@
     <td><strong>9</strong></td>
     <td><strong>10</strong></td>
     <td><strong>11</strong></td>
+    <td><strong>12</strong></td>
+    <td><strong>13</strong></td>
+    <td><strong>14</strong></td>
+    <td><strong>15</strong></td>
+    <td><strong>16</strong></td>
+    <td><strong>17</strong></td>
+    <td><strong>18</strong></td>
+    <td><strong>19</strong></td>
   </tr>
   <tr>
     <td style="text-align:left">RAW</td>
@@ -31,6 +39,14 @@
     <td style="background:#bbedc2">0</td>
     <td style="background:#bbedc2">0</td>
     <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
+    <td style="background:#bbedc2">0</td>
   </tr>
   <tr>
    <td style="text-align:left">TEST_UNLOCKED0</td>
@@ -46,6 +62,14 @@
     <td style="background:#c9daf8">A9</td>
     <td style="background:#c9daf8">A10</td>
     <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
     <td style="text-align:left">TEST_LOCKED0</td>
@@ -61,6 +85,14 @@
     <td style="background:#c9daf8">A9</td>
     <td style="background:#c9daf8">A10</td>
     <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
     <td style="text-align:left">TEST_UNLOCKED1</td>
@@ -76,6 +108,14 @@
     <td style="background:#c9daf8">A9</td>
     <td style="background:#c9daf8">A10</td>
     <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
     <td style="text-align:left">TEST_LOCKED1</td>
@@ -91,6 +131,14 @@
     <td style="background:#c9daf8">A9</td>
     <td style="background:#c9daf8">A10</td>
     <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
     <td style="text-align:left">TEST_UNLOCKED2</td>
@@ -106,6 +154,14 @@
     <td style="background:#c9daf8">A9</td>
     <td style="background:#c9daf8">A10</td>
     <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
     <td style="text-align:left">TEST_LOCKED2</td>
@@ -121,6 +177,14 @@
     <td style="background:#c9daf8">A9</td>
     <td style="background:#c9daf8">A10</td>
     <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
     <td style="text-align:left">TEST_UNLOCKED3</td>
@@ -136,9 +200,17 @@
     <td style="background:#c9daf8">A9</td>
     <td style="background:#c9daf8">A10</td>
     <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
-    <td style="text-align:left">DEV</td>
+    <td style="text-align:left">TEST_LOCKED3</td>
     <td style="background:#dadce0">B0</td>
     <td style="background:#dadce0">B1</td>
     <td style="background:#dadce0">B2</td>
@@ -151,6 +223,200 @@
     <td style="background:#c9daf8">A9</td>
     <td style="background:#c9daf8">A10</td>
     <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
+  </tr>
+  <tr>
+    <td style="text-align:left">TEST_UNLOCKED4</td>
+    <td style="background:#dadce0">B0</td>
+    <td style="background:#dadce0">B1</td>
+    <td style="background:#dadce0">B2</td>
+    <td style="background:#dadce0">B3</td>
+    <td style="background:#dadce0">B4</td>
+    <td style="background:#dadce0">B5</td>
+    <td style="background:#dadce0">B6</td>
+    <td style="background:#dadce0">B7</td>
+    <td style="background:#dadce0">B8</td>
+    <td style="background:#c9daf8">A9</td>
+    <td style="background:#c9daf8">A10</td>
+    <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
+  </tr>
+  <tr>
+    <td style="text-align:left">TEST_LOCKED4</td>
+    <td style="background:#dadce0">B0</td>
+    <td style="background:#dadce0">B1</td>
+    <td style="background:#dadce0">B2</td>
+    <td style="background:#dadce0">B3</td>
+    <td style="background:#dadce0">B4</td>
+    <td style="background:#dadce0">B5</td>
+    <td style="background:#dadce0">B6</td>
+    <td style="background:#dadce0">B7</td>
+    <td style="background:#dadce0">B8</td>
+    <td style="background:#dadce0">B9</td>
+    <td style="background:#c9daf8">A10</td>
+    <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
+  </tr>
+  <tr>
+    <td style="text-align:left">TEST_UNLOCKED5</td>
+    <td style="background:#dadce0">B0</td>
+    <td style="background:#dadce0">B1</td>
+    <td style="background:#dadce0">B2</td>
+    <td style="background:#dadce0">B3</td>
+    <td style="background:#dadce0">B4</td>
+    <td style="background:#dadce0">B5</td>
+    <td style="background:#dadce0">B6</td>
+    <td style="background:#dadce0">B7</td>
+    <td style="background:#dadce0">B8</td>
+    <td style="background:#dadce0">B9</td>
+    <td style="background:#dadce0">B10</td>
+    <td style="background:#c9daf8">A11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
+  </tr>
+  <tr>
+    <td style="text-align:left">TEST_LOCKED5</td>
+    <td style="background:#dadce0">B0</td>
+    <td style="background:#dadce0">B1</td>
+    <td style="background:#dadce0">B2</td>
+    <td style="background:#dadce0">B3</td>
+    <td style="background:#dadce0">B4</td>
+    <td style="background:#dadce0">B5</td>
+    <td style="background:#dadce0">B6</td>
+    <td style="background:#dadce0">B7</td>
+    <td style="background:#dadce0">B8</td>
+    <td style="background:#dadce0">B9</td>
+    <td style="background:#dadce0">B10</td>
+    <td style="background:#dadce0">B11</td>
+    <td style="background:#c9daf8">A12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
+  </tr>
+  <tr>
+    <td style="text-align:left">TEST_UNLOCKED6</td>
+    <td style="background:#dadce0">B0</td>
+    <td style="background:#dadce0">B1</td>
+    <td style="background:#dadce0">B2</td>
+    <td style="background:#dadce0">B3</td>
+    <td style="background:#dadce0">B4</td>
+    <td style="background:#dadce0">B5</td>
+    <td style="background:#dadce0">B6</td>
+    <td style="background:#dadce0">B7</td>
+    <td style="background:#dadce0">B8</td>
+    <td style="background:#dadce0">B9</td>
+    <td style="background:#dadce0">B10</td>
+    <td style="background:#dadce0">B11</td>
+    <td style="background:#dadce0">B12</td>
+    <td style="background:#c9daf8">A13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
+  </tr>
+  <tr>
+    <td style="text-align:left">TEST_LOCKED6</td>
+    <td style="background:#dadce0">B0</td>
+    <td style="background:#dadce0">B1</td>
+    <td style="background:#dadce0">B2</td>
+    <td style="background:#dadce0">B3</td>
+    <td style="background:#dadce0">B4</td>
+    <td style="background:#dadce0">B5</td>
+    <td style="background:#dadce0">B6</td>
+    <td style="background:#dadce0">B7</td>
+    <td style="background:#dadce0">B8</td>
+    <td style="background:#dadce0">B9</td>
+    <td style="background:#dadce0">B10</td>
+    <td style="background:#dadce0">B11</td>
+    <td style="background:#dadce0">B12</td>
+    <td style="background:#dadce0">B13</td>
+    <td style="background:#c9daf8">A14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
+  </tr>
+  <tr>
+    <td style="text-align:left">TEST_UNLOCKED7</td>
+    <td style="background:#dadce0">B0</td>
+    <td style="background:#dadce0">B1</td>
+    <td style="background:#dadce0">B2</td>
+    <td style="background:#dadce0">B3</td>
+    <td style="background:#dadce0">B4</td>
+    <td style="background:#dadce0">B5</td>
+    <td style="background:#dadce0">B6</td>
+    <td style="background:#dadce0">B7</td>
+    <td style="background:#dadce0">B8</td>
+    <td style="background:#dadce0">B9</td>
+    <td style="background:#dadce0">B10</td>
+    <td style="background:#dadce0">B11</td>
+    <td style="background:#dadce0">B12</td>
+    <td style="background:#dadce0">B13</td>
+    <td style="background:#dadce0">B14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
+  </tr>
+
+
+  <tr>
+    <td style="text-align:left">DEV</td>
+    <td style="background:#dadce0">B0</td>
+    <td style="background:#dadce0">B1</td>
+    <td style="background:#dadce0">B2</td>
+    <td style="background:#dadce0">B3</td>
+    <td style="background:#dadce0">B4</td>
+    <td style="background:#dadce0">B5</td>
+    <td style="background:#dadce0">B6</td>
+    <td style="background:#dadce0">B7</td>
+    <td style="background:#dadce0">B8</td>
+    <td style="background:#dadce0">B9</td>
+    <td style="background:#dadce0">B10</td>
+    <td style="background:#dadce0">B11</td>
+    <td style="background:#dadce0">B12</td>
+    <td style="background:#dadce0">B13</td>
+    <td style="background:#dadce0">B14</td>
+    <td style="background:#dadce0">B15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
     <td style="text-align:left">PROD</td>
@@ -161,11 +427,19 @@
     <td style="background:#dadce0">B4</td>
     <td style="background:#dadce0">B5</td>
     <td style="background:#dadce0">B6</td>
-    <td style="background:#c9daf8">A7</td>
+    <td style="background:#dadce0">B7</td>
     <td style="background:#dadce0">B8</td>
-    <td style="background:#c9daf8">A9</td>
-    <td style="background:#c9daf8">A10</td>
-    <td style="background:#c9daf8">A11</td>
+    <td style="background:#dadce0">B9</td>
+    <td style="background:#dadce0">B10</td>
+    <td style="background:#dadce0">B11</td>
+    <td style="background:#dadce0">B12</td>
+    <td style="background:#dadce0">B13</td>
+    <td style="background:#dadce0">B14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#dadce0">B16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
     <td style="text-align:left">PROD_END</td>
@@ -176,11 +450,19 @@
     <td style="background:#dadce0">B4</td>
     <td style="background:#dadce0">B5</td>
     <td style="background:#dadce0">B6</td>
-    <td style="background:#c9daf8">A7</td>
-    <td style="background:#c9daf8">A8</td>
+    <td style="background:#dadce0">B7</td>
+    <td style="background:#dadce0">B8</td>
     <td style="background:#dadce0">B9</td>
-    <td style="background:#c9daf8">A10</td>
-    <td style="background:#c9daf8">A11</td>
+    <td style="background:#dadce0">B10</td>
+    <td style="background:#dadce0">B11</td>
+    <td style="background:#dadce0">B12</td>
+    <td style="background:#dadce0">B13</td>
+    <td style="background:#dadce0">B14</td>
+    <td style="background:#c9daf8">A15</td>
+    <td style="background:#c9daf8">A16</td>
+    <td style="background:#dadce0">B17</td>
+    <td style="background:#c9daf8">A18</td>
+    <td style="background:#c9daf8">A19</td>
   </tr>
   <tr>
     <td style="text-align:left">RMA</td>
@@ -193,9 +475,17 @@
     <td style="background:#dadce0">B6</td>
     <td style="background:#dadce0">B7</td>
     <td style="background:#dadce0">B8</td>
-    <td style="background:#c9daf8">A9</td>
+    <td style="background:#dadce0">B9</td>
     <td style="background:#dadce0">B10</td>
     <td style="background:#dadce0">B11</td>
+    <td style="background:#dadce0">B12</td>
+    <td style="background:#dadce0">B13</td>
+    <td style="background:#dadce0">B14</td>
+    <td style="background:#dadce0">B15</td>
+    <td style="background:#dadce0">B16</td>
+    <td style="background:#c9daf8">A17</td>
+    <td style="background:#dadce0">B18</td>
+    <td style="background:#dadce0">B19</td>
   </tr>
   <tr>
     <td style="text-align:left">SCRAP</td>
@@ -211,5 +501,13 @@
     <td style="background:#dadce0">B9</td>
     <td style="background:#dadce0">B10</td>
     <td style="background:#dadce0">B11</td>
+    <td style="background:#dadce0">B12</td>
+    <td style="background:#dadce0">B13</td>
+    <td style="background:#dadce0">B14</td>
+    <td style="background:#dadce0">B15</td>
+    <td style="background:#dadce0">B16</td>
+    <td style="background:#dadce0">B17</td>
+    <td style="background:#dadce0">B18</td>
+    <td style="background:#dadce0">B19</td>
   </tr>
 </table>
\ No newline at end of file
diff --git a/hw/ip/lc_ctrl/dv/env/lc_ctrl_dv_utils_pkg.sv b/hw/ip/lc_ctrl/dv/env/lc_ctrl_dv_utils_pkg.sv
index ba34912..89e39fd 100644
--- a/hw/ip/lc_ctrl/dv/env/lc_ctrl_dv_utils_pkg.sv
+++ b/hw/ip/lc_ctrl/dv/env/lc_ctrl_dv_utils_pkg.sv
@@ -18,22 +18,88 @@
     DecLcStProdEnd: {DecLcStScrap},
     DecLcStProd:    {DecLcStScrap, DecLcStRma},
     DecLcStDev:     {DecLcStScrap, DecLcStRma},
-    DecLcStTestUnlocked3: {DecLcStScrap, DecLcStRma, DecLcStProdEnd, DecLcStProd, DecLcStDev},
-    DecLcStTestUnlocked2: {DecLcStScrap, DecLcStProdEnd, DecLcStProd, DecLcStDev,
-                           DecLcStTestLocked2},
+    DecLcStTestUnlocked7: {DecLcStScrap, DecLcStRma, DecLcStProdEnd, DecLcStProd, DecLcStDev},
+    DecLcStTestUnlocked6: {DecLcStScrap, DecLcStRma, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                           DecLcStTestLocked6},
+    DecLcStTestUnlocked5: {DecLcStScrap, DecLcStRma, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                           DecLcStTestLocked6, DecLcStTestLocked5},
+    DecLcStTestUnlocked4: {DecLcStScrap, DecLcStRma, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                           DecLcStTestLocked6, DecLcStTestLocked5, DecLcStTestLocked4},
+    DecLcStTestUnlocked3: {DecLcStScrap, DecLcStRma, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                           DecLcStTestLocked6, DecLcStTestLocked5, DecLcStTestLocked4,
+                           DecLcStTestLocked3},
+    DecLcStTestUnlocked2: {DecLcStScrap, DecLcStRma, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                           DecLcStTestLocked6, DecLcStTestLocked5, DecLcStTestLocked4,
+                           DecLcStTestLocked3, DecLcStTestLocked2},
     DecLcStTestUnlocked1: {DecLcStScrap, DecLcStRma, DecLcStProdEnd, DecLcStProd, DecLcStDev,
-                           DecLcStTestLocked2, DecLcStTestLocked1},
+                           DecLcStTestLocked6, DecLcStTestLocked5, DecLcStTestLocked4,
+                           DecLcStTestLocked3, DecLcStTestLocked2, DecLcStTestLocked1},
     DecLcStTestUnlocked0: {DecLcStScrap, DecLcStRma, DecLcStProdEnd, DecLcStProd, DecLcStDev,
-                           DecLcStTestLocked2, DecLcStTestLocked1, DecLcStTestLocked0},
-    DecLcStTestLocked2: {DecLcStScrap, DecLcStProdEnd, DecLcStProd,
-                         DecLcStDev, DecLcStTestUnlocked3},
+                           DecLcStTestLocked6, DecLcStTestLocked5, DecLcStTestLocked4,
+                           DecLcStTestLocked3, DecLcStTestLocked2, DecLcStTestLocked1,
+                           DecLcStTestLocked0},
+    DecLcStTestLocked6: {DecLcStScrap, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                         DecLcStTestUnlocked7},
+    DecLcStTestLocked5: {DecLcStScrap, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                         DecLcStTestUnlocked7, DecLcStTestUnlocked6},
+    DecLcStTestLocked4: {DecLcStScrap, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                         DecLcStTestUnlocked7, DecLcStTestUnlocked6, DecLcStTestUnlocked5},
+    DecLcStTestLocked3: {DecLcStScrap, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                         DecLcStTestUnlocked7, DecLcStTestUnlocked6, DecLcStTestUnlocked5,
+                         DecLcStTestUnlocked4},
+    DecLcStTestLocked2: {DecLcStScrap, DecLcStProdEnd, DecLcStProd, DecLcStDev,
+                         DecLcStTestUnlocked7, DecLcStTestUnlocked6, DecLcStTestUnlocked5,
+                         DecLcStTestUnlocked4, DecLcStTestUnlocked3},
     DecLcStTestLocked1: {DecLcStScrap, DecLcStProdEnd, DecLcStProd, DecLcStDev,
-                         DecLcStTestUnlocked3, DecLcStTestUnlocked2},
+                         DecLcStTestUnlocked7, DecLcStTestUnlocked6, DecLcStTestUnlocked5,
+                         DecLcStTestUnlocked4, DecLcStTestUnlocked3, DecLcStTestUnlocked2},
     DecLcStTestLocked0: {DecLcStScrap, DecLcStProdEnd, DecLcStProd, DecLcStDev,
-                         DecLcStTestUnlocked3, DecLcStTestUnlocked2, DecLcStTestUnlocked1},
-    DecLcStRaw: {DecLcStScrap, DecLcStTestUnlocked2, DecLcStTestUnlocked1, DecLcStTestUnlocked0}
+                         DecLcStTestUnlocked7, DecLcStTestUnlocked6, DecLcStTestUnlocked5,
+                         DecLcStTestUnlocked4, DecLcStTestUnlocked3, DecLcStTestUnlocked2,
+                         DecLcStTestUnlocked1},
+    DecLcStRaw: {DecLcStScrap, DecLcStTestUnlocked7, DecLcStTestUnlocked6, DecLcStTestUnlocked5,
+                 DecLcStTestUnlocked4, DecLcStTestUnlocked3, DecLcStTestUnlocked2,
+                 DecLcStTestUnlocked1, DecLcStTestUnlocked0}
   };
 
+
+  // Checks whether the current state is a test unlocked state within the given index range.
+  function automatic bit is_test_unlocked_state(dec_lc_state_e curr_state, int first, int last);
+  begin
+    int index;
+    index = (curr_state - DecLcStTestUnlocked0)/2;
+    case (curr_state)
+      DecLcStTestUnlocked0,
+      DecLcStTestUnlocked1,
+      DecLcStTestUnlocked2,
+      DecLcStTestUnlocked3,
+      DecLcStTestUnlocked4,
+      DecLcStTestUnlocked5,
+      DecLcStTestUnlocked6,
+      DecLcStTestUnlocked7: return (index >= first) && (index <= last);
+      default: return 0;
+    endcase
+  end
+  endfunction
+
+  // Checks whether the current state is a test locked state within the given index range.
+  function automatic bit is_test_locked_state(dec_lc_state_e curr_state, int first, int last);
+  begin
+    int index;
+    index = (curr_state - DecLcStTestLocked0)/2;
+    case (curr_state)
+      DecLcStTestLocked0,
+      DecLcStTestLocked1,
+      DecLcStTestLocked2,
+      DecLcStTestLocked3,
+      DecLcStTestLocked4,
+      DecLcStTestLocked5,
+      DecLcStTestLocked6: return (index >= first) && (index <= last);
+      default: return 0;
+    endcase
+  end
+  endfunction
+
   function automatic dec_lc_state_e dec_lc_state(lc_state_e curr_state);
     case (curr_state)
       LcStRaw:           return DecLcStRaw;
@@ -44,6 +110,14 @@
       LcStTestUnlocked2: return DecLcStTestUnlocked2;
       LcStTestLocked2:   return DecLcStTestLocked2;
       LcStTestUnlocked3: return DecLcStTestUnlocked3;
+      LcStTestLocked3:   return DecLcStTestLocked3;
+      LcStTestUnlocked4: return DecLcStTestUnlocked4;
+      LcStTestLocked4:   return DecLcStTestLocked4;
+      LcStTestUnlocked5: return DecLcStTestUnlocked5;
+      LcStTestLocked5:   return DecLcStTestLocked5;
+      LcStTestUnlocked6: return DecLcStTestUnlocked6;
+      LcStTestLocked6:   return DecLcStTestLocked6;
+      LcStTestUnlocked7: return DecLcStTestUnlocked7;
       LcStDev:           return DecLcStDev;
       LcStProd:          return DecLcStProd;
       LcStProdEnd:       return DecLcStProdEnd;
@@ -63,6 +137,14 @@
       DecLcStTestUnlocked2: return LcStTestUnlocked2;
       DecLcStTestLocked2:   return LcStTestLocked2;
       DecLcStTestUnlocked3: return LcStTestUnlocked3;
+      DecLcStTestLocked3:   return LcStTestLocked3;
+      DecLcStTestUnlocked4: return LcStTestUnlocked4;
+      DecLcStTestLocked4:   return LcStTestLocked4;
+      DecLcStTestUnlocked5: return LcStTestUnlocked5;
+      DecLcStTestLocked5:   return LcStTestLocked5;
+      DecLcStTestUnlocked6: return LcStTestUnlocked6;
+      DecLcStTestLocked6:   return LcStTestLocked6;
+      DecLcStTestUnlocked7: return LcStTestUnlocked7;
       DecLcStDev:           return LcStDev;
       DecLcStProd:          return LcStProd;
       DecLcStProdEnd:       return LcStProdEnd;
@@ -91,6 +173,14 @@
       LcCnt14 : return 14;
       LcCnt15 : return 15;
       LcCnt16 : return 16;
+      LcCnt17 : return 17;
+      LcCnt18 : return 18;
+      LcCnt19 : return 19;
+      LcCnt20 : return 20;
+      LcCnt21 : return 21;
+      LcCnt22 : return 22;
+      LcCnt23 : return 23;
+      LcCnt24 : return 24;
       default: `uvm_fatal("lc_env_pkg", $sformatf("unknown lc_cnt 0x%0h", curr_cnt))
     endcase
   endfunction
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 fd345dd..c054dd2 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,7 +30,7 @@
                                        "fatal_bus_integ_error"};
   parameter uint   NUM_ALERTS = 3;
   parameter uint   CLAIM_TRANS_VAL = 'ha5;
-  parameter uint   NUM_STATES = 16;
+  parameter uint   NUM_STATES = 24;
 
   // lc_otp_program host data width: lc_state_e width + lc_cnt_e width
   parameter uint OTP_PROG_HDATA_WIDTH = LcStateWidth + LcCountWidth;
@@ -67,9 +67,25 @@
     {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
     // TestUnlock3
     {On,  On,  On,  On,  Off, Off, Off, Off, On,  Off, Off},
+    // TestLock3
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
+    // TestUnlock4
+    {On,  On,  On,  On,  Off, Off, Off, Off, On,  Off, Off},
+    // TestLock4
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
+    // TestUnlock5
+    {On,  On,  On,  On,  Off, Off, Off, Off, On,  Off, Off},
+    // TestLock5
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
+    // TestUnlock6
+    {On,  On,  On,  On,  Off, Off, Off, Off, On,  Off, Off},
+    // TestLock6
+    {Off, Off, Off, Off, Off, Off, Off, Off, Off, Off, Off},
+    // TestUnlock7
+    {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},
+    {Off, Off, On,  On,  On,  On,  On,  Off, 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},
@@ -101,45 +117,64 @@
 
   // functions
   function automatic bit valid_state_for_trans(lc_state_e curr_state);
-    valid_state_for_trans = 0;
-    if (curr_state inside {LcStRma, LcStProdEnd, LcStProd, LcStDev, LcStTestUnlocked3,
-                           LcStTestUnlocked2, LcStTestUnlocked1, LcStTestUnlocked0,
-                           LcStTestLocked2, LcStTestLocked1, LcStTestLocked0, LcStRaw}) begin
-      valid_state_for_trans = 1;
-    end
+    return (curr_state inside {LcStRaw,
+                               LcStTestUnlocked0,
+                               LcStTestLocked0,
+                               LcStTestUnlocked1,
+                               LcStTestLocked1,
+                               LcStTestUnlocked2,
+                               LcStTestLocked2,
+                               LcStTestUnlocked3,
+                               LcStTestLocked3,
+                               LcStTestUnlocked4,
+                               LcStTestLocked4,
+                               LcStTestUnlocked5,
+                               LcStTestLocked5,
+                               LcStTestUnlocked6,
+                               LcStTestLocked6,
+                               LcStTestUnlocked7,
+                               LcStDev,
+                               LcStProd,
+                               LcStProdEnd,
+                               LcStRma});
   endfunction
 
   function automatic lc_ctrl_pkg::token_idx_e get_exp_token(dec_lc_state_e curr_state,
                                                             dec_lc_state_e next_state);
     // Raw Token
-    if (curr_state == DecLcStRaw && next_state inside {DecLcStTestUnlocked0,
-        DecLcStTestUnlocked1, DecLcStTestUnlocked2, DecLcStTestUnlocked3}) begin
+    if (curr_state == DecLcStRaw && is_test_unlocked_state(next_state, 0, 7)) begin
       get_exp_token = lc_ctrl_pkg::RawUnlockTokenIdx;
     // RMA Token
     end else if (curr_state inside {DecLcStProd, DecLcStDev} && next_state == DecLcStRma) begin
       get_exp_token = lc_ctrl_pkg::RmaTokenIdx;
     // Test Exit Token
-    end else if (curr_state inside {DecLcStTestUnlocked3, DecLcStTestLocked2, DecLcStTestUnlocked2,
-                 DecLcStTestLocked1, DecLcStTestUnlocked1, DecLcStTestLocked0,
-                 DecLcStTestUnlocked0} &&
-                 next_state inside {DecLcStDev, DecLcStProd, DecLcStProdEnd}) begin
+    end else if ((is_test_unlocked_state(curr_state, 0, 7) ||
+                  is_test_locked_state(curr_state, 0, 6)) &&
+                 next_state inside {DecLcStDev,
+                                    DecLcStProd,
+                                    DecLcStProdEnd}) begin
       get_exp_token = lc_ctrl_pkg::TestExitTokenIdx;
     // Test Unlock Token
-    end else if ((curr_state == DecLcStTestLocked2 && next_state == DecLcStTestUnlocked3) ||
-                 (curr_state == DecLcStTestLocked1 && next_state inside
-                     {DecLcStTestUnlocked3, DecLcStTestUnlocked2}) ||
-                 (curr_state == DecLcStTestLocked0 && next_state inside
-                     {DecLcStTestUnlocked3, DecLcStTestUnlocked2, DecLcStTestUnlocked1})) begin
+    end else if ((curr_state == DecLcStTestLocked6 && is_test_unlocked_state(next_state, 7, 7)) ||
+                 (curr_state == DecLcStTestLocked5 && is_test_unlocked_state(next_state, 6, 7)) ||
+                 (curr_state == DecLcStTestLocked4 && is_test_unlocked_state(next_state, 5, 7)) ||
+                 (curr_state == DecLcStTestLocked3 && is_test_unlocked_state(next_state, 4, 7)) ||
+                 (curr_state == DecLcStTestLocked2 && is_test_unlocked_state(next_state, 3, 7)) ||
+                 (curr_state == DecLcStTestLocked1 && is_test_unlocked_state(next_state, 2, 7)) ||
+                 (curr_state == DecLcStTestLocked0 && is_test_unlocked_state(next_state, 1, 7)))
+    begin
       get_exp_token = lc_ctrl_pkg::TestUnlockTokenIdx;
     // Test Zero Token
-    end else if (next_state == DecLcStScrap ||
-                 (curr_state inside {DecLcStTestUnlocked3, DecLcStTestUnlocked2,
-                     DecLcStTestUnlocked1, DecLcStTestUnlocked0} && next_state == DecLcStRma) ||
-                 (curr_state == DecLcStTestUnlocked2 && next_state == DecLcStTestLocked2) ||
-                 (curr_state ==  DecLcStTestUnlocked1 && next_state inside {DecLcStTestLocked2,
-                     DecLcStTestLocked1}) ||
-                 (curr_state ==  DecLcStTestUnlocked0 && next_state inside {DecLcStTestLocked2,
-                     DecLcStTestLocked1, DecLcStTestLocked0})) begin
+    end else if ((next_state == DecLcStScrap) ||
+                 (is_test_unlocked_state(curr_state, 0, 7) && next_state == DecLcStRma) ||
+                 (curr_state == DecLcStTestUnlocked6 && is_test_locked_state(next_state, 6, 6)) ||
+                 (curr_state == DecLcStTestUnlocked5 && is_test_locked_state(next_state, 5, 6)) ||
+                 (curr_state == DecLcStTestUnlocked4 && is_test_locked_state(next_state, 4, 6)) ||
+                 (curr_state == DecLcStTestUnlocked3 && is_test_locked_state(next_state, 3, 6)) ||
+                 (curr_state == DecLcStTestUnlocked2 && is_test_locked_state(next_state, 2, 6)) ||
+                 (curr_state == DecLcStTestUnlocked1 && is_test_locked_state(next_state, 1, 6)) ||
+                 (curr_state == DecLcStTestUnlocked0 && is_test_locked_state(next_state, 0, 6)))
+    begin
       get_exp_token = lc_ctrl_pkg::ZeroTokenIdx;
     // Test Invalid Token
     end else begin
diff --git a/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_smoke_vseq.sv b/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_smoke_vseq.sv
index 46db21b..2c6e2e8 100644
--- a/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_smoke_vseq.sv
+++ b/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_smoke_vseq.sv
@@ -46,7 +46,7 @@
       end
 
       // SW transition request
-      if (valid_state_for_trans(lc_state) && lc_cnt != LcCnt16) begin
+      if (valid_state_for_trans(lc_state) && lc_cnt != LcCnt24) begin
         lc_ctrl_state_pkg::lc_token_t token_val = get_random_token();
         randomize_next_lc_state(dec_lc_state(lc_state));
         `uvm_info(`gfn, $sformatf("next_LC_state is %0s, input token is %0h", next_lc_state.name,
diff --git a/hw/ip/lc_ctrl/lc_ctrl.core b/hw/ip/lc_ctrl/lc_ctrl.core
index edca1ba..8738dec 100644
--- a/hw/ip/lc_ctrl/lc_ctrl.core
+++ b/hw/ip/lc_ctrl/lc_ctrl.core
@@ -48,6 +48,15 @@
       - lint/lc_ctrl.waiver
     file_type: waiver
 
+  files_veriblelint_waiver:
+    depend:
+      # common waivers
+      - lowrisc:lint:common
+      - lowrisc:lint:comportable
+    files:
+      - lint/lc_ctrl.vbl
+    file_type: veribleLintWaiver
+
 parameters:
   SYNTHESIS:
     datatype: bool
@@ -57,8 +66,9 @@
 targets:
   default: &default_target
     filesets:
-      - tool_verilator  ? (files_verilator_waiver)
-      - tool_ascentlint ? (files_ascentlint_waiver)
+      - tool_verilator   ? (files_verilator_waiver)
+      - tool_ascentlint  ? (files_ascentlint_waiver)
+      - tool_veriblelint ? (files_veriblelint_waiver)
       - files_rtl
     toplevel: lc_ctrl
 
diff --git a/hw/ip/lc_ctrl/lc_ctrl_pkg.core b/hw/ip/lc_ctrl/lc_ctrl_pkg.core
index 2b5b396..42f4fc7 100644
--- a/hw/ip/lc_ctrl/lc_ctrl_pkg.core
+++ b/hw/ip/lc_ctrl/lc_ctrl_pkg.core
@@ -14,8 +14,55 @@
       - rtl/lc_ctrl_pkg.sv
     file_type: systemVerilogSource
 
+  files_verilator_waiver:
+    depend:
+      # common waivers
+      - lowrisc:lint:common
+      - lowrisc:lint:comportable
+    files:
+      - lint/lc_ctrl_pkg.vlt
+    file_type: vlt
+
+  files_ascentlint_waiver:
+    depend:
+      # common waivers
+      - lowrisc:lint:common
+      - lowrisc:lint:comportable
+    files:
+      - lint/lc_ctrl_pkg.waiver
+    file_type: waiver
+
+  files_veriblelint_waiver:
+    depend:
+      # common waivers
+      - lowrisc:lint:common
+      - lowrisc:lint:comportable
+    files:
+      - lint/lc_ctrl_pkg.vbl
+    file_type: veribleLintWaiver
+
+parameters:
+  SYNTHESIS:
+    datatype: bool
+    paramtype: vlogdefine
+
 
 targets:
   default: &default_target
     filesets:
+      - tool_verilator   ? (files_verilator_waiver)
+      - tool_ascentlint  ? (files_ascentlint_waiver)
+      - tool_veriblelint ? (files_veriblelint_waiver)
       - files_rtl
+    toplevel: lc_ctrl
+
+  lint:
+    <<: *default_target
+    default_tool: verilator
+    parameters:
+      - SYNTHESIS=true
+    tools:
+      verilator:
+        mode: lint-only
+        verilator_options:
+          - "-Wall"
diff --git a/hw/ip/lc_ctrl/lint/lc_ctrl.vbl b/hw/ip/lc_ctrl/lint/lc_ctrl.vbl
new file mode 100644
index 0000000..cbd0a96
--- /dev/null
+++ b/hw/ip/lc_ctrl/lint/lc_ctrl.vbl
@@ -0,0 +1,6 @@
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+#
+# waiver file for LC controller
+
diff --git a/hw/ip/lc_ctrl/lint/lc_ctrl_pkg.vbl b/hw/ip/lc_ctrl/lint/lc_ctrl_pkg.vbl
new file mode 100644
index 0000000..7ceed19
--- /dev/null
+++ b/hw/ip/lc_ctrl/lint/lc_ctrl_pkg.vbl
@@ -0,0 +1,8 @@
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+#
+# waiver file for LC controller package
+
+# waive long line violations in generated code
+waive --rule=line-length --location="lc_ctrl_state_pkg.sv"
diff --git a/hw/ip/lc_ctrl/lint/lc_ctrl_pkg.vlt b/hw/ip/lc_ctrl/lint/lc_ctrl_pkg.vlt
new file mode 100644
index 0000000..e4c787d
--- /dev/null
+++ b/hw/ip/lc_ctrl/lint/lc_ctrl_pkg.vlt
@@ -0,0 +1,6 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// waiver file for LC controller package
+
diff --git a/hw/ip/lc_ctrl/lint/lc_ctrl_pkg.waiver b/hw/ip/lc_ctrl/lint/lc_ctrl_pkg.waiver
new file mode 100644
index 0000000..70ee105
--- /dev/null
+++ b/hw/ip/lc_ctrl/lint/lc_ctrl_pkg.waiver
@@ -0,0 +1,9 @@
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+#
+# waiver file for LC controller package
+
+# waive line length violations in generated code
+waive -rules LINE_LENGTH -location {lc_ctrl_state_pkg.sv} \
+      -comment "Waive line length violations in generated code."
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_pkg.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_pkg.sv
index 39a42c4..83de6c6 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_pkg.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_pkg.sv
@@ -102,89 +102,77 @@
   // Manufacturing State Transition Matrix //
   ///////////////////////////////////////////
 
+  // Helper macro to assemble the token index matrix below.
+  // From TEST_UNLOCKED(N)
+  // -> SCRAP, RMA
+  // -> PROD, PROD_END, DEV
+  // -> TEST_UNLOCKED(N+1)-7
+  // -> TEST_LOCKED(N)-6
+  // -> TEST_UNLOCKED0-(N), RAW
+  `define TEST_UNLOCKED(idx)         \
+        {2{ZeroTokenIdx}},           \
+        {3{TestExitTokenIdx}},       \
+        {(7-idx){InvalidTokenIdx,    \
+                 ZeroTokenIdx}},     \
+        {(2*idx+2){InvalidTokenIdx}}
+
+  // Helper macro to assemble the token index matrix below.
+  // From TEST_LOCKED(N)
+  // -> SCRAP
+  // -> RMA
+  // -> PROD, PROD_END, DEV
+  // -> TEST_UNLOCKED(N+1)-7
+  // -> TEST_LOCKED(N)-6
+  // -> TEST_UNLOCKED0-(N), RAW
+  `define TEST_LOCKED(idx)         \
+      ZeroTokenIdx,                \
+      InvalidTokenIdx,             \
+      {3{TestExitTokenIdx}},       \
+      {(7-idx){TestUnlockTokenIdx, \
+               InvalidTokenIdx}},  \
+      {(2*idx+2){InvalidTokenIdx}}
+
   // The token index matrix below encodes 1) which transition edges are valid and 2) which token
   // to use for a given transition edge. Note that unconditional but otherwise valid transitions
   // are assigned the ZeroTokenIdx, whereas invalid transitions are assigned an InvalidTokenIdx.
   parameter token_idx_e [NumLcStates-1:0][NumLcStates-1:0] TransTokenIdxMatrix = {
     // SCRAP
-    {13{InvalidTokenIdx}}, // -> TEST_LOCKED0-2, TEST_UNLOCKED0-3, DEV, PROD, PROD_END, RMA, SCRAP
+    {21{InvalidTokenIdx}}, // -> TEST_LOCKED0-6, TEST_UNLOCKED0-7, DEV, PROD, PROD_END, RMA, SCRAP
     // RMA
     ZeroTokenIdx,          // -> SCRAP
-    {12{InvalidTokenIdx}}, // -> TEST_LOCKED0-2, TEST_UNLOCKED0-3, DEV, PROD, PROD_END, RMA
+    {20{InvalidTokenIdx}}, // -> TEST_LOCKED0-6, TEST_UNLOCKED0-7, DEV, PROD, PROD_END, RMA
     // PROD_END
     ZeroTokenIdx,          // -> SCRAP
-    {12{InvalidTokenIdx}}, // -> TEST_LOCKED0-2, TEST_UNLOCKED0-3, DEV, PROD, PROD_END, RMA
+    {20{InvalidTokenIdx}}, // -> TEST_LOCKED0-6, TEST_UNLOCKED0-7, DEV, PROD, PROD_END, RMA
     // PROD
     ZeroTokenIdx,          // -> SCRAP
     RmaTokenIdx,           // -> RMA
-    {11{InvalidTokenIdx}}, // -> TEST_LOCKED0-2, TEST_UNLOCKED0-3, DEV, PROD, PROD_END
+    {19{InvalidTokenIdx}}, // -> TEST_LOCKED0-6, TEST_UNLOCKED0-7, DEV, PROD, PROD_END
     // DEV
     ZeroTokenIdx,          // -> SCRAP
     RmaTokenIdx,           // -> RMA
-    {11{InvalidTokenIdx}}, // -> TEST_LOCKED0-2, TEST_UNLOCKED0-3, DEV, PROD, PROD_END
-    // TEST_UNLOCKED3
-    {2{ZeroTokenIdx}},     // -> SCRAP, RMA
-    {3{TestExitTokenIdx}}, // -> PROD, PROD_END, DEV
-    {8{InvalidTokenIdx}},  // -> TEST_LOCKED0-2, TEST_UNLOCKED0-3, RAW
-    // TEST_LOCKED2
-    ZeroTokenIdx,          // -> SCRAP
-    InvalidTokenIdx,       // -> RMA
-    {3{TestExitTokenIdx}}, // -> PROD, PROD_END, DEV
-    TestUnlockTokenIdx,    // -> TEST_UNLOCKED3
-    {7{InvalidTokenIdx}},  // -> TEST_LOCKED0-2, TEST_UNLOCKED0-2, RAW
-    // TEST_UNLOCKED2
-    {2{ZeroTokenIdx}},     // -> SCRAP, RMA
-    {3{TestExitTokenIdx}}, // -> PROD, PROD_END, DEV
-    InvalidTokenIdx,       // -> TEST_UNLOCKED3
-    ZeroTokenIdx,          // -> TEST_LOCKED2
-    {6{InvalidTokenIdx}},  // -> TEST_LOCKED0-1, TEST_UNLOCKED0-2, RAW
-    // TEST_LOCKED1
-    ZeroTokenIdx,          // -> SCRAP
-    InvalidTokenIdx,       // -> RMA
-    {3{TestExitTokenIdx}}, // -> PROD, PROD_END, DEV
-    TestUnlockTokenIdx,    // -> TEST_UNLOCKED3
-    InvalidTokenIdx  ,     // -> TEST_LOCKED2
-    TestUnlockTokenIdx,    // -> TEST_UNLOCKED2
-    {5{InvalidTokenIdx}},  // -> TEST_LOCKED0-1, TEST_UNLOCKED0-1, RAW
-    // TEST_UNLOCKED1
-    {2{ZeroTokenIdx}},     // -> SCRAP, RMA
-    {3{TestExitTokenIdx}}, // -> PROD, PROD_END, DEV
-    InvalidTokenIdx,       // -> TEST_UNLOCKED3
-    ZeroTokenIdx,          // -> TEST_LOCKED2
-    InvalidTokenIdx,       // -> TEST_UNLOCKED2
-    ZeroTokenIdx,          // -> TEST_LOCKED1
-    {4{InvalidTokenIdx}},  // -> TEST_LOCKED0, TEST_UNLOCKED0-1, RAW
-    // TEST_LOCKED0
-    ZeroTokenIdx,          // -> SCRAP
-    InvalidTokenIdx,       // -> RMA
-    {3{TestExitTokenIdx}}, // -> PROD, PROD_END, DEV
-    TestUnlockTokenIdx,    // -> TEST_UNLOCKED3
-    InvalidTokenIdx,       // -> TEST_LOCKED2
-    TestUnlockTokenIdx,    // -> TEST_UNLOCKED2
-    InvalidTokenIdx,       // -> TEST_LOCKED1
-    TestUnlockTokenIdx,    // -> TEST_UNLOCKED1
-    {3{InvalidTokenIdx}},  // -> TEST_LOCKED0, TEST_UNLOCKED0, RAW
-    // TEST_UNLOCKED0
-    {2{ZeroTokenIdx}},     // -> SCRAP, RMA
-    {3{TestExitTokenIdx}}, // -> PROD, PROD_END, DEV
-    InvalidTokenIdx,       // -> TEST_UNLOCKED3
-    ZeroTokenIdx,          // -> TEST_LOCKED2
-    InvalidTokenIdx,       // -> TEST_UNLOCKED2
-    ZeroTokenIdx,          // -> TEST_LOCKED1
-    InvalidTokenIdx,       // -> TEST_UNLOCKED1
-    ZeroTokenIdx,          // -> TEST_LOCKED0
-    {2{InvalidTokenIdx}},  // -> TEST_UNLOCKED0, RAW
+    {19{InvalidTokenIdx}}, // -> TEST_LOCKED0-6, TEST_UNLOCKED0-7, DEV, PROD, PROD_END
+    // TEST_UNLOCKED0-7, TEST_LOCKED0-6
+    `TEST_UNLOCKED(7),
+    `TEST_LOCKED(6),
+    `TEST_UNLOCKED(6),
+    `TEST_LOCKED(5),
+    `TEST_UNLOCKED(5),
+    `TEST_LOCKED(4),
+    `TEST_UNLOCKED(4),
+    `TEST_LOCKED(3),
+    `TEST_UNLOCKED(3),
+    `TEST_LOCKED(2),
+    `TEST_UNLOCKED(2),
+    `TEST_LOCKED(1),
+    `TEST_UNLOCKED(1),
+    `TEST_LOCKED(0),
+    `TEST_UNLOCKED(0),
     // RAW
     ZeroTokenIdx,          // -> SCRAP
     {4{InvalidTokenIdx}},  // -> RMA, PROD, PROD_END, DEV
-    RawUnlockTokenIdx,     // -> TEST_UNLOCKED3
-    InvalidTokenIdx,       // -> TEST_LOCKED2
-    RawUnlockTokenIdx,     // -> TEST_UNLOCKED2
-    InvalidTokenIdx,       // -> TEST_LOCKED1
-    RawUnlockTokenIdx,     // -> TEST_UNLOCKED1
-    InvalidTokenIdx,       // -> TEST_LOCKED0
-    RawUnlockTokenIdx,     // -> TEST_UNLOCKED0
-    InvalidTokenIdx        // -> RAW
+    {8{RawUnlockTokenIdx,  // -> TEST_UNLOCKED0-7
+       InvalidTokenIdx}}   // -> RAW, TEST_LOCKED0-6
   };
 
 endpackage : lc_ctrl_pkg
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_reg_pkg.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_reg_pkg.sv
index fcbedfc..d3e1536 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_reg_pkg.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_reg_pkg.sv
@@ -8,7 +8,7 @@
 
   // Param list
   parameter int NumTokenWords = 4;
-  parameter int CsrLcStateWidth = 4;
+  parameter int CsrLcStateWidth = 5;
   parameter int CsrLcCountWidth = 5;
   parameter int CsrLcIdStateWidth = 2;
   parameter int CsrOtpTestCtrlWidth = 8;
@@ -53,7 +53,7 @@
   } lc_ctrl_reg2hw_transition_token_mreg_t;
 
   typedef struct packed {
-    logic [3:0]  q;
+    logic [4:0]  q;
     logic        qe;
   } lc_ctrl_reg2hw_transition_target_reg_t;
 
@@ -114,7 +114,7 @@
   } lc_ctrl_hw2reg_transition_token_mreg_t;
 
   typedef struct packed {
-    logic [3:0]  d;
+    logic [4:0]  d;
   } lc_ctrl_hw2reg_transition_target_reg_t;
 
   typedef struct packed {
@@ -127,7 +127,7 @@
   } lc_ctrl_hw2reg_otp_test_ctrl_reg_t;
 
   typedef struct packed {
-    logic [3:0]  d;
+    logic [4:0]  d;
   } lc_ctrl_hw2reg_lc_state_reg_t;
 
   typedef struct packed {
@@ -144,23 +144,23 @@
 
   // Register -> HW type
   typedef struct packed {
-    lc_ctrl_reg2hw_alert_test_reg_t alert_test; // [164:159]
-    lc_ctrl_reg2hw_claim_transition_if_reg_t claim_transition_if; // [158:150]
-    lc_ctrl_reg2hw_transition_cmd_reg_t transition_cmd; // [149:148]
-    lc_ctrl_reg2hw_transition_token_mreg_t [3:0] transition_token; // [147:16]
-    lc_ctrl_reg2hw_transition_target_reg_t transition_target; // [15:11]
+    lc_ctrl_reg2hw_alert_test_reg_t alert_test; // [165:160]
+    lc_ctrl_reg2hw_claim_transition_if_reg_t claim_transition_if; // [159:151]
+    lc_ctrl_reg2hw_transition_cmd_reg_t transition_cmd; // [150:149]
+    lc_ctrl_reg2hw_transition_token_mreg_t [3:0] transition_token; // [148:17]
+    lc_ctrl_reg2hw_transition_target_reg_t transition_target; // [16:11]
     lc_ctrl_reg2hw_otp_test_ctrl_reg_t otp_test_ctrl; // [10:0]
   } lc_ctrl_reg2hw_t;
 
   // HW -> register type
   typedef struct packed {
-    lc_ctrl_hw2reg_status_reg_t status; // [426:417]
-    lc_ctrl_hw2reg_claim_transition_if_reg_t claim_transition_if; // [416:409]
-    lc_ctrl_hw2reg_transition_regwen_reg_t transition_regwen; // [408:408]
-    lc_ctrl_hw2reg_transition_token_mreg_t [3:0] transition_token; // [407:280]
-    lc_ctrl_hw2reg_transition_target_reg_t transition_target; // [279:276]
-    lc_ctrl_hw2reg_otp_test_ctrl_reg_t otp_test_ctrl; // [275:267]
-    lc_ctrl_hw2reg_lc_state_reg_t lc_state; // [266:263]
+    lc_ctrl_hw2reg_status_reg_t status; // [428:419]
+    lc_ctrl_hw2reg_claim_transition_if_reg_t claim_transition_if; // [418:411]
+    lc_ctrl_hw2reg_transition_regwen_reg_t transition_regwen; // [410:410]
+    lc_ctrl_hw2reg_transition_token_mreg_t [3:0] transition_token; // [409:282]
+    lc_ctrl_hw2reg_transition_target_reg_t transition_target; // [281:277]
+    lc_ctrl_hw2reg_otp_test_ctrl_reg_t otp_test_ctrl; // [276:268]
+    lc_ctrl_hw2reg_lc_state_reg_t lc_state; // [267:263]
     lc_ctrl_hw2reg_lc_transition_cnt_reg_t lc_transition_cnt; // [262:258]
     lc_ctrl_hw2reg_lc_id_state_reg_t lc_id_state; // [257:256]
     lc_ctrl_hw2reg_device_id_mreg_t [7:0] device_id; // [255:0]
@@ -204,9 +204,9 @@
   parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_1_RESVAL = 32'h 0;
   parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_2_RESVAL = 32'h 0;
   parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_3_RESVAL = 32'h 0;
-  parameter logic [3:0] LC_CTRL_TRANSITION_TARGET_RESVAL = 4'h 0;
+  parameter logic [4:0] LC_CTRL_TRANSITION_TARGET_RESVAL = 5'h 0;
   parameter logic [16:0] LC_CTRL_OTP_TEST_CTRL_RESVAL = 17'h 0;
-  parameter logic [3:0] LC_CTRL_LC_STATE_RESVAL = 4'h 0;
+  parameter logic [4:0] LC_CTRL_LC_STATE_RESVAL = 5'h 0;
   parameter logic [4:0] LC_CTRL_LC_TRANSITION_CNT_RESVAL = 5'h 0;
   parameter logic [1:0] LC_CTRL_LC_ID_STATE_RESVAL = 2'h 0;
   parameter logic [31:0] LC_CTRL_DEVICE_ID_0_RESVAL = 32'h 0;
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_reg_top.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_reg_top.sv
index 0bac7bf..b594b3f 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_reg_top.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_reg_top.sv
@@ -145,8 +145,8 @@
   logic [31:0] transition_token_3_wd;
   logic transition_target_re;
   logic transition_target_we;
-  logic [3:0] transition_target_qs;
-  logic [3:0] transition_target_wd;
+  logic [4:0] transition_target_qs;
+  logic [4:0] transition_target_wd;
   logic otp_test_ctrl_re;
   logic otp_test_ctrl_we;
   logic [7:0] otp_test_ctrl_val_qs;
@@ -154,7 +154,7 @@
   logic otp_test_ctrl_ext_clock_qs;
   logic otp_test_ctrl_ext_clock_wd;
   logic lc_state_re;
-  logic [3:0] lc_state_qs;
+  logic [4:0] lc_state_qs;
   logic lc_transition_cnt_re;
   logic [4:0] lc_transition_cnt_qs;
   logic lc_id_state_re;
@@ -493,7 +493,7 @@
   // R[transition_target]: V(True)
 
   prim_subreg_ext #(
-    .DW    (4)
+    .DW    (5)
   ) u_transition_target (
     .re     (transition_target_re),
     .we     (transition_target_we & transition_regwen_qs),
@@ -541,7 +541,7 @@
   // R[lc_state]: V(True)
 
   prim_subreg_ext #(
-    .DW    (4)
+    .DW    (5)
   ) u_lc_state (
     .re     (lc_state_re),
     .we     (1'b0),
@@ -808,7 +808,7 @@
   assign transition_target_re = addr_hit[9] & reg_re & !reg_error;
   assign transition_target_we = addr_hit[9] & reg_we & !reg_error;
 
-  assign transition_target_wd = reg_wdata[3:0];
+  assign transition_target_wd = reg_wdata[4:0];
   assign otp_test_ctrl_re = addr_hit[10] & reg_re & !reg_error;
   assign otp_test_ctrl_we = addr_hit[10] & reg_we & !reg_error;
 
@@ -879,7 +879,7 @@
       end
 
       addr_hit[9]: begin
-        reg_rdata_next[3:0] = transition_target_qs;
+        reg_rdata_next[4:0] = transition_target_qs;
       end
 
       addr_hit[10]: begin
@@ -888,7 +888,7 @@
       end
 
       addr_hit[11]: begin
-        reg_rdata_next[3:0] = lc_state_qs;
+        reg_rdata_next[4:0] = lc_state_qs;
       end
 
       addr_hit[12]: begin
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 f5080b1..a569db8 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv
@@ -91,7 +91,11 @@
             LcStRaw,
             LcStTestLocked0,
             LcStTestLocked1,
-            LcStTestLocked2: begin
+            LcStTestLocked2,
+            LcStTestLocked3,
+            LcStTestLocked4,
+            LcStTestLocked5,
+            LcStTestLocked6: begin
               lc_test_or_rma = On;
             end
             ///////////////////////////////////////////////////////////////////
@@ -100,7 +104,11 @@
             LcStTestUnlocked0,
             LcStTestUnlocked1,
             LcStTestUnlocked2,
-            LcStTestUnlocked3: begin
+            LcStTestUnlocked3,
+            LcStTestUnlocked4,
+            LcStTestUnlocked5,
+            LcStTestUnlocked6,
+            LcStTestUnlocked7: begin
               lc_test_or_rma       = On;
               lc_dft_en            = On;
               lc_nvm_debug_en      = On;
@@ -343,12 +351,20 @@
                           PostTransSt} &&
       !(lc_state_i inside {LcStRaw,
                            LcStTestUnlocked0,
-                           LcStTestLocked0,
                            LcStTestUnlocked1,
-                           LcStTestLocked1,
                            LcStTestUnlocked2,
-                           LcStTestLocked2,
                            LcStTestUnlocked3,
+                           LcStTestUnlocked4,
+                           LcStTestUnlocked5,
+                           LcStTestUnlocked6,
+                           LcStTestUnlocked7,
+                           LcStTestLocked0,
+                           LcStTestLocked1,
+                           LcStTestLocked2,
+                           LcStTestLocked3,
+                           LcStTestLocked4,
+                           LcStTestLocked5,
+                           LcStTestLocked6,
                            LcStDev,
                            LcStProd,
                            LcStProdEnd,
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_decode.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_decode.sv
index d8f8d6f..250a02f 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_decode.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_decode.sv
@@ -63,6 +63,14 @@
           LcStTestUnlocked2: dec_lc_state_o = DecLcStTestUnlocked2;
           LcStTestLocked2:   dec_lc_state_o = DecLcStTestLocked2;
           LcStTestUnlocked3: dec_lc_state_o = DecLcStTestUnlocked3;
+          LcStTestLocked3:   dec_lc_state_o = DecLcStTestLocked3;
+          LcStTestUnlocked4: dec_lc_state_o = DecLcStTestUnlocked4;
+          LcStTestLocked4:   dec_lc_state_o = DecLcStTestLocked4;
+          LcStTestUnlocked5: dec_lc_state_o = DecLcStTestUnlocked5;
+          LcStTestLocked5:   dec_lc_state_o = DecLcStTestLocked5;
+          LcStTestUnlocked6: dec_lc_state_o = DecLcStTestUnlocked6;
+          LcStTestLocked6:   dec_lc_state_o = DecLcStTestLocked6;
+          LcStTestUnlocked7: dec_lc_state_o = DecLcStTestUnlocked7;
           LcStDev:           dec_lc_state_o = DecLcStDev;
           LcStProd:          dec_lc_state_o = DecLcStProd;
           LcStProdEnd:       dec_lc_state_o = DecLcStProdEnd;
@@ -89,6 +97,14 @@
           LcCnt14:  dec_lc_cnt_o = 5'd14;
           LcCnt15:  dec_lc_cnt_o = 5'd15;
           LcCnt16:  dec_lc_cnt_o = 5'd16;
+          LcCnt17:  dec_lc_cnt_o = 5'd17;
+          LcCnt18:  dec_lc_cnt_o = 5'd18;
+          LcCnt19:  dec_lc_cnt_o = 5'd19;
+          LcCnt20:  dec_lc_cnt_o = 5'd20;
+          LcCnt21:  dec_lc_cnt_o = 5'd21;
+          LcCnt22:  dec_lc_cnt_o = 5'd22;
+          LcCnt23:  dec_lc_cnt_o = 5'd23;
+          LcCnt24:  dec_lc_cnt_o = 5'd24;
           default:  state_invalid_error_o = 1'b1;
         endcase // lc_cnt_i
 
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_pkg.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_pkg.sv
index cc4177e..983ff5d 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_pkg.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_pkg.sv
@@ -18,14 +18,14 @@
 
   parameter int LcValueWidth = 16;
 
-  parameter int NumLcStateValues = 12;
+  parameter int NumLcStateValues = 20;
   parameter int LcStateWidth = NumLcStateValues * LcValueWidth;
-  parameter int NumLcStates = 13;
+  parameter int NumLcStates = 21;
   parameter int DecLcStateWidth = vbits(NumLcStates);
 
-  parameter int NumLcCountValues = 16;
+  parameter int NumLcCountValues = 24;
   parameter int LcCountWidth = NumLcCountValues * LcValueWidth;
-  parameter int NumLcCountStates = 17;
+  parameter int NumLcCountStates = 25;
   parameter int DecLcCountWidth = vbits(NumLcCountStates);
 
   // This state is not stored in OTP, but inferred from the locked
@@ -48,7 +48,7 @@
   // - Minimum Hamming weight: 8
   // - Maximum Hamming weight: 16
   // - Minimum Hamming distance from any other value: 6
-  // - Maximum Hamming distance from any other value: 18
+  // - Maximum Hamming distance from any other value: 20
   //
   // Hamming distance histogram:
   //
@@ -58,21 +58,21 @@
   //  3: --
   //  4: --
   //  5: --
-  //  6: |||| (6.95%)
+  //  6: ||| (5.85%)
   //  7: --
-  //  8: |||||||||| (16.36%)
+  //  8: ||||||||||| (17.40%)
   //  9: --
-  // 10: ||||||||||||||||||| (29.22%)
+  // 10: |||||||||||||||||||| (29.60%)
   // 11: --
-  // 12: |||||||||||||||||||| (29.81%)
+  // 12: ||||||||||||||||||| (29.21%)
   // 13: --
-  // 14: |||||||| (13.18%)
+  // 14: ||||||||| (13.51%)
   // 15: --
-  // 16: || (4.16%)
+  // 16: || (4.02%)
   // 17: --
-  // 18:  (0.32%)
+  // 18:  (0.37%)
   // 19: --
-  // 20: --
+  // 20:  (0.05%)
   // 21: --
   // 22: --
   //
@@ -117,55 +117,103 @@
   parameter logic [15:0] A11 = 16'b1011000100000111; // ECC: 6'b011001
   parameter logic [15:0] B11 = 16'b1111110110000111; // ECC: 6'b011111
 
+  parameter logic [15:0] A12 = 16'b0011100000010000; // ECC: 6'b111001
+  parameter logic [15:0] B12 = 16'b1111100100110000; // ECC: 6'b111111
+
+  parameter logic [15:0] A13 = 16'b0011000010101011; // ECC: 6'b100110
+  parameter logic [15:0] B13 = 16'b1011010011111011; // ECC: 6'b111110
+
+  parameter logic [15:0] A14 = 16'b0011110100100000; // ECC: 6'b011000
+  parameter logic [15:0] B14 = 16'b0011111101101011; // ECC: 6'b011100
+
+  parameter logic [15:0] A15 = 16'b1010101100010010; // ECC: 6'b111000
+  parameter logic [15:0] B15 = 16'b1111111110011010; // ECC: 6'b111010
+
+  parameter logic [15:0] A16 = 16'b0100011010010100; // ECC: 6'b110110
+  parameter logic [15:0] B16 = 16'b0101111110010111; // ECC: 6'b111110
+
+  parameter logic [15:0] A17 = 16'b1011111110000101; // ECC: 6'b000000
+  parameter logic [15:0] B17 = 16'b1011111111010111; // ECC: 6'b000111
+
+  parameter logic [15:0] A18 = 16'b1110010000010111; // ECC: 6'b010100
+  parameter logic [15:0] B18 = 16'b1111110010111111; // ECC: 6'b010110
+
+  parameter logic [15:0] A19 = 16'b0100100101011010; // ECC: 6'b001000
+  parameter logic [15:0] B19 = 16'b1110100111111111; // ECC: 6'b001101
+
 
   // The C/D values are used for the encoded LC transition counter.
-  parameter logic [15:0] C0 = 16'b0011100000010000; // ECC: 6'b111001
-  parameter logic [15:0] D0 = 16'b1111100100110000; // ECC: 6'b111111
+  parameter logic [15:0] C0 = 16'b0000110000011011; // ECC: 6'b110110
+  parameter logic [15:0] D0 = 16'b0011111000011111; // ECC: 6'b111111
 
-  parameter logic [15:0] C1 = 16'b0011000010101011; // ECC: 6'b100110
-  parameter logic [15:0] D1 = 16'b1011010011111011; // ECC: 6'b111110
+  parameter logic [15:0] C1 = 16'b0111001100010100; // ECC: 6'b011001
+  parameter logic [15:0] D1 = 16'b1111101101110110; // ECC: 6'b111001
 
-  parameter logic [15:0] C2 = 16'b0011110100100000; // ECC: 6'b011000
-  parameter logic [15:0] D2 = 16'b0011111101101011; // ECC: 6'b011100
+  parameter logic [15:0] C2 = 16'b0001101110100010; // ECC: 6'b100011
+  parameter logic [15:0] D2 = 16'b0011111111100011; // ECC: 6'b110111
 
-  parameter logic [15:0] C3 = 16'b1010101100010010; // ECC: 6'b111000
-  parameter logic [15:0] D3 = 16'b1111111110011010; // ECC: 6'b111010
+  parameter logic [15:0] C3 = 16'b0000110101000010; // ECC: 6'b111101
+  parameter logic [15:0] D3 = 16'b1100110111010110; // ECC: 6'b111111
 
-  parameter logic [15:0] C4 = 16'b0100011010010100; // ECC: 6'b110110
-  parameter logic [15:0] D4 = 16'b0101111110010111; // ECC: 6'b111110
+  parameter logic [15:0] C4 = 16'b0001111111010001; // ECC: 6'b000010
+  parameter logic [15:0] D4 = 16'b0001111111111001; // ECC: 6'b101111
 
-  parameter logic [15:0] C5 = 16'b1011111110000101; // ECC: 6'b000000
-  parameter logic [15:0] D5 = 16'b1011111111010111; // ECC: 6'b000111
+  parameter logic [15:0] C5 = 16'b0010010000110000; // ECC: 6'b111111
+  parameter logic [15:0] D5 = 16'b0111011100110101; // ECC: 6'b111111
 
-  parameter logic [15:0] C6 = 16'b1110010000010111; // ECC: 6'b010100
-  parameter logic [15:0] D6 = 16'b1111110010111111; // ECC: 6'b010110
+  parameter logic [15:0] C6 = 16'b0010111010001111; // ECC: 6'b001000
+  parameter logic [15:0] D6 = 16'b1011111010111111; // ECC: 6'b101100
 
-  parameter logic [15:0] C7 = 16'b0100100101011010; // ECC: 6'b001000
-  parameter logic [15:0] D7 = 16'b1110100111111111; // ECC: 6'b001101
+  parameter logic [15:0] C7 = 16'b0100010000111101; // ECC: 6'b011010
+  parameter logic [15:0] D7 = 16'b0101110011111101; // ECC: 6'b111110
 
-  parameter logic [15:0] C8 = 16'b0000110000011011; // ECC: 6'b110110
-  parameter logic [15:0] D8 = 16'b0011111000011111; // ECC: 6'b111111
+  parameter logic [15:0] C8 = 16'b1110000000101100; // ECC: 6'b111001
+  parameter logic [15:0] D8 = 16'b1110010110111101; // ECC: 6'b111101
 
-  parameter logic [15:0] C9 = 16'b0111001100010100; // ECC: 6'b011001
-  parameter logic [15:0] D9 = 16'b1111101101110110; // ECC: 6'b111001
+  parameter logic [15:0] C9 = 16'b0010011100101110; // ECC: 6'b010001
+  parameter logic [15:0] D9 = 16'b1011011110101111; // ECC: 6'b111001
 
-  parameter logic [15:0] C10 = 16'b0001101110100010; // ECC: 6'b100011
-  parameter logic [15:0] D10 = 16'b0011111111100011; // ECC: 6'b110111
+  parameter logic [15:0] C10 = 16'b0010110011101110; // ECC: 6'b000100
+  parameter logic [15:0] D10 = 16'b1010111011111110; // ECC: 6'b110110
 
-  parameter logic [15:0] C11 = 16'b0000110101000010; // ECC: 6'b111101
-  parameter logic [15:0] D11 = 16'b1100110111010110; // ECC: 6'b111111
+  parameter logic [15:0] C11 = 16'b1100000100010011; // ECC: 6'b000011
+  parameter logic [15:0] D11 = 16'b1110000110011011; // ECC: 6'b111011
 
-  parameter logic [15:0] C12 = 16'b0001111111010001; // ECC: 6'b000010
-  parameter logic [15:0] D12 = 16'b0001111111111001; // ECC: 6'b101111
+  parameter logic [15:0] C12 = 16'b1000110110101101; // ECC: 6'b000010
+  parameter logic [15:0] D12 = 16'b1001111110111101; // ECC: 6'b010111
 
-  parameter logic [15:0] C13 = 16'b0010010000110000; // ECC: 6'b111111
-  parameter logic [15:0] D13 = 16'b0111011100110101; // ECC: 6'b111111
+  parameter logic [15:0] C13 = 16'b0000011111001011; // ECC: 6'b001010
+  parameter logic [15:0] D13 = 16'b1001111111001111; // ECC: 6'b111010
 
-  parameter logic [15:0] C14 = 16'b0010111010001111; // ECC: 6'b001000
-  parameter logic [15:0] D14 = 16'b1011111010111111; // ECC: 6'b101100
+  parameter logic [15:0] C14 = 16'b1101001001001010; // ECC: 6'b110100
+  parameter logic [15:0] D14 = 16'b1101001011101111; // ECC: 6'b110111
 
-  parameter logic [15:0] C15 = 16'b0100010000111101; // ECC: 6'b011010
-  parameter logic [15:0] D15 = 16'b0101110011111101; // ECC: 6'b111110
+  parameter logic [15:0] C15 = 16'b0001100011110101; // ECC: 6'b100010
+  parameter logic [15:0] D15 = 16'b0011110011110111; // ECC: 6'b111011
+
+  parameter logic [15:0] C16 = 16'b1000001110100011; // ECC: 6'b010110
+  parameter logic [15:0] D16 = 16'b1100111111101111; // ECC: 6'b010110
+
+  parameter logic [15:0] C17 = 16'b0100110101010001; // ECC: 6'b100110
+  parameter logic [15:0] D17 = 16'b1111110101010011; // ECC: 6'b110111
+
+  parameter logic [15:0] C18 = 16'b1010010000101010; // ECC: 6'b100001
+  parameter logic [15:0] D18 = 16'b1010011111101110; // ECC: 6'b100011
+
+  parameter logic [15:0] C19 = 16'b0001111001110000; // ECC: 6'b101010
+  parameter logic [15:0] D19 = 16'b0111111111110011; // ECC: 6'b101010
+
+  parameter logic [15:0] C20 = 16'b0010101001111110; // ECC: 6'b100000
+  parameter logic [15:0] D20 = 16'b0110101111111110; // ECC: 6'b110101
+
+  parameter logic [15:0] C21 = 16'b1001000011110000; // ECC: 6'b000011
+  parameter logic [15:0] D21 = 16'b1001001011111101; // ECC: 6'b001111
+
+  parameter logic [15:0] C22 = 16'b0101101010000001; // ECC: 6'b110110
+  parameter logic [15:0] D22 = 16'b1111101010010101; // ECC: 6'b111111
+
+  parameter logic [15:0] C23 = 16'b1101000100101110; // ECC: 6'b110000
+  parameter logic [15:0] D23 = 16'b1111100110101110; // ECC: 6'b111110
 
 
   parameter logic [15:0] ZRO = 16'h0;
@@ -175,59 +223,83 @@
   ////////////////////////
 
   typedef enum logic [LcStateWidth-1:0] {
-    LcStRaw           = {ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO},
-    LcStTestUnlocked0 = {A11, A10,  A9,  A8,  A7,  A6,  A5,  A4,  A3,  A2,  A1,  B0},
-    LcStTestLocked0   = {A11, A10,  A9,  A8,  A7,  A6,  A5,  A4,  A3,  A2,  B1,  B0},
-    LcStTestUnlocked1 = {A11, A10,  A9,  A8,  A7,  A6,  A5,  A4,  A3,  B2,  B1,  B0},
-    LcStTestLocked1   = {A11, A10,  A9,  A8,  A7,  A6,  A5,  A4,  B3,  B2,  B1,  B0},
-    LcStTestUnlocked2 = {A11, A10,  A9,  A8,  A7,  A6,  A5,  B4,  B3,  B2,  B1,  B0},
-    LcStTestLocked2   = {A11, A10,  A9,  A8,  A7,  A6,  B5,  B4,  B3,  B2,  B1,  B0},
-    LcStTestUnlocked3 = {A11, A10,  A9,  A8,  A7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
-    LcStDev           = {A11, A10,  A9,  A8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
-    LcStProd          = {A11, A10,  A9,  B8,  A7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
-    LcStProdEnd       = {A11, A10,  B9,  A8,  A7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
-    LcStRma           = {B11, B10,  A9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
-    LcStScrap         = {B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0}
+    LcStRaw           = {ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO},
+    LcStTestUnlocked0 = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  A9,  A8,  A7,  A6,  A5,  A4,  A3,  A2,  A1,  B0},
+    LcStTestLocked0   = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  A9,  A8,  A7,  A6,  A5,  A4,  A3,  A2,  B1,  B0},
+    LcStTestUnlocked1 = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  A9,  A8,  A7,  A6,  A5,  A4,  A3,  B2,  B1,  B0},
+    LcStTestLocked1   = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  A9,  A8,  A7,  A6,  A5,  A4,  B3,  B2,  B1,  B0},
+    LcStTestUnlocked2 = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  A9,  A8,  A7,  A6,  A5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestLocked2   = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  A9,  A8,  A7,  A6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestUnlocked3 = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  A9,  A8,  A7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestLocked3   = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  A9,  A8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestUnlocked4 = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  A9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestLocked4   = {A19, A18, A17, A16, A15, A14, A13, A12, A11, A10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestUnlocked5 = {A19, A18, A17, A16, A15, A14, A13, A12, A11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestLocked5   = {A19, A18, A17, A16, A15, A14, A13, A12, B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestUnlocked6 = {A19, A18, A17, A16, A15, A14, A13, B12, B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestLocked6   = {A19, A18, A17, A16, A15, A14, B13, B12, B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStTestUnlocked7 = {A19, A18, A17, A16, A15, B14, B13, B12, B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStDev           = {A19, A18, A17, A16, B15, B14, B13, B12, B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStProd          = {A19, A18, A17, B16, A15, B14, B13, B12, B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStProdEnd       = {A19, A18, B17, A16, A15, B14, B13, B12, B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStRma           = {B19, B18, A17, B16, B15, B14, B13, B12, B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0},
+    LcStScrap         = {B19, B18, B17, B16, B15, B14, B13, B12, B11, B10,  B9,  B8,  B7,  B6,  B5,  B4,  B3,  B2,  B1,  B0}
   } lc_state_e;
 
   typedef enum logic [LcCountWidth-1:0] {
-    LcCnt0  = {ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO},
-    LcCnt1  = {C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  C4,  C3,  C2,  C1,  D0},
-    LcCnt2  = {C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  C4,  C3,  C2,  D1,  D0},
-    LcCnt3  = {C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  C4,  C3,  D2,  D1,  D0},
-    LcCnt4  = {C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  C4,  D3,  D2,  D1,  D0},
-    LcCnt5  = {C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt6  = {C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt7  = {C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt8  = {C15, C14, C13, C12, C11, C10,  C9,  C8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt9  = {C15, C14, C13, C12, C11, C10,  C9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt10 = {C15, C14, C13, C12, C11, C10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt11 = {C15, C14, C13, C12, C11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt12 = {C15, C14, C13, C12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt13 = {C15, C14, C13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt14 = {C15, C14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt15 = {C15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
-    LcCnt16 = {D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0}
+    LcCnt0  = {ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO, ZRO},
+    LcCnt1  = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  C4,  C3,  C2,  C1,  D0},
+    LcCnt2  = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  C4,  C3,  C2,  D1,  D0},
+    LcCnt3  = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  C4,  C3,  D2,  D1,  D0},
+    LcCnt4  = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  C4,  D3,  D2,  D1,  D0},
+    LcCnt5  = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  C5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt6  = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  C6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt7  = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  C9,  C8,  C7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt8  = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  C9,  C8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt9  = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  C9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt10 = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, C10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt11 = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, C11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt12 = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, C12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt13 = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, C13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt14 = {C23, C22, C21, C20, C19, C18, C17, C16, C15, C14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt15 = {C23, C22, C21, C20, C19, C18, C17, C16, C15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt16 = {C23, C22, C21, C20, C19, C18, C17, C16, D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt17 = {C23, C22, C21, C20, C19, C18, C17, D16, D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt18 = {C23, C22, C21, C20, C19, C18, D17, D16, D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt19 = {C23, C22, C21, C20, C19, D18, D17, D16, D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt20 = {C23, C22, C21, C20, D19, D18, D17, D16, D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt21 = {C23, C22, C21, D20, D19, D18, D17, D16, D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt22 = {C23, C22, D21, D20, D19, D18, D17, D16, D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt23 = {C23, D22, D21, D20, D19, D18, D17, D16, D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0},
+    LcCnt24 = {D23, D22, D21, D20, D19, D18, D17, D16, D15, D14, D13, D12, D11, D10,  D9,  D8,  D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0}
   } lc_cnt_e;
 
   // Decoded life cycle state, used to interface with CSRs and TAP.
   typedef enum logic [DecLcStateWidth-1:0] {
-    DecLcStRaw,
-    DecLcStTestUnlocked0,
-    DecLcStTestLocked0,
-    DecLcStTestUnlocked1,
-    DecLcStTestLocked1,
-    DecLcStTestUnlocked2,
-    DecLcStTestLocked2,
-    DecLcStTestUnlocked3,
-    DecLcStDev,
-    DecLcStProd,
-    DecLcStProdEnd,
-    DecLcStRma,
-    DecLcStScrap,
-    DecLcStPostTrans,
-    DecLcStEscalate,
-    DecLcStInvalid
+    DecLcStRaw = 0,
+    DecLcStTestUnlocked0 = 1,
+    DecLcStTestLocked0 = 2,
+    DecLcStTestUnlocked1 = 3,
+    DecLcStTestLocked1 = 4,
+    DecLcStTestUnlocked2 = 5,
+    DecLcStTestLocked2 = 6,
+    DecLcStTestUnlocked3 = 7,
+    DecLcStTestLocked3 = 8,
+    DecLcStTestUnlocked4 = 9,
+    DecLcStTestLocked4 = 10,
+    DecLcStTestUnlocked5 = 11,
+    DecLcStTestLocked5 = 12,
+    DecLcStTestUnlocked6 = 13,
+    DecLcStTestLocked6 = 14,
+    DecLcStTestUnlocked7 = 15,
+    DecLcStDev = 16,
+    DecLcStProd = 17,
+    DecLcStProdEnd = 18,
+    DecLcStRma = 19,
+    DecLcStScrap = 20,
+    DecLcStPostTrans = 21,
+    DecLcStEscalate = 22,
+    DecLcStInvalid = 23
   } dec_lc_state_e;
 
   typedef enum logic [DecLcIdStateWidth-1:0] {
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_pkg.sv.tpl b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_pkg.sv.tpl
index 439ead5..581928b 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_pkg.sv.tpl
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_pkg.sv.tpl
@@ -147,11 +147,11 @@
   // Decoded life cycle state, used to interface with CSRs and TAP.
   typedef enum logic [DecLcStateWidth-1:0] {
 % for state in lc_st_enc.config['lc_state'].keys():
-    DecLcSt${_to_pascal_case(state)},
+    DecLcSt${_to_pascal_case(state)} = ${loop.index},
 % endfor
-    DecLcStPostTrans,
-    DecLcStEscalate,
-    DecLcStInvalid
+    DecLcStPostTrans = ${len(lc_st_enc.config['lc_state']) + 0},
+    DecLcStEscalate = ${len(lc_st_enc.config['lc_state']) + 1},
+    DecLcStInvalid = ${len(lc_st_enc.config['lc_state']) + 2}
   } dec_lc_state_e;
 
   typedef enum logic [DecLcIdStateWidth-1:0] {
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_transition.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_transition.sv
index ad480c4..bdbbbe2 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_transition.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_transition.sv
@@ -67,7 +67,15 @@
         LcCnt13:  next_lc_cnt_o = LcCnt14;
         LcCnt14:  next_lc_cnt_o = LcCnt15;
         LcCnt15:  next_lc_cnt_o = LcCnt16;
-        LcCnt16:  trans_cnt_oflw_error_o = 1'b1;
+        LcCnt16:  next_lc_cnt_o = LcCnt17;
+        LcCnt17:  next_lc_cnt_o = LcCnt18;
+        LcCnt18:  next_lc_cnt_o = LcCnt19;
+        LcCnt19:  next_lc_cnt_o = LcCnt20;
+        LcCnt20:  next_lc_cnt_o = LcCnt21;
+        LcCnt21:  next_lc_cnt_o = LcCnt22;
+        LcCnt22:  next_lc_cnt_o = LcCnt23;
+        LcCnt23:  next_lc_cnt_o = LcCnt24;
+        LcCnt24:  trans_cnt_oflw_error_o = 1'b1;
         default:  trans_cnt_oflw_error_o = 1'b1;
       endcase // lc_cnt_i
 
@@ -103,6 +111,14 @@
             DecLcStTestUnlocked2: next_lc_state_o = LcStTestUnlocked2;
             DecLcStTestLocked2:   next_lc_state_o = LcStTestLocked2;
             DecLcStTestUnlocked3: next_lc_state_o = LcStTestUnlocked3;
+            DecLcStTestLocked3:   next_lc_state_o = LcStTestLocked3;
+            DecLcStTestUnlocked4: next_lc_state_o = LcStTestUnlocked4;
+            DecLcStTestLocked4:   next_lc_state_o = LcStTestLocked4;
+            DecLcStTestUnlocked5: next_lc_state_o = LcStTestUnlocked5;
+            DecLcStTestLocked5:   next_lc_state_o = LcStTestLocked5;
+            DecLcStTestUnlocked6: next_lc_state_o = LcStTestUnlocked6;
+            DecLcStTestLocked6:   next_lc_state_o = LcStTestLocked6;
+            DecLcStTestUnlocked7: next_lc_state_o = LcStTestUnlocked7;
             DecLcStDev:           next_lc_state_o = LcStDev;
             DecLcStProd:          next_lc_state_o = LcStProd;
             DecLcStProdEnd:       next_lc_state_o = LcStProdEnd;