12#include "hw/top/dt/otp_ctrl.h"
15#include "hw/top/otp_ctrl_regs.h"
50 [kDtOtpCtrlRegBlockCore] = 0x40130000,
64 [kOtpPartitionVendorTest] = {
65 .start_addr = OTP_CTRL_PARAM_VENDOR_TEST_OFFSET,
66 .size = OTP_CTRL_PARAM_VENDOR_TEST_SIZE - OTP_CTRL_PARAM_VENDOR_TEST_DIGEST_SIZE,
70 .digest_reg_offset = OTP_CTRL_VENDOR_TEST_DIGEST_0_REG_OFFSET,
72 .lock_reg_offset = OTP_CTRL_VENDOR_TEST_READ_LOCK_REG_OFFSET,
73 .read_lock_bit = OTP_CTRL_VENDOR_TEST_READ_LOCK_VENDOR_TEST_READ_LOCK_BIT,
78 [kOtpPartitionCreatorSwCfg] = {
79 .start_addr = OTP_CTRL_PARAM_CREATOR_SW_CFG_OFFSET,
80 .size = OTP_CTRL_PARAM_CREATOR_SW_CFG_SIZE - OTP_CTRL_PARAM_CREATOR_SW_CFG_DIGEST_SIZE,
84 .digest_reg_offset = OTP_CTRL_CREATOR_SW_CFG_DIGEST_0_REG_OFFSET,
86 .lock_reg_offset = OTP_CTRL_CREATOR_SW_CFG_READ_LOCK_REG_OFFSET,
87 .read_lock_bit = OTP_CTRL_CREATOR_SW_CFG_READ_LOCK_CREATOR_SW_CFG_READ_LOCK_BIT,
92 [kOtpPartitionOwnerSwCfg] = {
93 .start_addr = OTP_CTRL_PARAM_OWNER_SW_CFG_OFFSET,
94 .size = OTP_CTRL_PARAM_OWNER_SW_CFG_SIZE - OTP_CTRL_PARAM_OWNER_SW_CFG_DIGEST_SIZE,
98 .digest_reg_offset = OTP_CTRL_OWNER_SW_CFG_DIGEST_0_REG_OFFSET,
100 .lock_reg_offset = OTP_CTRL_OWNER_SW_CFG_READ_LOCK_REG_OFFSET,
101 .read_lock_bit = OTP_CTRL_OWNER_SW_CFG_READ_LOCK_OWNER_SW_CFG_READ_LOCK_BIT,
106 [kOtpPartitionRotCreatorAuthCodesign] = {
107 .start_addr = OTP_CTRL_PARAM_ROT_CREATOR_AUTH_CODESIGN_OFFSET,
108 .size = OTP_CTRL_PARAM_ROT_CREATOR_AUTH_CODESIGN_SIZE - OTP_CTRL_PARAM_ROT_CREATOR_AUTH_CODESIGN_DIGEST_SIZE,
112 .digest_reg_offset = OTP_CTRL_ROT_CREATOR_AUTH_CODESIGN_DIGEST_0_REG_OFFSET,
114 .lock_reg_offset = OTP_CTRL_ROT_CREATOR_AUTH_CODESIGN_READ_LOCK_REG_OFFSET,
115 .read_lock_bit = OTP_CTRL_ROT_CREATOR_AUTH_CODESIGN_READ_LOCK_ROT_CREATOR_AUTH_CODESIGN_READ_LOCK_BIT,
120 [kOtpPartitionRotCreatorAuthState] = {
121 .start_addr = OTP_CTRL_PARAM_ROT_CREATOR_AUTH_STATE_OFFSET,
122 .size = OTP_CTRL_PARAM_ROT_CREATOR_AUTH_STATE_SIZE - OTP_CTRL_PARAM_ROT_CREATOR_AUTH_STATE_DIGEST_SIZE,
126 .digest_reg_offset = OTP_CTRL_ROT_CREATOR_AUTH_STATE_DIGEST_0_REG_OFFSET,
128 .lock_reg_offset = OTP_CTRL_ROT_CREATOR_AUTH_STATE_READ_LOCK_REG_OFFSET,
129 .read_lock_bit = OTP_CTRL_ROT_CREATOR_AUTH_STATE_READ_LOCK_ROT_CREATOR_AUTH_STATE_READ_LOCK_BIT,
134 [kOtpPartitionHwCfg0] = {
135 .start_addr = OTP_CTRL_PARAM_HW_CFG0_OFFSET,
136 .size = OTP_CTRL_PARAM_HW_CFG0_SIZE - OTP_CTRL_PARAM_HW_CFG0_DIGEST_SIZE,
140 .digest_reg_offset = OTP_CTRL_HW_CFG0_DIGEST_0_REG_OFFSET,
142 .lock_reg_offset = 0xdeadbeef,
143 .read_lock_bit = 0xdeadbeef,
148 [kOtpPartitionHwCfg1] = {
149 .start_addr = OTP_CTRL_PARAM_HW_CFG1_OFFSET,
150 .size = OTP_CTRL_PARAM_HW_CFG1_SIZE - OTP_CTRL_PARAM_HW_CFG1_DIGEST_SIZE,
154 .digest_reg_offset = OTP_CTRL_HW_CFG1_DIGEST_0_REG_OFFSET,
156 .lock_reg_offset = 0xdeadbeef,
157 .read_lock_bit = 0xdeadbeef,
162 [kOtpPartitionSecret0] = {
163 .start_addr = OTP_CTRL_PARAM_SECRET0_OFFSET,
164 .size = OTP_CTRL_PARAM_SECRET0_SIZE - OTP_CTRL_PARAM_SECRET0_DIGEST_SIZE,
168 .digest_reg_offset = OTP_CTRL_SECRET0_DIGEST_0_REG_OFFSET,
170 .lock_reg_offset = 0xdeadbeef,
171 .read_lock_bit = 0xdeadbeef,
176 [kOtpPartitionSecret1] = {
177 .start_addr = OTP_CTRL_PARAM_SECRET1_OFFSET,
178 .size = OTP_CTRL_PARAM_SECRET1_SIZE - OTP_CTRL_PARAM_SECRET1_DIGEST_SIZE,
182 .digest_reg_offset = OTP_CTRL_SECRET1_DIGEST_0_REG_OFFSET,
184 .lock_reg_offset = 0xdeadbeef,
185 .read_lock_bit = 0xdeadbeef,
190 [kOtpPartitionSecret2] = {
191 .start_addr = OTP_CTRL_PARAM_SECRET2_OFFSET,
192 .size = OTP_CTRL_PARAM_SECRET2_SIZE - OTP_CTRL_PARAM_SECRET2_DIGEST_SIZE,
196 .digest_reg_offset = OTP_CTRL_SECRET2_DIGEST_0_REG_OFFSET,
198 .lock_reg_offset = 0xdeadbeef,
199 .read_lock_bit = 0xdeadbeef,
204 [kOtpPartitionLifeCycle] = {
205 .start_addr = OTP_CTRL_PARAM_LIFE_CYCLE_OFFSET,
206 .size = OTP_CTRL_PARAM_LIFE_CYCLE_SIZE,
210 .digest_reg_offset = 0xdeadbeef,
212 .lock_reg_offset = 0xdeadbeef,
213 .read_lock_bit = 0xdeadbeef,
228#define TRY_GET_DT(dt, default) ({ if ((dt) < (dt_otp_ctrl_t)0 || (int)(dt) >= kDtOtpCtrlCount) return (default); &otp_ctrl_desc[dt]; })
246 return TRY_GET_DT(dt, 0xdeadbeef)->reg_addr[reg_block];
253 if (first_irq == kDtPlicIrqIdNone) {
254 return kDtPlicIrqIdNone;
264 if (first_irq == kDtPlicIrqIdNone) {
277 return (
dt_alert_id_t)((uint32_t)otp_ctrl_desc[dt].first_alert + (uint32_t)alert);
284 if (alert < otp_ctrl_desc[dt].first_alert || alert >= otp_ctrl_desc[dt].first_alert + (
dt_alert_id_t)count) {
315 .start_addr = 0xdeadbeef,
320 .digest_reg_offset = 0xdeadbeef,
322 .lock_reg_offset = 0xdeadbeef,
323 .read_lock_bit = 0xdeadbeef,
328 return TRY_GET_DT(dt, invalid_part)->partitions.info[partition];