1use kernel::utilities::registers::ReadWrite;
13use kernel::utilities::registers::{register_bitfields, register_structs};
14pub const LC_CTRL_PARAM_SILICON_CREATOR_ID_WIDTH: u32 = 16;
16pub const LC_CTRL_PARAM_PRODUCT_ID_WIDTH: u32 = 16;
18pub const LC_CTRL_PARAM_REVISION_ID_WIDTH: u32 = 8;
20pub const LC_CTRL_PARAM_NUM_TOKEN_WORDS: u32 = 4;
22pub const LC_CTRL_PARAM_CSR_LC_STATE_WIDTH: u32 = 30;
24pub const LC_CTRL_PARAM_CSR_LC_COUNT_WIDTH: u32 = 5;
26pub const LC_CTRL_PARAM_CSR_LC_ID_STATE_WIDTH: u32 = 32;
28pub const LC_CTRL_PARAM_CSR_OTP_TEST_CTRL_WIDTH: u32 = 32;
30pub const LC_CTRL_PARAM_CSR_OTP_TEST_STATUS_WIDTH: u32 = 32;
32pub const LC_CTRL_PARAM_NUM_DEVICE_ID_WORDS: u32 = 8;
34pub const LC_CTRL_PARAM_NUM_MANUF_STATE_WORDS: u32 = 8;
36pub const LC_CTRL_PARAM_NUM_ALERTS: u32 = 3;
38pub const LC_CTRL_PARAM_REG_WIDTH: u32 = 32;
40
41register_structs! {
42 pub LcCtrlRegisters {
43 (0x0000 => pub(crate) alert_test: ReadWrite<u32, ALERT_TEST::Register>),
45 (0x0004 => pub(crate) status: ReadWrite<u32, STATUS::Register>),
47 (0x0008 => pub(crate) claim_transition_if_regwen: ReadWrite<u32, CLAIM_TRANSITION_IF_REGWEN::Register>),
49 (0x000c => pub(crate) claim_transition_if: ReadWrite<u32, CLAIM_TRANSITION_IF::Register>),
51 (0x0010 => pub(crate) transition_regwen: ReadWrite<u32, TRANSITION_REGWEN::Register>),
53 (0x0014 => pub(crate) transition_cmd: ReadWrite<u32, TRANSITION_CMD::Register>),
55 (0x0018 => pub(crate) transition_ctrl: ReadWrite<u32, TRANSITION_CTRL::Register>),
57 (0x001c => pub(crate) transition_token: [ReadWrite<u32, TRANSITION_TOKEN::Register>; 4]),
59 (0x002c => pub(crate) transition_target: ReadWrite<u32, TRANSITION_TARGET::Register>),
61 (0x0030 => pub(crate) otp_vendor_test_ctrl: ReadWrite<u32, OTP_VENDOR_TEST_CTRL::Register>),
63 (0x0034 => pub(crate) otp_vendor_test_status: ReadWrite<u32, OTP_VENDOR_TEST_STATUS::Register>),
65 (0x0038 => pub(crate) lc_state: ReadWrite<u32, LC_STATE::Register>),
67 (0x003c => pub(crate) lc_transition_cnt: ReadWrite<u32, LC_TRANSITION_CNT::Register>),
69 (0x0040 => pub(crate) lc_id_state: ReadWrite<u32, LC_ID_STATE::Register>),
71 (0x0044 => pub(crate) hw_revision0: ReadWrite<u32, HW_REVISION0::Register>),
73 (0x0048 => pub(crate) hw_revision1: ReadWrite<u32, HW_REVISION1::Register>),
75 (0x004c => pub(crate) device_id: [ReadWrite<u32, DEVICE_ID::Register>; 8]),
77 (0x006c => pub(crate) manuf_state: [ReadWrite<u32, MANUF_STATE::Register>; 8]),
79 (0x008c => @END),
80 }
81}
82
83register_bitfields![u32,
84 pub(crate) ALERT_TEST [
85 FATAL_PROG_ERROR OFFSET(0) NUMBITS(1) [],
86 FATAL_STATE_ERROR OFFSET(1) NUMBITS(1) [],
87 FATAL_BUS_INTEG_ERROR OFFSET(2) NUMBITS(1) [],
88 ],
89 pub(crate) STATUS [
90 INITIALIZED OFFSET(0) NUMBITS(1) [],
91 READY OFFSET(1) NUMBITS(1) [],
92 EXT_CLOCK_SWITCHED OFFSET(2) NUMBITS(1) [],
93 TRANSITION_SUCCESSFUL OFFSET(3) NUMBITS(1) [],
94 TRANSITION_COUNT_ERROR OFFSET(4) NUMBITS(1) [],
95 TRANSITION_ERROR OFFSET(5) NUMBITS(1) [],
96 TOKEN_ERROR OFFSET(6) NUMBITS(1) [],
97 FLASH_RMA_ERROR OFFSET(7) NUMBITS(1) [],
98 OTP_ERROR OFFSET(8) NUMBITS(1) [],
99 STATE_ERROR OFFSET(9) NUMBITS(1) [],
100 BUS_INTEG_ERROR OFFSET(10) NUMBITS(1) [],
101 OTP_PARTITION_ERROR OFFSET(11) NUMBITS(1) [],
102 ],
103 pub(crate) CLAIM_TRANSITION_IF_REGWEN [
104 CLAIM_TRANSITION_IF_REGWEN OFFSET(0) NUMBITS(1) [],
105 ],
106 pub(crate) CLAIM_TRANSITION_IF [
107 MUTEX OFFSET(0) NUMBITS(8) [],
108 ],
109 pub(crate) TRANSITION_REGWEN [
110 TRANSITION_REGWEN OFFSET(0) NUMBITS(1) [],
111 ],
112 pub(crate) TRANSITION_CMD [
113 START OFFSET(0) NUMBITS(1) [],
114 ],
115 pub(crate) TRANSITION_CTRL [
116 EXT_CLOCK_EN OFFSET(0) NUMBITS(1) [],
117 VOLATILE_RAW_UNLOCK OFFSET(1) NUMBITS(1) [],
118 ],
119 pub(crate) TRANSITION_TOKEN [
120 TRANSITION_TOKEN_0 OFFSET(0) NUMBITS(32) [],
121 ],
122 pub(crate) TRANSITION_TARGET [
123 STATE OFFSET(0) NUMBITS(30) [
124 RAW = 0,
125 TEST_UNLOCKED0 = 34636833,
126 TEST_LOCKED0 = 69273666,
127 TEST_UNLOCKED1 = 103910499,
128 TEST_LOCKED1 = 138547332,
129 TEST_UNLOCKED2 = 173184165,
130 TEST_LOCKED2 = 207820998,
131 TEST_UNLOCKED3 = 242457831,
132 TEST_LOCKED3 = 277094664,
133 TEST_UNLOCKED4 = 311731497,
134 TEST_LOCKED4 = 346368330,
135 TEST_UNLOCKED5 = 381005163,
136 TEST_LOCKED5 = 415641996,
137 TEST_UNLOCKED6 = 450278829,
138 TEST_LOCKED6 = 484915662,
139 TEST_UNLOCKED7 = 519552495,
140 DEV = 554189328,
141 PROD = 588826161,
142 PROD_END = 623462994,
143 RMA = 658099827,
144 SCRAP = 692736660,
145 ],
146 ],
147 pub(crate) OTP_VENDOR_TEST_CTRL [
148 OTP_VENDOR_TEST_CTRL OFFSET(0) NUMBITS(32) [],
149 ],
150 pub(crate) OTP_VENDOR_TEST_STATUS [
151 OTP_VENDOR_TEST_STATUS OFFSET(0) NUMBITS(32) [],
152 ],
153 pub(crate) LC_STATE [
154 STATE OFFSET(0) NUMBITS(30) [
155 RAW = 0,
156 TEST_UNLOCKED0 = 34636833,
157 TEST_LOCKED0 = 69273666,
158 TEST_UNLOCKED1 = 103910499,
159 TEST_LOCKED1 = 138547332,
160 TEST_UNLOCKED2 = 173184165,
161 TEST_LOCKED2 = 207820998,
162 TEST_UNLOCKED3 = 242457831,
163 TEST_LOCKED3 = 277094664,
164 TEST_UNLOCKED4 = 311731497,
165 TEST_LOCKED4 = 346368330,
166 TEST_UNLOCKED5 = 381005163,
167 TEST_LOCKED5 = 415641996,
168 TEST_UNLOCKED6 = 450278829,
169 TEST_LOCKED6 = 484915662,
170 TEST_UNLOCKED7 = 519552495,
171 DEV = 554189328,
172 PROD = 588826161,
173 PROD_END = 623462994,
174 RMA = 658099827,
175 SCRAP = 692736660,
176 POST_TRANSITION = 727373493,
177 ESCALATE = 762010326,
178 INVALID = 796647159,
179 ],
180 ],
181 pub(crate) LC_TRANSITION_CNT [
182 CNT OFFSET(0) NUMBITS(5) [],
183 ],
184 pub(crate) LC_ID_STATE [
185 STATE OFFSET(0) NUMBITS(32) [
186 BLANK = 0,
187 PERSONALIZED = 286331153,
188 INVALID = 572662306,
189 ],
190 ],
191 pub(crate) HW_REVISION0 [
192 PRODUCT_ID OFFSET(0) NUMBITS(16) [],
193 SILICON_CREATOR_ID OFFSET(16) NUMBITS(16) [],
194 ],
195 pub(crate) HW_REVISION1 [
196 REVISION_ID OFFSET(0) NUMBITS(8) [],
197 RESERVED OFFSET(8) NUMBITS(24) [],
198 ],
199 pub(crate) DEVICE_ID [
200 DEVICE_ID_0 OFFSET(0) NUMBITS(32) [],
201 ],
202 pub(crate) MANUF_STATE [
203 MANUF_STATE_0 OFFSET(0) NUMBITS(32) [],
204 ],
205];
206
207