Fuses: Difference between revisions
No edit summary |
|||
Line 664: | Line 664: | ||
| 0x7000FA18 | | 0x7000FA18 | ||
|- | |- | ||
| FUSE_OPT_SEC_DEBUG_EN | | [[#FUSE_OPT_SEC_DEBUG_EN|FUSE_OPT_SEC_DEBUG_EN]] | ||
| 0x7000FA1C | | 0x7000FA1C | ||
|- | |- | ||
Line 718: | Line 718: | ||
| 0x7000FA60 | | 0x7000FA60 | ||
|- | |- | ||
| FUSE_OPT_PRIV_SEC_EN | | [[#FUSE_OPT_PRIV_SEC_EN|FUSE_OPT_PRIV_SEC_EN]] | ||
| 0x7000FA64 | | 0x7000FA64 | ||
|- | |- | ||
Line 969: | Line 969: | ||
Original launch units have this value set to 0xA0 (revision 5.0). The first batch of patched units have this value set to 0xC0 (revision 6.0). The second batch of patched units have this value set to 0xE0 (revision 7.0) | Original launch units have this value set to 0xA0 (revision 5.0). The first batch of patched units have this value set to 0xC0 (revision 6.0). The second batch of patched units have this value set to 0xE0 (revision 7.0) | ||
==== FUSE_SOC_SPEEDO_1_CALIB ==== | |||
Stores the bootrom patch version. | |||
==== FUSE_FA ==== | ==== FUSE_FA ==== | ||
Stores failure analysis mode. | Stores failure analysis mode. | ||
==== | ==== FUSE_PUBLIC_KEY ==== | ||
Stores the | Stores the SHA256 hash of the 2048-bit RSA key expected at BCT+0x210. | ||
==== FUSE_OPT_CP_REV ==== | |||
Stores the CP (Chip Probing) revision. | |||
Original launch units have this value set to 0xA0 (revision 5.0). Patched units have this value set to 0x103 (revision 8.3). | |||
==== FUSE_PRIVATE_KEY ==== | |||
Stores the 160-bit private key (128 bit SBK + 32-bit device key). | |||
Reads to these registers after the SBK is locked out produce all-FF output. | |||
==== FUSE_RESERVED_SW ==== | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-2 | |||
| Boot device | |||
|- | |||
| 3 | |||
| Skip device selection straps (0 = don't skip; 1 = skip) | |||
|- | |||
| 4 | |||
| ENABLE_CHARGER_DETECT | |||
|- | |||
| 5 | |||
| ENABLE_WATCHDOG | |||
|- | |||
| 6 | |||
| Forced RCM two button mode (0 = Only VOLUME_UP; 1 = VOLUME_UP + HOME) | |||
|- | |||
| 7 | |||
| RCM USB controller mode (0 = USB 2.0; 1 = XUSB) | |||
|} | |||
Caches the value of the reserved_sw fuse from the hardware bitmap. | |||
Original launch units have the RCM USB controller mode set to USB 2.0, while the first batch of patched units have the RCM USB controller mode set to XUSB. | |||
==== FUSE_RESERVED_ODM0 ==== | ==== FUSE_RESERVED_ODM0 ==== | ||
Stores an hardware ID. | |||
==== FUSE_RESERVED_ODM1 ==== | ==== FUSE_RESERVED_ODM1 ==== | ||
Stores an hardware ID. | |||
==== FUSE_RESERVED_ODM2 ==== | ==== FUSE_RESERVED_ODM2 ==== | ||
Line 991: | Line 1,032: | ||
|} | |} | ||
Stores an hardware ID in original launch units, but in patched units it stores a single value (key generation). | |||
==== FUSE_RESERVED_ODM3 ==== | ==== FUSE_RESERVED_ODM3 ==== | ||
Stores an hardware ID in original launch units, but is empty in patched units. | |||
==== FUSE_RESERVED_ODM4 ==== | ==== FUSE_RESERVED_ODM4 ==== | ||
Line 1,027: | Line 1,068: | ||
|} | |} | ||
Stores some device configuration parameters. | |||
==== FUSE_RESERVED_ODM5 ==== | |||
Empty and unused. | |||
==== FUSE_RESERVED_ODM6 ==== | ==== FUSE_RESERVED_ODM6 ==== | ||
Returns the value of the [[#reserved_odm6|reserved_odm6]] anti-downgrade fuse. | |||
==== FUSE_RESERVED_ODM7 ==== | ==== FUSE_RESERVED_ODM7 ==== | ||
Returns the value of the [[#reserved_odm7|reserved_odm7]] anti-downgrade fuse. | |||
==== | ==== FUSE_OPT_SEC_DEBUG_EN ==== | ||
Controls the [[TSEC#TSEC_SCP_CTL_STAT|Falcon SCP]] debug mode. | |||
==== | ==== FUSE_OPT_PRIV_SEC_EN ==== | ||
Controls the [[TSEC#FALCON_SCTL|Falcon Light Secure]] feature. | |||
==== FUSE_PKC_DISABLE ==== | |||
Returns if public key crypto is used or not. | |||
==== | ==== FUSE_ECO_RESERVE_0 ==== | ||
Returns the chip unique AID. | |||
==== | ==== FUSE_SPARE_BIT_2 ==== | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0 | ||
| | | Speedo fusing revision | ||
|} | |} | ||
==== FUSE_SPARE_BIT_3 ==== | ==== FUSE_SPARE_BIT_3 ==== | ||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Speedo fusing revision | |||
|} | |||
==== FUSE_SPARE_BIT_4 ==== | ==== FUSE_SPARE_BIT_4 ==== | ||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Speedo fusing revision | |||
|} | |||
==== FUSE_SPARE_BIT_5 ==== | ==== FUSE_SPARE_BIT_5 ==== | ||
Line 1,096: | Line 1,127: | ||
The actual hardware fuses are stored in a bitmap and may be programmed through the fuse driver after enabling fuse programming. | The actual hardware fuses are stored in a bitmap and may be programmed through the fuse driver after enabling fuse programming. | ||
Fuse numbers are relative to the start of the fuse bitmap where each element is a 4 byte word and has a redundant alias. A single fuse write operation must always write the same value to '''fuse_bitmap + ((fuse_number + 0) << 2)''' (PRIMARY_ALIAS) and '''fuse_bitmap + ((fuse_number + 1) << 2)''' (REDUNDANT_ALIAS). However, | Fuse numbers are relative to the start of the fuse bitmap where each element is a 4 byte word and has a redundant alias. A single fuse write operation must always write the same value to '''fuse_bitmap + ((fuse_number + 0) << 2)''' (PRIMARY_ALIAS) and '''fuse_bitmap + ((fuse_number + 1) << 2)''' (REDUNDANT_ALIAS). However, spare bits and all fuses afterwards in the fuse bitmap, no longer have a redundant alias. | ||
Below is a list of common fuses used by Tegra devices (and applicable to the Switch). | Below is a list of common fuses used by Tegra devices (and applicable to the Switch). | ||
Line 1,485: | Line 1,516: | ||
| 91 | | 91 | ||
| 28-29 | | 28-29 | ||
|- | |||
| spare_bit_0 | |||
| 100 | |||
| None | |||
| 16 | |||
|- | |||
| spare_bit_1 | |||
| 100 | |||
| None | |||
| 17 | |||
|- | |||
| spare_bit_2 | |||
| 100 | |||
| None | |||
| 18 | |||
|- | |||
| spare_bit_3 | |||
| 100 | |||
| None | |||
| 19 | |||
|- | |||
| spare_bit_4 | |||
| 100 | |||
| None | |||
| 20 | |||
|- | |||
| spare_bit_5 | |||
| 100 | |||
| None | |||
| 21 | |||
|- | |||
| spare_bit_6 | |||
| 100 | |||
| None | |||
| 22 | |||
|- | |||
| spare_bit_7 | |||
| 100 | |||
| None | |||
| 23 | |||
|- | |||
| spare_bit_8 | |||
| 100 | |||
| None | |||
| 24 | |||
|- | |||
| spare_bit_9 | |||
| 100 | |||
| None | |||
| 25 | |||
|- | |||
| spare_bit_10 | |||
| 100 | |||
| None | |||
| 26 | |||
|- | |||
| spare_bit_11 | |||
| 100 | |||
| None | |||
| 27 | |||
|- | |||
| spare_bit_12 | |||
| 100 | |||
| None | |||
| 28 | |||
|- | |||
| spare_bit_13 | |||
| 100 | |||
| None | |||
| 29 | |||
|- | |||
| spare_bit_14 | |||
| 100 | |||
| None | |||
| 30 | |||
|- | |||
| spare_bit_15 | |||
| 100 | |||
| None | |||
| 31 | |||
|- | |||
| spare_bit_16 | |||
| 101 | |||
| None | |||
| 16 | |||
|- | |||
| spare_bit_17 | |||
| 101 | |||
| None | |||
| 17 | |||
|- | |||
| spare_bit_18 | |||
| 101 | |||
| None | |||
| 18 | |||
|- | |||
| spare_bit_19 | |||
| 101 | |||
| None | |||
| 19 | |||
|- | |||
| spare_bit_20 | |||
| 101 | |||
| None | |||
| 20 | |||
|- | |||
| spare_bit_21 | |||
| 101 | |||
| None | |||
| 21 | |||
|- | |||
| spare_bit_22 | |||
| 101 | |||
| None | |||
| 22 | |||
|- | |||
| spare_bit_23 | |||
| 101 | |||
| None | |||
| 23 | |||
|- | |||
| spare_bit_24 | |||
| 101 | |||
| None | |||
| 24 | |||
|- | |||
| spare_bit_25 | |||
| 101 | |||
| None | |||
| 25 | |||
|- | |||
| spare_bit_26 | |||
| 101 | |||
| None | |||
| 26 | |||
|- | |||
| spare_bit_27 | |||
| 101 | |||
| None | |||
| 27 | |||
|- | |||
| spare_bit_28 | |||
| 101 | |||
| None | |||
| 28 | |||
|- | |||
| spare_bit_29 | |||
| 101 | |||
| None | |||
| 29 | |||
|- | |||
| spare_bit_30 | |||
| 101 | |||
| None | |||
| 30 | |||
|- | |||
| spare_bit_31 | |||
| 101 | |||
| None | |||
| 31 | |||
|- | |- | ||
| aid | | aid | ||
| 103 | | 103 | ||
| None | | None | ||
| 0- | | 2-31 | ||
|- | |||
| aid | |||
| 104 | |||
| None | |||
| 0-1 | |||
|- | |- | ||
| ramrepair_record0 | | ramrepair_record0 | ||
| | | 105 | ||
| None | | None | ||
| 0-31 | | 0-31 | ||
|- | |- | ||
| ramrepair_record1 | | ramrepair_record1 | ||
| | | 106 | ||
| None | | None | ||
| 0-31 | | 0-31 | ||
|- | |- | ||
| ramrepair_record2 | | ramrepair_record2 | ||
| | | 107 | ||
| None | | None | ||
| 0-31 | | 0-31 | ||
|- | |- | ||
| ramrepair_record3 | | ramrepair_record3 | ||
| | | 108 | ||
| None | | None | ||
| 0-31 | | 0-31 | ||
|- | |- | ||
| ramrepair_record4 | | ramrepair_record4 | ||
| | | 109 | ||
| None | | None | ||
| 0-31 | | 0-31 | ||
|- | |- | ||
| ramrepair_record5 | | ramrepair_record5 | ||
| | | 110 | ||
| None | |||
| 0-31 | |||
|- | |||
| ramrepair_record6 | |||
| 111 | |||
| None | |||
| 0-31 | |||
|- | |||
| ramrepair_record7 | |||
| 112 | |||
| None | |||
| 0-31 | |||
|- | |||
| ramrepair_record8 | |||
| 113 | |||
| None | | None | ||
| 0-31 | | 0-31 |