Anonymous

Changes

From Rare Gaming Dump
1,123 bytes added ,  00:16, 19 September 2021
no edit summary
Line 1: Line 1:  +
{{DISPLAYTITLE:eFuse}}
 +
 +
{{Template:Wikipedia|https://en.wikipedia.org/wiki/eFuse}}
 +
 +
On Nintendo consoles, '''eFuse'''s are used as irreversible data storage for keeping values which are set while the chip is being manufactured and will never be updated again. They are mostly used to store information which is sensitive and cannot be changed for security purposes.
 +
 +
==Wii==
 
<span style="background: #F1EBEB; border: 2px #CACACA solid; padding: 2px 1px 2px 4px;">
 
<span style="background: #F1EBEB; border: 2px #CACACA solid; padding: 2px 1px 2px 4px;">
[[File:Wii.png |30px|30px]] This topic has a Wiibrew article. For more information, check [https://wiibrew.org/wiki/Hardware/OTP here].</span>
+
[[File:Wii.png |30px]] This topic has a Wiibrew article. For more information, check [https://wiibrew.org/wiki/Hardware/OTP here].</span>
 +
 
 +
In the Wii homebrew community, the term "OTP" (one-time programmable) is usually used to refer to the console's eFuses. Official documentation & code uses the "eFuse" name.
 +
 
 +
The Wii has 128 bytes of eFuses within the [[Hollywood]] package, which all have a default value of 0. The final byte of the eFuses, which reverse engineering efforts were unable to document, has been revealed by leaked documentation to be used for toggling certain debugging features.<ref>[[emeralds.7z]]/doc/hw/chip/vegas_clocks_resets.doc - pg 44</ref>
 +
 
 +
Bits 4-7 of the final eFuse byte each have a function:
 +
 
 +
Bit 4 - when set, disables trace
 +
 
 +
Bit 5 - when set, disables debug boot (booting directly from [[EXI]] as done on the [[GameCube]], rather than through the [[IOP]])
 +
 
 +
Bit 6 - when set, disables scan
 +
 
 +
Bit 7 - when set, disables JTAG
 +
 
 +
Retail consoles typically have everything disabled except for trace, resulting in a byte value of 0x07.
 +
 
 +
[[boot0]] checks the integrity of boot1 by ensuring that it matches the hash stored in eFuses, but it will skip verification if the hash is blank.<ref>[[unsorted.7z]]/d1/routefree/ng/depot/sw/rvl/boot/boot0/bootc.c - loop at line 458 enables verification only if the hash is not blank</ref>
 +
 
 +
The Wii's eFuses are normally programmed (or "cut") during production of the Hollywood package. They cannot be programmed afterwards on most systems, as the only mechanism to do so is through the JTAG, which is locked out by the eFuses on retail consoles.<ref>[[emeralds.7z]]/052306/doc/hw/chip/vegas_datasheet.doc - pg 20</ref><ref>[[emeralds.7z]]/052306/hw/sys/jtag/jtag_bfm.v - has code to cut an eFuse at line 655</ref>
 +
 
 +
{{Template:WiiNavbox}}
   −
The '''One-time programmable''' (OTP) refers to a storage area which is only writable once. It is used on various Nintendo consoles to store console-unique information and is written during the factory process.
+
[[Category:Wii]]
   −
== Nintendo Wii ==
+
[[Category:Hardware]]
The Nintendo Wii stores a small amount of data here; some of it is Wii-specific (such as NAND keys), but the hash of the version of boot1 used in that Wii is also stored (making boot1 impossible to update), and the common key used in the Wii.
+
<references />
=== OTP Contents ===
  −
The following things are stored inside the OTP:
  −
{| style="border: 1px solid #bbb; border-collapse: collapse; background-color: #eef; padding: 0.2em 0.2em 0.2em 0.2em;" border="1" cellpadding="2"
  −
|- style="background-color: #ddd;"
  −
! Address
  −
! Description
  −
|-
  −
| 0-4 || Boot1 hash
  −
|-
  −
| 5-8 || common key
  −
|-
  −
| 9 || NG id
  −
|-
  −
| a-11 || NG private key
  −
|-
  −
| 11-15 || NAND HMAC (overlaps with NG private key)
  −
|-
  −
| 16-19 || NAND key
  −
|-
  −
| 1a-1d || RNG key
  −
|-
  −
| 1e-1f || Unknown
  −
|-
  −
|}