Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
CTCaer
GitHub Repository: CTCaer/hekate
Path: blob/master/bdk/soc/fuse.h
3694 views
1
/*
2
* Copyright (c) 2018 naehrwert
3
* Copyright (c) 2018 shuffle2
4
* Copyright (c) 2018 balika011
5
* Copyright (c) 2019-2025 CTCaer
6
*
7
* This program is free software; you can redistribute it and/or modify it
8
* under the terms and conditions of the GNU General Public License,
9
* version 2, as published by the Free Software Foundation.
10
*
11
* This program is distributed in the hope it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
* more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#ifndef _FUSE_H_
21
#define _FUSE_H_
22
23
#include <utils/types.h>
24
25
/*! Fuse registers. */
26
#define FUSE_CTRL 0x0
27
#define FUSE_ADDR 0x4
28
#define FUSE_RDATA 0x8
29
#define FUSE_WDATA 0xC
30
#define FUSE_TIME_RD1 0x10
31
#define FUSE_TIME_RD2 0x14
32
#define FUSE_TIME_PGM1 0x18
33
#define FUSE_TIME_PGM2 0x1C
34
#define FUSE_PRIV2INTFC 0x20
35
#define FUSE_PRIV2INTFC_START_DATA BIT(0)
36
#define FUSE_PRIV2INTFC_SKIP_RECORDS BIT(1)
37
#define FUSE_FUSEBYPASS 0x24
38
#define FUSE_PRIVATEKEYDISABLE 0x28
39
#define FUSE_PRIVKEY_DISABLE BIT(0)
40
#define FUSE_PRIVKEY_TZ_STICKY_BIT BIT(4)
41
#define FUSE_DISABLEREGPROGRAM 0x2C
42
#define FUSE_WRITE_ACCESS_SW 0x30
43
#define FUSE_PWR_GOOD_SW 0x34
44
#define FUSE_PRIV2RESHIFT 0x3C
45
#define FUSE_FUSETIME_RD0 0x40
46
#define FUSE_FUSETIME_RD1 0x44
47
#define FUSE_FUSETIME_RD2 0x48
48
#define FUSE_FUSETIME_RD3 0x4C
49
#define FUSE_PRIVATE_KEY0_NONZERO 0x80
50
#define FUSE_PRIVATE_KEY1_NONZERO 0x84
51
#define FUSE_PRIVATE_KEY2_NONZERO 0x88
52
#define FUSE_PRIVATE_KEY3_NONZERO 0x8C
53
#define FUSE_PRIVATE_KEY4_NONZERO 0x90
54
55
/*! Fuse Cached registers */
56
#define FUSE_RESERVED_ODM8_B01 0x98 // FUSE_READ_TZ Group 0.
57
#define FUSE_RESERVED_ODM9_B01 0x9C // FUSE_READ_TZ Group 0.
58
#define FUSE_RESERVED_ODM10_B01 0xA0 // FUSE_READ_TZ Group 0.
59
#define FUSE_RESERVED_ODM11_B01 0xA4 // FUSE_READ_TZ Group 0.
60
#define FUSE_RESERVED_ODM12_B01 0xA8 // FUSE_READ_TZ Group 1? Is value -1?
61
#define FUSE_RESERVED_ODM13_B01 0xAC // FUSE_READ_TZ Group 1? Is value -1?
62
#define FUSE_RESERVED_ODM14_B01 0xB0 // FUSE_READ_TZ Group 1? Is value -1?
63
#define FUSE_RESERVED_ODM15_B01 0xB4 // FUSE_READ_TZ Group 1? Is value -1?
64
#define FUSE_RESERVED_ODM16_B01 0xB8 // FUSE_READ_TZ Group 2? Is value -1?
65
#define FUSE_RESERVED_ODM17_B01 0xBC // FUSE_READ_TZ Group 2? Is value -1?
66
#define FUSE_RESERVED_ODM18_B01 0xC0 // FUSE_READ_TZ Group 2.
67
#define FUSE_RESERVED_ODM19_B01 0xC4 // FUSE_READ_TZ Group 2.
68
#define FUSE_RESERVED_ODM20_B01 0xC8 // FUSE_READ_TZ Group 3.
69
#define FUSE_RESERVED_ODM21_B01 0xCC // FUSE_READ_TZ Group 3.
70
#define FUSE_KEK00_B01 0xD0
71
#define FUSE_KEK01_B01 0xD4
72
#define FUSE_KEK02_B01 0xD8
73
#define FUSE_KEK03_B01 0xDC
74
#define FUSE_BEK00_B01 0xE0
75
#define FUSE_BEK01_B01 0xE4
76
#define FUSE_BEK02_B01 0xE8
77
#define FUSE_BEK03_B01 0xEC
78
#define FUSE_OPT_RAM_RTSEL_TSMCSP_PO4SVT_B01 0xF0
79
#define FUSE_OPT_RAM_WTSEL_TSMCSP_PO4SVT_B01 0xF4
80
#define FUSE_OPT_RAM_RTSEL_TSMCPDP_PO4SVT_B01 0xF8
81
#define FUSE_OPT_RAM_MTSEL_TSMCPDP_PO4SVT_B01 0xFC
82
83
#define FUSE_PRODUCTION_MODE 0x100
84
#define FUSE_JTAG_SECUREID_VALID 0x104
85
#define FUSE_ODM_LOCK 0x108
86
#define FUSE_OPT_OPENGL_EN 0x10C
87
#define FUSE_SKU_INFO 0x110
88
#define FUSE_CPU_SPEEDO_0_CALIB 0x114
89
#define FUSE_CPU_IDDQ_CALIB 0x118
90
91
#define FUSE_RESERVED_ODM22_B01 0x11C // FUSE_READ_TZ Group 3.
92
#define FUSE_RESERVED_ODM23_B01 0x120 // FUSE_READ_TZ Group 3.
93
#define FUSE_RESERVED_ODM24_B01 0x124 // FUSE_READ_TZ Group 4.
94
95
#define FUSE_OPT_FT_REV 0x128
96
#define FUSE_CPU_SPEEDO_1_CALIB 0x12C
97
#define FUSE_CPU_SPEEDO_2_CALIB 0x130
98
#define FUSE_SOC_SPEEDO_0_CALIB 0x134
99
#define FUSE_SOC_SPEEDO_1_CALIB 0x138
100
#define FUSE_SOC_SPEEDO_2_CALIB 0x13C
101
#define FUSE_SOC_IDDQ_CALIB 0x140
102
103
#define FUSE_RESERVED_ODM25_B01 0x144 // FUSE_READ_TZ Group 4.
104
105
#define FUSE_FA 0x148
106
#define FUSE_RESERVED_PRODUCTION 0x14C
107
#define FUSE_HDMI_LANE0_CALIB 0x150
108
#define FUSE_HDMI_LANE1_CALIB 0x154
109
#define FUSE_HDMI_LANE2_CALIB 0x158
110
#define FUSE_HDMI_LANE3_CALIB 0x15C
111
#define FUSE_ENCRYPTION_RATE 0x160
112
#define FUSE_PUBLIC_KEY0 0x164
113
#define FUSE_PUBLIC_KEY1 0x168
114
#define FUSE_PUBLIC_KEY2 0x16C
115
#define FUSE_PUBLIC_KEY3 0x170
116
#define FUSE_PUBLIC_KEY4 0x174
117
#define FUSE_PUBLIC_KEY5 0x178
118
#define FUSE_PUBLIC_KEY6 0x17C
119
#define FUSE_PUBLIC_KEY7 0x180
120
#define FUSE_TSENSOR1_CALIB 0x184 // CPU1.
121
#define FUSE_TSENSOR2_CALIB 0x188 // CPU2.
122
123
#define FUSE_OPT_SECURE_SCC_DIS_B01 0x18C
124
125
#define FUSE_OPT_CP_REV 0x190 // FUSE style revision - ATE. 0x101 0x100
126
#define FUSE_OPT_PFG 0x194
127
#define FUSE_TSENSOR0_CALIB 0x198 // CPU0.
128
#define FUSE_FIRST_BOOTROM_PATCH_SIZE 0x19C
129
#define FUSE_SECURITY_MODE 0x1A0
130
#define FUSE_PRIVATE_KEY0 0x1A4
131
#define FUSE_PRIVATE_KEY1 0x1A8
132
#define FUSE_PRIVATE_KEY2 0x1AC
133
#define FUSE_PRIVATE_KEY3 0x1B0
134
#define FUSE_PRIVATE_KEY4 0x1B4
135
#define FUSE_ARM_JTAG_DIS 0x1B8
136
#define FUSE_BOOT_DEVICE_INFO 0x1BC
137
#define FUSE_RESERVED_SW 0x1C0
138
#define FUSE_OPT_VP9_DISABLE 0x1C4
139
140
#define FUSE_RESERVED_ODM0 0x1C8
141
#define FUSE_RESERVED_ODM1 0x1CC
142
#define FUSE_RESERVED_ODM2 0x1D0
143
#define FUSE_RESERVED_ODM3 0x1D4
144
#define FUSE_RESERVED_ODM4 0x1D8
145
#define FUSE_RESERVED_ODM5 0x1DC
146
#define FUSE_RESERVED_ODM6 0x1E0
147
#define FUSE_RESERVED_ODM7 0x1E4
148
149
#define FUSE_OBS_DIS 0x1E8
150
151
#define FUSE_OPT_NVJTAG_PROTECTION_ENABLE_B01 0x1EC
152
153
#define FUSE_USB_CALIB 0x1F0
154
#define FUSE_SKU_DIRECT_CONFIG 0x1F4
155
#define FUSE_KFUSE_PRIVKEY_CTRL 0x1F8
156
#define FUSE_PACKAGE_INFO 0x1FC // 1: MID, 2: DSC.
157
#define FUSE_OPT_VENDOR_CODE 0x200
158
#define FUSE_OPT_FAB_CODE 0x204
159
#define FUSE_OPT_LOT_CODE_0 0x208
160
#define FUSE_OPT_LOT_CODE_1 0x20C
161
#define FUSE_OPT_WAFER_ID 0x210
162
#define FUSE_OPT_X_COORDINATE 0x214
163
#define FUSE_OPT_Y_COORDINATE 0x218
164
#define FUSE_OPT_SEC_DEBUG_EN 0x21C
165
#define FUSE_OPT_OPS_RESERVED 0x220
166
#define FUSE_SATA_CALIB 0x224
167
168
#define FUSE_SPARE_REGISTER_ODM_B01 0x224
169
170
#define FUSE_GPU_IDDQ_CALIB 0x228
171
#define FUSE_TSENSOR3_CALIB 0x22C // CPU3.
172
#define FUSE_CLOCK_BONDOUT0 0x230
173
#define FUSE_CLOCK_BONDOUT1 0x234
174
175
#define FUSE_RESERVED_ODM26_B01 0x238 // FUSE_READ_TZ Group 4.
176
#define FUSE_RESERVED_ODM27_B01 0x23C // FUSE_READ_TZ Group 4.
177
#define FUSE_RESERVED_ODM28_B01 0x240 // MAX77812 phase configuration. FUSE_READ_TZ Group 5.
178
179
#define FUSE_OPT_SAMPLE_TYPE 0x244
180
#define FUSE_OPT_SUBREVISION 0x248 // "", "p", "q", "r". e.g: A01p.
181
#define FUSE_OPT_SW_RESERVED_0 0x24C
182
#define FUSE_OPT_SW_RESERVED_1 0x250
183
#define FUSE_TSENSOR4_CALIB 0x254 // GPU.
184
#define FUSE_TSENSOR5_CALIB 0x258 // MEM0.
185
#define FUSE_TSENSOR6_CALIB 0x25C // MEM1.
186
#define FUSE_TSENSOR7_CALIB 0x260 // PLLX.
187
#define FUSE_OPT_PRIV_SEC_DIS 0x264
188
#define FUSE_PKC_DISABLE 0x268
189
190
#define FUSE_BOOT_SECURITY_INFO_B01 0x268
191
#define FUSE_OPT_RAM_RTSEL_TSMCSP_PO4HVT_B01 0x26C
192
#define FUSE_OPT_RAM_WTSEL_TSMCSP_PO4HVT_B01 0x270
193
#define FUSE_OPT_RAM_RTSEL_TSMCPDP_PO4HVT_B01 0x274
194
#define FUSE_OPT_RAM_MTSEL_TSMCPDP_PO4HVT_B01 0x278
195
196
#define FUSE_FUSE2TSEC_DEBUG_DISABLE 0x27C
197
#define FUSE_TSENSOR_COMMON 0x280
198
#define FUSE_OPT_CP_BIN 0x284
199
#define FUSE_OPT_GPU_DISABLE 0x288
200
#define FUSE_OPT_FT_BIN 0x28C
201
#define FUSE_OPT_DONE_MAP 0x290
202
203
#define FUSE_RESERVED_ODM29_B01 0x294 // FUSE_READ_TZ Group 5? Is value -1?
204
205
#define FUSE_APB2JTAG_DISABLE 0x298
206
#define FUSE_ODM_INFO 0x29C // Debug features disable.
207
#define FUSE_ARM_CRYPT_DE_FEATURE 0x2A8
208
209
#define FUSE_OPT_RAM_WTSEL_TSMCPDP_PO4SVT_B01 0x2B0
210
#define FUSE_OPT_RAM_RCT_TSMCDP_PO4SVT_B01 0x2B4
211
#define FUSE_OPT_RAM_WCT_TSMCDP_PO4SVT_B01 0x2B8
212
#define FUSE_OPT_RAM_KP_TSMCDP_PO4SVT_B01 0x2BC
213
214
#define FUSE_WOA_SKU_FLAG 0x2C0
215
#define FUSE_ECO_RESERVE_1 0x2C4
216
#define FUSE_GCPLEX_CONFIG_FUSE 0x2C8
217
#define FUSE_GPU_VPR_AUTO_FETCH_DIS BIT(0)
218
#define FUSE_GPU_VPR_ENABLED BIT(1)
219
#define FUSE_GPU_WPR_ENABLED BIT(2)
220
#define FUSE_PRODUCTION_MONTH 0x2CC
221
#define FUSE_RAM_REPAIR_INDICATOR 0x2D0
222
#define FUSE_TSENSOR9_CALIB 0x2D4 // AOTAG.
223
#define FUSE_VMIN_CALIBRATION 0x2DC
224
#define FUSE_AGING_SENSOR_CALIBRATION 0x2E0
225
#define FUSE_DEBUG_AUTHENTICATION 0x2E4
226
#define FUSE_SECURE_PROVISION_INDEX 0x2E8
227
#define FUSE_SECURE_PROVISION_INFO 0x2EC
228
#define FUSE_OPT_GPU_DISABLE_CP1 0x2F0
229
#define FUSE_SPARE_ENDIS 0x2F4
230
#define FUSE_ECO_RESERVE_0 0x2F8 // AID.
231
#define FUSE_RESERVED_CALIB0 0x304 // GPCPLL ADC Calibration.
232
#define FUSE_RESERVED_CALIB1 0x308
233
#define FUSE_OPT_GPU_TPC0_DISABLE 0x30C
234
#define FUSE_OPT_GPU_TPC0_DISABLE_CP1 0x310
235
#define FUSE_OPT_CPU_DISABLE 0x314
236
#define FUSE_OPT_CPU_DISABLE_CP1 0x318
237
#define FUSE_TSENSOR10_CALIB 0x31C
238
#define FUSE_TSENSOR10_CALIB_AUX 0x320
239
#define FUSE_OPT_RAM_SVOP_DP 0x324
240
#define FUSE_OPT_RAM_SVOP_PDP 0x328
241
#define FUSE_OPT_RAM_SVOP_REG 0x32C
242
#define FUSE_OPT_RAM_SVOP_SP 0x330
243
#define FUSE_OPT_RAM_SVOP_SMPDP 0x334
244
245
#define FUSE_OPT_RAM_WTSEL_TSMCPDP_PO4HVT_B01 0x324
246
#define FUSE_OPT_RAM_RCT_TSMCDP_PO4HVT_B01 0x328
247
#define FUSE_OPT_RAM_WCT_TSMCDP_PO4HVT_B01 0x32c
248
#define FUSE_OPT_RAM_KP_TSMCDP_PO4HVT_B01 0x330
249
#define FUSE_OPT_RAM_SVOP_SP_B01 0x334
250
251
#define FUSE_OPT_GPU_TPC0_DISABLE_CP2 0x338
252
#define FUSE_OPT_GPU_TPC1_DISABLE 0x33C
253
#define FUSE_OPT_GPU_TPC1_DISABLE_CP1 0x340
254
#define FUSE_OPT_GPU_TPC1_DISABLE_CP2 0x344
255
#define FUSE_OPT_CPU_DISABLE_CP2 0x348
256
#define FUSE_OPT_GPU_DISABLE_CP2 0x34C
257
#define FUSE_USB_CALIB_EXT 0x350
258
#define FUSE_RESERVED_FIELD 0x354 // RMA.
259
#define FUSE_SPARE_REALIGNMENT_REG 0x37C
260
#define FUSE_SPARE_BIT_0 0x380
261
//...
262
#define FUSE_SPARE_BIT_31 0x3FC
263
264
/*! Fuse commands. */
265
#define FUSE_IDLE 0x0
266
#define FUSE_READ 0x1
267
#define FUSE_WRITE 0x2
268
#define FUSE_SENSE 0x3
269
#define FUSE_CMD_MASK 0x3
270
271
/*! Fuse status. */
272
#define FUSE_STATUS_RESET 0
273
#define FUSE_STATUS_POST_RESET 1
274
#define FUSE_STATUS_LOAD_ROW0 2
275
#define FUSE_STATUS_LOAD_ROW1 3
276
#define FUSE_STATUS_IDLE 4
277
#define FUSE_STATUS_READ_SETUP 5
278
#define FUSE_STATUS_READ_STROBE 6
279
#define FUSE_STATUS_SAMPLE_FUSES 7
280
#define FUSE_STATUS_READ_HOLD 8
281
#define FUSE_STATUS_FUSE_SRC_SETUP 9
282
#define FUSE_STATUS_WRITE_SETUP 10
283
#define FUSE_STATUS_WRITE_ADDR_SETUP 11
284
#define FUSE_STATUS_WRITE_PROGRAM 12
285
#define FUSE_STATUS_WRITE_ADDR_HOLD 13
286
#define FUSE_STATUS_FUSE_SRC_HOLD 14
287
#define FUSE_STATUS_LOAD_RIR 15
288
#define FUSE_STATUS_READ_BEFORE_WRITE_SETUP 16
289
#define FUSE_STATUS_READ_DEASSERT_PD 17
290
291
/*! Fuse cache registers. */
292
#define FUSE_RESERVED_ODMX(x) (0x1C8 + 4 * (x))
293
294
#define FUSE_ARRAY_WORDS_NUM 192
295
#define FUSE_ARRAY_WORDS_NUM_B01 256
296
297
enum
298
{
299
FUSE_NX_HW_TYPE_ICOSA,
300
FUSE_NX_HW_TYPE_IOWA,
301
FUSE_NX_HW_TYPE_HOAG,
302
FUSE_NX_HW_TYPE_AULA
303
};
304
305
enum
306
{
307
FUSE_NX_HW_STATE_PROD,
308
FUSE_NX_HW_STATE_DEV
309
};
310
311
void fuse_disable_program();
312
u32 fuse_read_odm(u32 idx);
313
u32 fuse_read_odm_keygen_rev();
314
void fuse_force_8gb_dramid();
315
u32 fuse_read_dramid(bool raw_id);
316
u32 fuse_read_hw_state();
317
u32 fuse_read_hw_type();
318
int fuse_set_sbk();
319
void fuse_wait_idle();
320
void fuse_sense();
321
u32 fuse_read(u32 addr);
322
int fuse_read_ipatch(void (*ipatch)(u32 offset, u32 value));
323
int fuse_read_evp_thunk(u32 *iram_evp_thunks, u32 *iram_evp_thunks_len);
324
u32 fuse_read_array(u32 *words);
325
bool fuse_check_patched_rcm();
326
327
#endif
328
329