25#ifndef LIBSWITCHTEC_MFG_H
26#define LIBSWITCHTEC_MFG_H
28#define SWITCHTEC_MB_LOG_LEN 32
30#define SWITCHTEC_PUB_KEY_LEN 512
31#define SWITCHTEC_SIG_LEN 512
32#define SWITCHTEC_UDS_LEN 32
33#define SWITCHTEC_KMSK_LEN 64
34#define SWITCHTEC_KMSK_NUM_MAX 10
36#define SWITCHTEC_SECURITY_SPI_RATE_MAX_NUM 16
43 uint32_t ver_sec_unlock;
47enum switchtec_debug_mode {
48 SWITCHTEC_DEBUG_MODE_ENABLED,
49 SWITCHTEC_DEBUG_MODE_DISABLED_BUT_ENABLE_ALLOWED,
50 SWITCHTEC_DEBUG_MODE_DISABLED,
51 SWITCHTEC_DEBUG_MODE_DISABLED_EXT
54enum switchtec_secure_state {
55 SWITCHTEC_UNINITIALIZED_UNSECURED,
56 SWITCHTEC_INITIALIZED_UNSECURED,
57 SWITCHTEC_INITIALIZED_SECURED,
58 SWITCHTEC_SECURE_STATE_UNKNOWN = 0xff,
61enum switchtec_attestation_mode {
62 SWITCHTEC_ATTESTATION_MODE_NOT_SUPPORTED,
63 SWITCHTEC_ATTESTATION_MODE_NONE,
64 SWITCHTEC_ATTESTATION_MODE_DICE
70enum switchtec_otp_program_status {
71 SWITCHTEC_OTP_PROGRAMMABLE = 0,
72 SWITCHTEC_OTP_UNPROGRAMMABLE = 1,
75enum switchtec_otp_program_mask {
76 SWITCHTEC_OTP_UNMASKED = 0,
77 SWITCHTEC_OTP_MASKED = 1,
83 bool main_fw_ver_valid;
84 bool sec_unlock_ver_valid;
86 enum switchtec_otp_program_status basic;
87 enum switchtec_otp_program_status mixed_ver;
88 enum switchtec_otp_program_status main_fw_ver;
89 enum switchtec_otp_program_status sec_unlock_ver;
90 enum switchtec_otp_program_status kmsk[4];
95 bool debug_mode_valid;
99 bool main_fw_ver_valid;
100 bool sec_unlock_ver_valid;
102 bool cdi_efuse_inc_mask_valid;
106 bool mchp_uds_mask_valid;
107 bool did_cert0_valid;
108 bool did_cert1_valid;
109 enum switchtec_otp_program_status basic;
110 enum switchtec_otp_program_status debug_mode;
111 enum switchtec_otp_program_status key_ver;
112 enum switchtec_otp_program_status rc_ver;
113 enum switchtec_otp_program_status bl2_ver;
114 enum switchtec_otp_program_status main_fw_ver;
115 enum switchtec_otp_program_status sec_unlock_ver;
116 enum switchtec_otp_program_status kmsk[10];
117 enum switchtec_otp_program_status cdi_efuse_inc_mask;
118 enum switchtec_otp_program_status uds;
119 enum switchtec_otp_program_mask uds_mask;
120 enum switchtec_otp_program_status mchp_uds;
121 enum switchtec_otp_program_mask mchp_uds_mask;
122 enum switchtec_otp_program_status did_cert0;
123 enum switchtec_otp_program_status did_cert1;
127 enum switchtec_attestation_mode attestation_mode;
128 bool cdi_efuse_inc_mask_valid;
129 unsigned int cdi_efuse_inc_mask;
132 unsigned char uds_data[32];
136 bool debug_mode_valid;
137 uint8_t basic_setting_valid;
138 uint8_t public_key_exp_valid;
139 uint8_t public_key_num_valid;
140 uint8_t public_key_ver_valid;
141 uint8_t public_key_valid;
143 enum switchtec_debug_mode debug_mode;
144 enum switchtec_secure_state secure_state;
146 uint8_t jtag_lock_after_reset;
147 uint8_t jtag_lock_after_bl1;
148 uint8_t jtag_bl1_unlock_allowed;
149 uint8_t jtag_post_bl1_unlock_allowed;
152 uint32_t i2c_recovery_tmo;
155 uint32_t i2c_cmd_map;
156 uint32_t public_key_exponent;
157 uint32_t public_key_num;
158 uint32_t public_key_ver;
160 uint8_t public_key[SWITCHTEC_KMSK_NUM_MAX][SWITCHTEC_KMSK_LEN];
171 enum switchtec_attestation_mode attestation_mode;
172 unsigned int cdi_efuse_inc_mask;
175 unsigned char uds_data[32];
179 uint8_t jtag_lock_after_reset;
180 uint8_t jtag_lock_after_bl1;
181 uint8_t jtag_bl1_unlock_allowed;
182 uint8_t jtag_post_bl1_unlock_allowed;
185 uint32_t i2c_recovery_tmo;
188 uint32_t i2c_cmd_map;
189 uint32_t public_key_exponent;
194enum switchtec_active_index_id {
195 SWITCHTEC_ACTIVE_INDEX_0 = 0,
196 SWITCHTEC_ACTIVE_INDEX_1 = 1,
197 SWITCHTEC_ACTIVE_INDEX_NOT_SET = 0xfe
201 enum switchtec_active_index_id bl2;
202 enum switchtec_active_index_id firmware;
203 enum switchtec_active_index_id config;
204 enum switchtec_active_index_id keyman;
205 enum switchtec_active_index_id riot;
208enum switchtec_bl2_recovery_mode {
209 SWITCHTEC_BL2_RECOVERY_I2C = 1,
210 SWITCHTEC_BL2_RECOVERY_XMODEM = 2,
211 SWITCHTEC_BL2_RECOVERY_I2C_AND_XMODEM = 3
215 uint8_t kmsk[SWITCHTEC_KMSK_LEN];
219 uint8_t pubkey[SWITCHTEC_PUB_KEY_LEN];
224 uint8_t signature[SWITCHTEC_SIG_LEN];
228 unsigned char uds[SWITCHTEC_UDS_LEN];
233 float rates[SWITCHTEC_SECURITY_SPI_RATE_MAX_NUM];
238int switchtec_security_config_get(
struct switchtec_dev *dev,
240int switchtec_security_spi_avail_rate_get(
struct switchtec_dev *dev,
242int switchtec_security_config_set(
struct switchtec_dev *dev,
244int switchtec_mailbox_to_file(
struct switchtec_dev *dev,
int fd);
245int switchtec_active_image_index_get(
struct switchtec_dev *dev,
247int switchtec_active_image_index_set(
struct switchtec_dev *dev,
249int switchtec_fw_exec(
struct switchtec_dev *dev,
250 enum switchtec_bl2_recovery_mode recovery_mode);
251int switchtec_boot_resume(
struct switchtec_dev *dev);
252int switchtec_kmsk_set(
struct switchtec_dev *dev,
256int switchtec_secure_state_set(
struct switchtec_dev *dev,
257 enum switchtec_secure_state state);
258int switchtec_dbg_unlock(
struct switchtec_dev *dev, uint32_t serial,
259 uint32_t ver_sec_unlock,
262int switchtec_dbg_unlock_version_update(
struct switchtec_dev *dev,
264 uint32_t ver_sec_unlock,
267int switchtec_read_sec_cfg_file(
struct switchtec_dev *dev,
270int switchtec_read_pubk_file(FILE *pubk_file,
struct switchtec_pubkey *pubk);
271int switchtec_read_kmsk_file(FILE *kmsk_file,
struct switchtec_kmsk *kmsk);
272int switchtec_read_signature_file(FILE *sig_file,
274int switchtec_read_uds_file(FILE *uds_file,
struct switchtec_uds *uds);
int switchtec_sn_ver_get(struct switchtec_dev *dev, struct switchtec_sn_ver_info *info)
Get serial number and security version.