<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lacius</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lacius"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Lacius"/>
	<updated>2026-04-19T21:31:25Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Fuses&amp;diff=9650</id>
		<title>Fuses</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Fuses&amp;diff=9650"/>
		<updated>2020-06-08T15:09:12Z</updated>

		<summary type="html">&lt;p&gt;Lacius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch makes use of Tegra&#039;s fuse driver for a number of operations. This driver is mapped to physical address 0x7000F800 with a total size of 0x400 bytes and exposes several registers for fuse programming.&lt;br /&gt;
&lt;br /&gt;
Registers from 0x7000F800 to 0x7000F800 + 0xFF can be used to directly program the hardware fuse bitmap, while registers from 0x7000F800 + 0x100 (FUSE_CHIP_REG_START_OFFSET) to 0x7000F800 + 0x3FC (FUSE_CHIP_REG_END_OFFSET) represent cached values read from certain fuses.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Below is a list of fuse driver registers used by the Switch&#039;s bootloaders.&lt;br /&gt;
&lt;br /&gt;
=== Driver registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSECTRL|FUSE_FUSECTRL]]&lt;br /&gt;
| 0x7000F800&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSEADDR|FUSE_FUSEADDR]]&lt;br /&gt;
| 0x7000F804&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSERDATA|FUSE_FUSERDATA]]&lt;br /&gt;
| 0x7000F808&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSEWDATA|FUSE_FUSEWDATA]]&lt;br /&gt;
| 0x7000F80C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSETIME_RD1|FUSE_FUSETIME_RD1]]&lt;br /&gt;
| 0x7000F810&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSETIME_RD2|FUSE_FUSETIME_RD2]]&lt;br /&gt;
| 0x7000F814&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSETIME_PGM1|FUSE_FUSETIME_PGM1]]&lt;br /&gt;
| 0x7000F818&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSETIME_PGM2|FUSE_FUSETIME_PGM2]]&lt;br /&gt;
| 0x7000F81C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIV2INTFC_START|FUSE_PRIV2INTFC_START]]&lt;br /&gt;
| 0x7000F820&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSEBYPASS|FUSE_FUSEBYPASS]]&lt;br /&gt;
| 0x7000F824&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATEKEYDISABLE|FUSE_PRIVATEKEYDISABLE]]&lt;br /&gt;
| 0x7000F828&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_DISABLEREGPROGRAM|FUSE_DISABLEREGPROGRAM]]&lt;br /&gt;
| 0x7000F82C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_WRITE_ACCESS_SW|FUSE_WRITE_ACCESS_SW]]&lt;br /&gt;
| 0x7000F830&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PWR_GOOD_SW|FUSE_PWR_GOOD_SW]]&lt;br /&gt;
| 0x7000F834&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIV2RESHIFT|FUSE_PRIV2RESHIFT]]&lt;br /&gt;
| 0x7000F83C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FUSETIME_RD3|FUSE_FUSETIME_RD3]]&lt;br /&gt;
| 0x7000F84C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY0_NONZERO|FUSE_PRIVATE_KEY0_NONZERO]]&lt;br /&gt;
| 0x7000F880&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY1_NONZERO|FUSE_PRIVATE_KEY1_NONZERO]]&lt;br /&gt;
| 0x7000F884&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY2_NONZERO|FUSE_PRIVATE_KEY2_NONZERO]]&lt;br /&gt;
| 0x7000F888&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY3_NONZERO|FUSE_PRIVATE_KEY3_NONZERO]]&lt;br /&gt;
| 0x7000F88C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY4_NONZERO|FUSE_PRIVATE_KEY4_NONZERO]]&lt;br /&gt;
| 0x7000F890&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSECTRL ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| FUSE_FUSECTRL_CMD&lt;br /&gt;
 0x00: IDLE&lt;br /&gt;
 0x01: READ&lt;br /&gt;
 0x02: WRITE&lt;br /&gt;
 0x03: SENSE_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 16-20&lt;br /&gt;
| FUSE_FUSECTRL_STATE&lt;br /&gt;
 0x00: STATE_RESET&lt;br /&gt;
 0x01: STATE_POST_RESET&lt;br /&gt;
 0x02: STATE_LOAD_ROW0&lt;br /&gt;
 0x03: STATE_LOAD_ROW1&lt;br /&gt;
 0x04: STATE_IDLE&lt;br /&gt;
 0x05: STATE_READ_SETUP&lt;br /&gt;
 0x06: STATE_READ_STROBE&lt;br /&gt;
 0x07: STATE_SAMPLE_FUSES&lt;br /&gt;
 0x08: STATE_READ_HOLD&lt;br /&gt;
 0x09: STATE_FUSE_SRC_SETUP&lt;br /&gt;
 0x0A: STATE_WRITE_SETUP&lt;br /&gt;
 0x0B: STATE_WRITE_ADDR_SETUP&lt;br /&gt;
 0x0C: STATE_WRITE_PROGRAM&lt;br /&gt;
 0x0D: STATE_WRITE_ADDR_HOLD&lt;br /&gt;
 0x0E: STATE_FUSE_SRC_HOLD&lt;br /&gt;
 0x0F: STATE_LOAD_RIR&lt;br /&gt;
 0x10: STATE_READ_BEFORE_WRITE_SETUP&lt;br /&gt;
 0x11: STATE_READ_DEASSERT_PD&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FUSE_FUSECTRL_MARGIN_READ&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FUSE_FUSECTRL_RWL&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FUSE_FUSECTRL_TRCS&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| FUSE_FUSECTRL_AT1&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| FUSE_FUSECTRL_AT0&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| FUSE_FUSECTRL_PD_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| FUSE_FUSECTRL_FUSE_SENSE_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| FUSE_FUSECTRL_RECORD_SHIFT_DONE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSECTRL_CMD takes the fuse controller&#039;s operation mode. READ and WRITE interact directly with the hardware fuse bitmap while SENSE_CTRL flushes programmed values into the [[Fuses#Cache_registers|cache registers]].&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSECTRL_STATE returns the current state of the fuse controller.&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSECTRL_MARGIN_READ changes the fuse read trip point setting to margin read mode.&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSECTRL_RWL selects the fuse redundancy information row.&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSECTRL_TRCS triggers record shifting.&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSECTRL_PD_CTRL controls the fuse macro&#039;s power down mode.&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSECTRL_FUSE_SENSE_DONE is set if fuse sensing is completed.&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSECTRL_RECORD_SHIFT_DONE is set if record shifting is completed.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSEADDR ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| FUSE_FUSEADDR_VLDFLD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Takes the address of the fuse to be read/written/sensed.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSERDATA ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| FUSE_FUSERDATA_DATA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Returns the value read from the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSEWDATA ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| FUSE_FUSEWDATA_DATA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Takes the value to be written to the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSETIME_RD1 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| FUSE_FUSETIME_RD1_TSUR_MAX&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FUSE_FUSETIME_RD1_TSUR_FUSEOUT&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| FUSE_FUSETIME_RD1_THR_MAX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_RD1_TSUR_MAX takes the maximum time for [[#FUSE_FUSECTRL|STATE_READ_SETUP]].&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_RD1_TSUR_FUSEOUT takes the time to spend on [[#FUSE_FUSECTRL|STATE_SAMPLE_FUSES]].&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_RD1_THR_MAX takes the maximum time for [[#FUSE_FUSECTRL|STATE_READ_HOLD]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSETIME_RD2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| FUSE_FUSETIME_RD2_TWIDTH_RD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Takes the read strobe pulse width used during [[#FUSE_FUSECTRL|STATE_READ_STROBE]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSETIME_PGM1 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| FUSE_FUSETIME_PGM1_TSUP_MAX&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FUSE_FUSETIME_PGM1_TSUP_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| FUSE_FUSETIME_PGM1_THP_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FUSE_FUSETIME_PGM1_THP_PS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_PGM1_TSUP_MAX takes the maximum time for [[#FUSE_FUSECTRL|STATE_WRITE_SETUP]].&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_PGM1_TSUP_ADDR takes the time to spend on [[#FUSE_FUSECTRL|STATE_WRITE_ADDR_SETUP]].&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_PGM1_THP_ADDR takes the time to spend on [[#FUSE_FUSECTRL|STATE_WRITE_ADDR_HOLD]].&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_PGM1_THP_PS takes the time to spend on [[#FUSE_FUSECTRL|STATE_FUSE_SRC_HOLD]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSETIME_PGM2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| FUSE_FUSETIME_PGM2_TWIDTH_PGM&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| FUSE_FUSETIME_PGM2_TSUP_PS&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FUSE_FUSETIME_PGM2_THP_CSPS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_PGM2_TWIDTH_PGM takes the program strobe pulse width used during [[#FUSE_FUSECTRL|STATE_WRITE_PROGRAM]].&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_PGM2_TSUP_PS takes the time to spend on [[#FUSE_FUSECTRL|STATE_FUSE_SRC_SETUP]].&lt;br /&gt;
&lt;br /&gt;
FUSE_FUSETIME_PGM2_THP_CSPS takes the time to spend on [[#FUSE_FUSECTRL|STATE_READ_BEFORE_WRITE_SETUP]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIV2INTFC_START ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PRIV2INTFC_START_DATA&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FUSE_PRIV2INTFC_SKIP_RECORDS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls the interface between the internal fuse chip (INTFC) and the fuse cache registers (PRIV).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSEBYPASS ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_FUSEBYPASS_VAL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If set, this register enables fuse bypass mode. This is only available in hardware where the [[#Bitmap|production_mode]] fuse remains unburnt.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATEKEYDISABLE ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PRIVATEKEYDISABLE_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FUSE_PRIVATEKEYDISABLE_TZ_STICKY_BIT_VAL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If set, this register hides the [[#Bitmap|private_key]] fuses until the next reset.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_DISABLEREGPROGRAM ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_DISABLEREGPROGRAM_VAL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If set, this register disables fuse programming until the next reset.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_WRITE_ACCESS_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_WRITE_ACCESS_SW_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FUSE_WRITE_ACCESS_SW_STATUS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls and returns the status of software writes to the fuse cache registers.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PWR_GOOD_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PWR_GOOD_SW_VAL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is deprecated and has no effect.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIV2RESHIFT ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIGENABLE_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_FCPU0_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_FCPU1_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_FCPU2_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_FCPU3_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_FL2_TBANK0_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_FL2_TBANK1_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_FL2_TBANK2_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_FL2_TBANK3_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_SCPU_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| FUSE_PRIV2RESHIFT_TRIG_1_SL2_TBANK_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_FCPU0_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_FCPU1_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_FCPU2_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_FCPU3_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_FL2_TBANK0_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_FL2_TBANK1_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_FL2_TBANK2_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_FL2_TBANK3_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_SCPU_VAL&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FUSE_PRIV2RESHIFT_STATUS_1_SL2_TBANK_VAL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls and returns the status of the record shift (RESHIFT) hardware block used for RAM re-repair.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FUSETIME_RD3 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| FUSE_FUSETIME_RD3_TSUR_PDCS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Takes the time to spend on [[#FUSE_FUSECTRL|STATE_READ_DEASSERT_PD]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY0_NONZERO ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PRIVATE_KEY0_NONZERO_DATA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Returns whether [[#Bitmap|private_key0]] is empty or not.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY1_NONZERO ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PRIVATE_KEY1_NONZERO_DATA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Returns whether [[#Bitmap|private_key1]] is empty or not.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY2_NONZERO ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PRIVATE_KEY2_NONZERO_DATA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Returns whether [[#Bitmap|private_key2]] is empty or not.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY3_NONZERO ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PRIVATE_KEY3_NONZERO_DATA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Returns whether [[#Bitmap|private_key3]] is empty or not.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY4_NONZERO ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PRIVATE_KEY4_NONZERO_DATA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Returns whether [[#Bitmap|private_key4]] is empty or not.&lt;br /&gt;
&lt;br /&gt;
=== Cache registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MODE&lt;br /&gt;
| 0x7000F900&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_JTAG_SECUREID_VALID&lt;br /&gt;
| 0x7000F904&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ODM_LOCK&lt;br /&gt;
| 0x7000F908&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_OPENGL_EN&lt;br /&gt;
| 0x7000F90C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SKU_INFO|FUSE_SKU_INFO]]&lt;br /&gt;
| 0x7000F910&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_0_CALIB&lt;br /&gt;
| 0x7000F914&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_IDDQ_CALIB&lt;br /&gt;
| 0x7000F918&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DAC_CRT_CALIB&lt;br /&gt;
| 0x7000F91C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DAC_HDTV_CALIB&lt;br /&gt;
| 0x7000F920&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DAC_SDTV_CALIB&lt;br /&gt;
| 0x7000F924&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_OPT_FT_REV|FUSE_OPT_FT_REV]]&lt;br /&gt;
| 0x7000F928&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_1_CALIB&lt;br /&gt;
| 0x7000F92C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_2_CALIB&lt;br /&gt;
| 0x7000F930&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_0_CALIB&lt;br /&gt;
| 0x7000F934&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SOC_SPEEDO_1_CALIB|FUSE_SOC_SPEEDO_1_CALIB]]&lt;br /&gt;
| 0x7000F938&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_2_CALIB&lt;br /&gt;
| 0x7000F93C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_IDDQ_CALIB&lt;br /&gt;
| 0x7000F940&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_PRODUCTION_WP&lt;br /&gt;
| 0x7000F944&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FA|FUSE_FA]]&lt;br /&gt;
| 0x7000F948&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_PRODUCTION&lt;br /&gt;
| 0x7000F94C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_HDMI_LANE0_CALIB&lt;br /&gt;
| 0x7000F950&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_HDMI_LANE1_CALIB&lt;br /&gt;
| 0x7000F954&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_HDMI_LANE2_CALIB&lt;br /&gt;
| 0x7000F958&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_HDMI_LANE3_CALIB&lt;br /&gt;
| 0x7000F95C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ENCRYPTION_RATE&lt;br /&gt;
| 0x7000F960&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY0]]&lt;br /&gt;
| 0x7000F964&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY1]]&lt;br /&gt;
| 0x7000F968&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY2]]&lt;br /&gt;
| 0x7000F96C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY3]]&lt;br /&gt;
| 0x7000F970&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY4]]&lt;br /&gt;
| 0x7000F974&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY5]]&lt;br /&gt;
| 0x7000F978&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY6]]&lt;br /&gt;
| 0x7000F97C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY7]]&lt;br /&gt;
| 0x7000F980&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR1_CALIB&lt;br /&gt;
| 0x7000F984&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR2_CALIB&lt;br /&gt;
| 0x7000F988&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VSENSOR_CALIB&lt;br /&gt;
| 0x7000F98C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_OPT_CP_REV|FUSE_OPT_CP_REV]]&lt;br /&gt;
| 0x7000F990&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_PFG&lt;br /&gt;
| 0x7000F994&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR0_CALIB&lt;br /&gt;
| 0x7000F998&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FIRST_BOOTROM_PATCH_SIZE&lt;br /&gt;
| 0x7000F99C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURITY_MODE&lt;br /&gt;
| 0x7000F9A0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY0]]&lt;br /&gt;
| 0x7000F9A4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY1]]&lt;br /&gt;
| 0x7000F9A8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY2]]&lt;br /&gt;
| 0x7000F9AC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY3]]&lt;br /&gt;
| 0x7000F9B0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY4]]&lt;br /&gt;
| 0x7000F9B4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ARM_JTAG_DIS&lt;br /&gt;
| 0x7000F9B8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_BOOT_DEVICE_INFO&lt;br /&gt;
| 0x7000F9BC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_SW|FUSE_RESERVED_SW]]&lt;br /&gt;
| 0x7000F9C0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_VP9_DISABLE&lt;br /&gt;
| 0x7000F9C4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]]&lt;br /&gt;
| 0x7000F9C8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]]&lt;br /&gt;
| 0x7000F9CC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]]&lt;br /&gt;
| 0x7000F9D0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM3|FUSE_RESERVED_ODM3]]&lt;br /&gt;
| 0x7000F9D4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]&lt;br /&gt;
| 0x7000F9D8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_ODM5&lt;br /&gt;
| 0x7000F9DC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]]&lt;br /&gt;
| 0x7000F9E0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]]&lt;br /&gt;
| 0x7000F9E4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OBS_DIS&lt;br /&gt;
| 0x7000F9E8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_NOR_INFO&lt;br /&gt;
| 0x7000F9EC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB&lt;br /&gt;
| 0x7000F9F0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_DIRECT_CONFIG&lt;br /&gt;
| 0x7000F9F4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_KFUSE_PRIVKEY_CTRL&lt;br /&gt;
| 0x7000F9F8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PACKAGE_INFO&lt;br /&gt;
| 0x7000F9FC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_VENDOR_CODE&lt;br /&gt;
| 0x7000FA00&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_FAB_CODE&lt;br /&gt;
| 0x7000FA04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_LOT_CODE_0&lt;br /&gt;
| 0x7000FA08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_LOT_CODE_1&lt;br /&gt;
| 0x7000FA0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_WAFER_ID&lt;br /&gt;
| 0x7000FA10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_X_COORDINATE&lt;br /&gt;
| 0x7000FA14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_Y_COORDINATE&lt;br /&gt;
| 0x7000FA18&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_OPT_SEC_DEBUG_EN|FUSE_OPT_SEC_DEBUG_EN]]&lt;br /&gt;
| 0x7000FA1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_OPS_RESERVED&lt;br /&gt;
| 0x7000FA20&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SATA_CALIB&lt;br /&gt;
| 0x7000FA24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GPU_IDDQ_CALIB&lt;br /&gt;
| 0x7000FA28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR3_CALIB&lt;br /&gt;
| 0x7000FA2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_L&lt;br /&gt;
| 0x7000FA30&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_H&lt;br /&gt;
| 0x7000FA34&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_U&lt;br /&gt;
| 0x7000FA38&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_V&lt;br /&gt;
| 0x7000FA3C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_W&lt;br /&gt;
| 0x7000FA40&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SAMPLE_TYPE&lt;br /&gt;
| 0x7000FA44&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SUBREVISION&lt;br /&gt;
| 0x7000FA48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SW_RESERVED_0&lt;br /&gt;
| 0x7000FA4C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SW_RESERVED_1&lt;br /&gt;
| 0x7000FA50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR4_CALIB&lt;br /&gt;
| 0x7000FA54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR5_CALIB&lt;br /&gt;
| 0x7000FA58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR6_CALIB&lt;br /&gt;
| 0x7000FA5C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR7_CALIB&lt;br /&gt;
| 0x7000FA60&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_OPT_PRIV_SEC_EN|FUSE_OPT_PRIV_SEC_EN]]&lt;br /&gt;
| 0x7000FA64&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PKC_DISABLE|FUSE_PKC_DISABLE]]&lt;br /&gt;
| 0x7000FA68&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FUSE2TSEC_DEBUG_DISABLE&lt;br /&gt;
| 0x7000FA7C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_COMMON&lt;br /&gt;
| 0x7000FA80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_CP_BIN&lt;br /&gt;
| 0x7000FA84&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_DISABLE&lt;br /&gt;
| 0x7000FA88&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_FT_BIN&lt;br /&gt;
| 0x7000FA8C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_DONE_MAP&lt;br /&gt;
| 0x7000FA90&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_APB2JTAG_DISABLE&lt;br /&gt;
| 0x7000FA98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ODM_INFO&lt;br /&gt;
| 0x7000FA9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ARM_CRYPT_DE_FEATURE&lt;br /&gt;
| 0x7000FAA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_WOA_SKU_FLAG&lt;br /&gt;
| 0x7000FAC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ECO_RESERVE_1&lt;br /&gt;
| 0x7000FAC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GCPLEX_CONFIG_FUSE&lt;br /&gt;
| 0x7000FAC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MONTH&lt;br /&gt;
| 0x7000FACC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RAM_REPAIR_INDICATOR&lt;br /&gt;
| 0x7000FAD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR9_CALIB&lt;br /&gt;
| 0x7000FAD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VMIN_CALIBRATION&lt;br /&gt;
| 0x7000FADC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_AGING_SENSOR_CALIBRATION&lt;br /&gt;
| 0x7000FAE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DEBUG_AUTHENTICATION&lt;br /&gt;
| 0x7000FAE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INDEX&lt;br /&gt;
| 0x7000FAE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INFO&lt;br /&gt;
| 0x7000FAEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_DISABLE_CP1&lt;br /&gt;
| 0x7000FAF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_ENDIS&lt;br /&gt;
| 0x7000FAF4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_ECO_RESERVE_0|FUSE_ECO_RESERVE_0]]&lt;br /&gt;
| 0x7000FAF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB0&lt;br /&gt;
| 0x7000FB04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB1&lt;br /&gt;
| 0x7000FB08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC0_DISABLE&lt;br /&gt;
| 0x7000FB0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC0_DISABLE_CP1&lt;br /&gt;
| 0x7000FB10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_CPU_DISABLE&lt;br /&gt;
| 0x7000FB14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_CPU_DISABLE_CP1&lt;br /&gt;
| 0x7000FB18&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR10_CALIB&lt;br /&gt;
| 0x7000FB1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR10_CALIB_AUX&lt;br /&gt;
| 0x7000FB20&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_DP&lt;br /&gt;
| 0x7000FB24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_PDP&lt;br /&gt;
| 0x7000FB28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_REG&lt;br /&gt;
| 0x7000FB2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_SP&lt;br /&gt;
| 0x7000FB30&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_SMPDP&lt;br /&gt;
| 0x7000FB34&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC0_DISABLE_CP2&lt;br /&gt;
| 0x7000FB38&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC1_DISABLE&lt;br /&gt;
| 0x7000FB3C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC1_DISABLE_CP1&lt;br /&gt;
| 0x7000FB40&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC1_DISABLE_CP2&lt;br /&gt;
| 0x7000FB44&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_CPU_DISABLE_CP2&lt;br /&gt;
| 0x7000FB48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_DISABLE_CP2&lt;br /&gt;
| 0x7000FB4C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB_EXT&lt;br /&gt;
| 0x7000FB50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_FIELD&lt;br /&gt;
| 0x7000FB54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_ECC_EN&lt;br /&gt;
| 0x7000FB58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_REALIGNMENT_REG&lt;br /&gt;
| 0x7000FB7C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_0&lt;br /&gt;
| 0x7000FB80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_1&lt;br /&gt;
| 0x7000FB84&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_2|FUSE_SPARE_BIT_2]]&lt;br /&gt;
| 0x7000FB88&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_3|FUSE_SPARE_BIT_3]]&lt;br /&gt;
| 0x7000FB8C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_4|FUSE_SPARE_BIT_4]]&lt;br /&gt;
| 0x7000FB90&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_5|FUSE_SPARE_BIT_5]]&lt;br /&gt;
| 0x7000FB94&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_6&lt;br /&gt;
| 0x7000FB98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_7&lt;br /&gt;
| 0x7000FB9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_8&lt;br /&gt;
| 0x7000FBA0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_9&lt;br /&gt;
| 0x7000FBA4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_10&lt;br /&gt;
| 0x7000FBA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_11&lt;br /&gt;
| 0x7000FBAC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_12&lt;br /&gt;
| 0x7000FBB0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_13&lt;br /&gt;
| 0x7000FBB4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_14&lt;br /&gt;
| 0x7000FBB8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_15&lt;br /&gt;
| 0x7000FBBC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_16&lt;br /&gt;
| 0x7000FBC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_17&lt;br /&gt;
| 0x7000FBC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_18&lt;br /&gt;
| 0x7000FBC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_19&lt;br /&gt;
| 0x7000FBCC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_20&lt;br /&gt;
| 0x7000FBD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_21&lt;br /&gt;
| 0x7000FBD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_22&lt;br /&gt;
| 0x7000FBD8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_23&lt;br /&gt;
| 0x7000FBDC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_24&lt;br /&gt;
| 0x7000FBE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_25&lt;br /&gt;
| 0x7000FBE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_26&lt;br /&gt;
| 0x7000FBE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_27&lt;br /&gt;
| 0x7000FBEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_28&lt;br /&gt;
| 0x7000FBF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_29&lt;br /&gt;
| 0x7000FBF4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_30&lt;br /&gt;
| 0x7000FBF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_31&lt;br /&gt;
| 0x7000FBFC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SKU_INFO ====&lt;br /&gt;
Stores the SKU ID (must be 0x83).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_OPT_FT_REV ====&lt;br /&gt;
Stores the FT (Final Test) revision.&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SOC_SPEEDO_1_CALIB ====&lt;br /&gt;
Stores the bootrom patch version.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FA ====&lt;br /&gt;
Stores failure analysis mode.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PUBLIC_KEY ====&lt;br /&gt;
Stores the SHA256 hash of the 2048-bit RSA key expected at BCT+0x210.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_OPT_CP_REV ====&lt;br /&gt;
Stores the CP (Chip Probing) revision.&lt;br /&gt;
&lt;br /&gt;
Original launch units have this value set to 0xA0 (revision 5.0). Patched units have this value set to 0x103 (revision 8.3).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY ====&lt;br /&gt;
Stores the 160-bit private key (128 bit SBK + 32-bit device key).&lt;br /&gt;
&lt;br /&gt;
Reads to these registers after the SBK is locked out produce all-FF output.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Boot device&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Skip device selection straps&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Enable charger detection&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Enable watchdog&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Forced RCM two button mode (0 = VOLUME_UP, 1 = VOLUME_UP + HOME)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| RCM USB controller mode (0 = USB 2.0, 1 = XUSB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Stores software reserved configuration values.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM0 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| OdmTestId0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM1 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| OdmTestId1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| OdmTestId2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] If [[#FUSE_RESERVED_ODM4|FormatVersion]] is 1, this becomes: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| DeviceUniqueKeyGeneration&lt;br /&gt;
|-&lt;br /&gt;
| 5-31&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM3 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| OdmTestId3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] If [[#FUSE_RESERVED_ODM4|FormatVersion]] is 1, this becomes: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| HardwareState1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| HardwareType1&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-3.0.2] 3-5&lt;br /&gt;
[4.0.0+] 3-7&lt;br /&gt;
| DramId&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| HardwareType2&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| HardwareState2&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [3.0.0+] QuestState&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [5.0.0+] FormatVersion&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| [4.0.0+] HardwareType3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Stores device configuration parameters.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM5 ====&lt;br /&gt;
Empty and unused.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM6 ====&lt;br /&gt;
Returns the value of the [[#reserved_odm6|reserved_odm6]] anti-downgrade fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM7 ====&lt;br /&gt;
Returns the value of the [[#reserved_odm7|reserved_odm7]] anti-downgrade fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_OPT_SEC_DEBUG_EN ====&lt;br /&gt;
Controls the [[TSEC#TSEC_SCP_CTL_STAT|Falcon SCP]] debug mode.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_OPT_PRIV_SEC_EN ====&lt;br /&gt;
Controls the [[TSEC#FALCON_SCTL|Falcon Light Secure]] feature.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PKC_DISABLE ====&lt;br /&gt;
Returns if public key crypto is used or not.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_ECO_RESERVE_0 ====&lt;br /&gt;
Returns the chip unique AID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Speedo fusing revision&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_3 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Speedo fusing revision&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Speedo fusing revision&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_5 ====&lt;br /&gt;
Must be non-zero on retail units, otherwise the first bootloader panics.&lt;br /&gt;
On prototype units it can be zero, which tells the bootloader to choose from two pre-production master key seeds. If set to non-zero on a prototype unit, it tells the bootloader to choose from two master key seeds (with the second one being the same as the retail master key seed).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This value is no longer used during boot.&lt;br /&gt;
&lt;br /&gt;
== Bitmap ==&lt;br /&gt;
The actual hardware fuses are stored in a bitmap and may be programmed through the fuse driver after enabling fuse programming.&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;&#039;fuse_bitmap + ((fuse_number + 0) &amp;lt;&amp;lt; 2)&#039;&#039;&#039; (PRIMARY_ALIAS) and &#039;&#039;&#039;fuse_bitmap + ((fuse_number + 1) &amp;lt;&amp;lt; 2)&#039;&#039;&#039; (REDUNDANT_ALIAS). However, spare bits and all fuses afterwards in the fuse bitmap, no longer have a redundant alias.&lt;br /&gt;
&lt;br /&gt;
Below is a list of common fuses used by Tegra devices (and applicable to the Switch).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Number&lt;br /&gt;
!  Redundant number&lt;br /&gt;
!  Bits&lt;br /&gt;
|-&lt;br /&gt;
| enable_fuse_program&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| disable_fuse_program&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| bypass_fuses&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| jtag_direct_access_disable&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| production_mode&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| jtag_secureid_valid&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| odm_lock&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 6-9&lt;br /&gt;
|-&lt;br /&gt;
| fa_mode&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| security_mode&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| arm_debug_dis&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| obs_dis&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| public_key0&lt;br /&gt;
| 10&lt;br /&gt;
| 11&lt;br /&gt;
| 30-31&lt;br /&gt;
|-&lt;br /&gt;
| public_key0&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
| 0-29&lt;br /&gt;
|-&lt;br /&gt;
| public_key1&lt;br /&gt;
| 12&lt;br /&gt;
| 13&lt;br /&gt;
| 30-31&lt;br /&gt;
|-&lt;br /&gt;
| public_key1&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
| 0-29&lt;br /&gt;
|-&lt;br /&gt;
| public_key2&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
| 30-31&lt;br /&gt;
|-&lt;br /&gt;
| public_key2&lt;br /&gt;
| 16&lt;br /&gt;
| 17&lt;br /&gt;
| 0-29&lt;br /&gt;
|-&lt;br /&gt;
| public_key3&lt;br /&gt;
| 16&lt;br /&gt;
| 17&lt;br /&gt;
| 30-31&lt;br /&gt;
|-&lt;br /&gt;
| public_key3&lt;br /&gt;
| 18&lt;br /&gt;
| 19&lt;br /&gt;
| 0-29&lt;br /&gt;
|-&lt;br /&gt;
| public_key4&lt;br /&gt;
| 18&lt;br /&gt;
| 19&lt;br /&gt;
| 30-31&lt;br /&gt;
|-&lt;br /&gt;
| public_key4&lt;br /&gt;
| 20&lt;br /&gt;
| 21&lt;br /&gt;
| 0-29&lt;br /&gt;
|-&lt;br /&gt;
| public_key5&lt;br /&gt;
| 20&lt;br /&gt;
| 21&lt;br /&gt;
| 30-31&lt;br /&gt;
|-&lt;br /&gt;
| public_key5&lt;br /&gt;
| 22&lt;br /&gt;
| 23&lt;br /&gt;
| 0-29&lt;br /&gt;
|-&lt;br /&gt;
| public_key6&lt;br /&gt;
| 22&lt;br /&gt;
| 23&lt;br /&gt;
| 30-31&lt;br /&gt;
|-&lt;br /&gt;
| public_key6&lt;br /&gt;
| 24&lt;br /&gt;
| 25&lt;br /&gt;
| 0-29&lt;br /&gt;
|-&lt;br /&gt;
| public_key7&lt;br /&gt;
| 24&lt;br /&gt;
| 25&lt;br /&gt;
| 30-31&lt;br /&gt;
|-&lt;br /&gt;
| public_key7&lt;br /&gt;
| 26&lt;br /&gt;
| 27&lt;br /&gt;
| 0-29&lt;br /&gt;
|-&lt;br /&gt;
| private_key0&lt;br /&gt;
| 34&lt;br /&gt;
| 35&lt;br /&gt;
| 12-31&lt;br /&gt;
|-&lt;br /&gt;
| private_key0&lt;br /&gt;
| 36&lt;br /&gt;
| 37&lt;br /&gt;
| 0-11&lt;br /&gt;
|-&lt;br /&gt;
| private_key1&lt;br /&gt;
| 36&lt;br /&gt;
| 37&lt;br /&gt;
| 12-31&lt;br /&gt;
|-&lt;br /&gt;
| private_key1&lt;br /&gt;
| 38&lt;br /&gt;
| 39&lt;br /&gt;
| 0-11&lt;br /&gt;
|-&lt;br /&gt;
| private_key2&lt;br /&gt;
| 38&lt;br /&gt;
| 39&lt;br /&gt;
| 12-31&lt;br /&gt;
|-&lt;br /&gt;
| private_key2&lt;br /&gt;
| 40&lt;br /&gt;
| 41&lt;br /&gt;
| 0-11&lt;br /&gt;
|-&lt;br /&gt;
| private_key3&lt;br /&gt;
| 40&lt;br /&gt;
| 41&lt;br /&gt;
| 12-31&lt;br /&gt;
|-&lt;br /&gt;
| private_key3&lt;br /&gt;
| 42&lt;br /&gt;
| 43&lt;br /&gt;
| 0-11&lt;br /&gt;
|-&lt;br /&gt;
| private_key4&lt;br /&gt;
| 42&lt;br /&gt;
| 43&lt;br /&gt;
| 12-31&lt;br /&gt;
|-&lt;br /&gt;
| private_key4&lt;br /&gt;
| 44&lt;br /&gt;
| 45&lt;br /&gt;
| 0-11&lt;br /&gt;
|-&lt;br /&gt;
| boot_device_info&lt;br /&gt;
| 44&lt;br /&gt;
| 45&lt;br /&gt;
| 12-27&lt;br /&gt;
|-&lt;br /&gt;
| reserved_sw&lt;br /&gt;
| 44&lt;br /&gt;
| 45&lt;br /&gt;
| 28-31&lt;br /&gt;
|-&lt;br /&gt;
| reserved_sw&lt;br /&gt;
| 46&lt;br /&gt;
| 47&lt;br /&gt;
| 0-3&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm0&lt;br /&gt;
| 46&lt;br /&gt;
| 47&lt;br /&gt;
| 5-31&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm0&lt;br /&gt;
| 48&lt;br /&gt;
| 49&lt;br /&gt;
| 0-4&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm1&lt;br /&gt;
| 48&lt;br /&gt;
| 49&lt;br /&gt;
| 5-31&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm1&lt;br /&gt;
| 50&lt;br /&gt;
| 51&lt;br /&gt;
| 0-4&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm2&lt;br /&gt;
| 50&lt;br /&gt;
| 51&lt;br /&gt;
| 5-31&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm2&lt;br /&gt;
| 52&lt;br /&gt;
| 53&lt;br /&gt;
| 0-4&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm3&lt;br /&gt;
| 52&lt;br /&gt;
| 53&lt;br /&gt;
| 5-31&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm3&lt;br /&gt;
| 54&lt;br /&gt;
| 55&lt;br /&gt;
| 0-4&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm4&lt;br /&gt;
| 54&lt;br /&gt;
| 55&lt;br /&gt;
| 5-31&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm4&lt;br /&gt;
| 56&lt;br /&gt;
| 57&lt;br /&gt;
| 0-4&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm5&lt;br /&gt;
| 56&lt;br /&gt;
| 57&lt;br /&gt;
| 5-31&lt;br /&gt;
|-&lt;br /&gt;
| reserved_odm5&lt;br /&gt;
| 58&lt;br /&gt;
| 59&lt;br /&gt;
| 0-4&lt;br /&gt;
|-&lt;br /&gt;
| [[#reserved_odm6|reserved_odm6]]&lt;br /&gt;
| 58&lt;br /&gt;
| 59&lt;br /&gt;
| 5-31&lt;br /&gt;
|-&lt;br /&gt;
| [[#reserved_odm6|reserved_odm6]]&lt;br /&gt;
| 60&lt;br /&gt;
| 61&lt;br /&gt;
| 0-4&lt;br /&gt;
|-&lt;br /&gt;
| [[#reserved_odm7|reserved_odm7]]&lt;br /&gt;
| 60&lt;br /&gt;
| 61&lt;br /&gt;
| 5-31&lt;br /&gt;
|-&lt;br /&gt;
| [[#reserved_odm7|reserved_odm7]]&lt;br /&gt;
| 62&lt;br /&gt;
| 63&lt;br /&gt;
| 0-4&lt;br /&gt;
|-&lt;br /&gt;
| kfuse_privkey_ctrl&lt;br /&gt;
| 64&lt;br /&gt;
| 65&lt;br /&gt;
| 13-14&lt;br /&gt;
|-&lt;br /&gt;
| package_info&lt;br /&gt;
| 64&lt;br /&gt;
| 65&lt;br /&gt;
| 15-18&lt;br /&gt;
|-&lt;br /&gt;
| opt_vendor_code&lt;br /&gt;
| 64&lt;br /&gt;
| 65&lt;br /&gt;
| 19-22&lt;br /&gt;
|-&lt;br /&gt;
| opt_fab_code&lt;br /&gt;
| 64&lt;br /&gt;
| 65&lt;br /&gt;
| 23-28&lt;br /&gt;
|-&lt;br /&gt;
| opt_lot_code_0&lt;br /&gt;
| 64&lt;br /&gt;
| 65&lt;br /&gt;
| 29-31&lt;br /&gt;
|-&lt;br /&gt;
| opt_lot_code_0&lt;br /&gt;
| 66&lt;br /&gt;
| 67&lt;br /&gt;
| 0-28&lt;br /&gt;
|-&lt;br /&gt;
| opt_lot_code_1&lt;br /&gt;
| 66&lt;br /&gt;
| 67&lt;br /&gt;
| 29-31&lt;br /&gt;
|-&lt;br /&gt;
| opt_lot_code_1&lt;br /&gt;
| 68&lt;br /&gt;
| 69&lt;br /&gt;
| 0-24&lt;br /&gt;
|-&lt;br /&gt;
| opt_wafer_id&lt;br /&gt;
| 68&lt;br /&gt;
| 69&lt;br /&gt;
| 25-30&lt;br /&gt;
|-&lt;br /&gt;
| opt_x_coordinate&lt;br /&gt;
| 68&lt;br /&gt;
| 69&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| opt_x_coordinate&lt;br /&gt;
| 70&lt;br /&gt;
| 71&lt;br /&gt;
| 0-7&lt;br /&gt;
|-&lt;br /&gt;
| opt_y_coordinate&lt;br /&gt;
| 70&lt;br /&gt;
| 71&lt;br /&gt;
| 8-16&lt;br /&gt;
|-&lt;br /&gt;
| opt_sec_debug_en&lt;br /&gt;
| 70&lt;br /&gt;
| 71&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| opt_ops_reserved&lt;br /&gt;
| 70&lt;br /&gt;
| 71&lt;br /&gt;
| 18-23&lt;br /&gt;
|-&lt;br /&gt;
| sata_calib&lt;br /&gt;
| 70&lt;br /&gt;
| 71&lt;br /&gt;
| 24-25&lt;br /&gt;
|-&lt;br /&gt;
| opt_priv_sec_en&lt;br /&gt;
| 90&lt;br /&gt;
| 91&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| pkc_disable&lt;br /&gt;
| 90&lt;br /&gt;
| 91&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| fuse2tsec_debug_disable&lt;br /&gt;
| 90&lt;br /&gt;
| 91&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| secure_provision_index&lt;br /&gt;
| 90&lt;br /&gt;
| 91&lt;br /&gt;
| 24-27&lt;br /&gt;
|-&lt;br /&gt;
| secure_provision_info&lt;br /&gt;
| 90&lt;br /&gt;
| 91&lt;br /&gt;
| 28-29&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_0&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_1&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_2&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_3&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 19&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_4&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_5&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 21&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_6&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_7&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_8&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_9&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_10&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_11&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 27&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_12&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 28&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_13&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 29&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_14&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_15&lt;br /&gt;
| 100&lt;br /&gt;
| None&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_16&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_17&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_18&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_19&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 19&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_20&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_21&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 21&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_22&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 22&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_23&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_24&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_25&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_26&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 26&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_27&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 27&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_28&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 28&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_29&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 29&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_30&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
| spare_bit_31&lt;br /&gt;
| 101&lt;br /&gt;
| None&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| aid&lt;br /&gt;
| 103&lt;br /&gt;
| None&lt;br /&gt;
| 2-31&lt;br /&gt;
|-&lt;br /&gt;
| aid&lt;br /&gt;
| 104&lt;br /&gt;
| None&lt;br /&gt;
| 0-1&lt;br /&gt;
|-&lt;br /&gt;
| reshift_fcpu0&lt;br /&gt;
| 106&lt;br /&gt;
| None&lt;br /&gt;
| 0-31&lt;br /&gt;
|-&lt;br /&gt;
| reshift_fcpu1&lt;br /&gt;
| 107&lt;br /&gt;
| None&lt;br /&gt;
| 0-31&lt;br /&gt;
|-&lt;br /&gt;
| reshift_fcpu2&lt;br /&gt;
| 108&lt;br /&gt;
| None&lt;br /&gt;
| 0-31&lt;br /&gt;
|-&lt;br /&gt;
| reshift_fcpu3&lt;br /&gt;
| 109&lt;br /&gt;
| None&lt;br /&gt;
| 0-31&lt;br /&gt;
|-&lt;br /&gt;
| reshift_fl2_tbank0&lt;br /&gt;
| 110&lt;br /&gt;
| None&lt;br /&gt;
| 0-31&lt;br /&gt;
|-&lt;br /&gt;
| reshift_fl2_tbank1&lt;br /&gt;
| 111&lt;br /&gt;
| None&lt;br /&gt;
| 0-31&lt;br /&gt;
|-&lt;br /&gt;
| reshift_fl2_tbank2&lt;br /&gt;
| 112&lt;br /&gt;
| None&lt;br /&gt;
| 0-31&lt;br /&gt;
|-&lt;br /&gt;
| reshift_fl2_tbank3&lt;br /&gt;
| 113&lt;br /&gt;
| None&lt;br /&gt;
| 0-31&lt;br /&gt;
|-&lt;br /&gt;
| [[#irom_patch|irom_patch]]&lt;br /&gt;
| 114&lt;br /&gt;
| None&lt;br /&gt;
| Variable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== reserved_odm6 ===&lt;br /&gt;
Used for [[#Anti-downgrade|anti-downgrade]] control.&lt;br /&gt;
&lt;br /&gt;
=== reserved_odm7 ===&lt;br /&gt;
Used for [[#Anti-downgrade|anti-downgrade]] control.&lt;br /&gt;
&lt;br /&gt;
=== irom_patch ===&lt;br /&gt;
Tegra210 based hardware such as the Switch provides support for bootrom patches. The patch data is burned to the hardware fuse bitmap using a specific format (see [https://gist.github.com/shuffle2/f8728159da100e9df2606d43925de0af shuffle2&#039;s ipatch decoder]). The bootrom reads these fuses in order to initialize the IPATCH hardware, which allows overriding data returned for code and data fetches done by BPMP.&lt;br /&gt;
&lt;br /&gt;
The following represents the patch data dumped from a Switch console:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
RAM:00000000 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000 irom_svc_dispatch&lt;br /&gt;
RAM:00000000   STMFD   SP!, {R0-R2}                  ; ipatches (new):&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 3b4d2100     769a     2100 : movs r1, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000000                                         ; &lt;br /&gt;
RAM:00000000                                         ; ipatches (old):&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 7d9e2000     fb3c     2000 : movs r0, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000004   MOV     R2, LR&lt;br /&gt;
RAM:00000008   SUB     R2, R2, #2&lt;br /&gt;
RAM:0000000C   LDR     R2, [R2]&lt;br /&gt;
RAM:00000010   AND     R2, R2, #0xFF&lt;br /&gt;
RAM:00000014   MOV     R2, R2,LSL#1&lt;br /&gt;
RAM:00000018   LDR     R0, =0x1007B0&lt;br /&gt;
RAM:0000001C   LDR     R1, =0x1007F8&lt;br /&gt;
RAM:00000020   SUB     R1, R1, R0&lt;br /&gt;
RAM:00000024   LDR     R0, =0x40004C30&lt;br /&gt;
RAM:00000028   ADD     R0, R0, R1&lt;br /&gt;
RAM:0000002C   ADD     R2, R2, R0&lt;br /&gt;
RAM:00000030   ORR     R2, R2, #1&lt;br /&gt;
RAM:00000034   LDMFD   SP!, {R0,R1}&lt;br /&gt;
RAM:00000038   BX      R2&lt;br /&gt;
RAM:00000038 ; End of function irom_svc_dispatch&lt;br /&gt;
RAM:00000038&lt;br /&gt;
RAM:00000038 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000003C dword_3C DCD 0x1007B0                   ; DATA XREF: irom_svc_dispatch+18↑r&lt;br /&gt;
RAM:00000040 dword_40 DCD 0x1007F8                   ; DATA XREF: irom_svc_dispatch+1C↑r&lt;br /&gt;
RAM:00000044 dword_44 DCD 0x40004C30                 ; DATA XREF: irom_svc_dispatch+24↑r&lt;br /&gt;
RAM:00000048   CODE16&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 sub_48&lt;br /&gt;
RAM:00000048   MOVS    R2, #0                        ; 0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:0000004A   MVNS    R2, R2&lt;br /&gt;
RAM:0000004C   LDR     R1, =0x60006410&lt;br /&gt;
RAM:0000004E   STR     R2, [R1,#0x30]&lt;br /&gt;
RAM:00000050   STR     R2, [R1,#0x38]&lt;br /&gt;
RAM:00000052   LDR     R1, =0x600060F8&lt;br /&gt;
RAM:00000054   STR     R2, [R1]&lt;br /&gt;
RAM:00000056   STR     R2, [R1,#4]&lt;br /&gt;
RAM:00000058   LDR     R1, =0x60006284&lt;br /&gt;
RAM:0000005A   STR     R2, [R1]&lt;br /&gt;
RAM:0000005C   STR     R2, [R1,#0x18]&lt;br /&gt;
RAM:0000005E   ADDS    R1, #0x80&lt;br /&gt;
RAM:00000060   ADDS    R1, #0x1C&lt;br /&gt;
RAM:00000062   STR     R2, [R1]&lt;br /&gt;
RAM:00000064   STR     R2, [R1,#8]&lt;br /&gt;
RAM:00000066   STR     R2, [R1,#0x10]&lt;br /&gt;
RAM:00000068   ADDS    R1, #0x80&lt;br /&gt;
RAM:0000006A   STR     R2, [R1]&lt;br /&gt;
RAM:0000006C   STR     R2, [R1,#4]&lt;br /&gt;
RAM:0000006E   LDR     R1, =0x60006554&lt;br /&gt;
RAM:00000070   STR     R2, [R1]&lt;br /&gt;
RAM:00000072   MOVS    R2, #0xA0000000&lt;br /&gt;
RAM:00000076   LDR     R1, =0x60006148&lt;br /&gt;
RAM:00000078   STR     R2, [R1]&lt;br /&gt;
RAM:0000007A   ADDS    R1, #0x38 ; &#039;8&#039;&lt;br /&gt;
RAM:0000007C   STR     R2, [R1]&lt;br /&gt;
RAM:0000007E   MOVS    R2, #0xE0000000&lt;br /&gt;
RAM:00000082   LDR     R1, =0x600066A0&lt;br /&gt;
RAM:00000084   STR     R2, [R1]&lt;br /&gt;
RAM:00000086   MOVS    R1, #0&lt;br /&gt;
RAM:00000088   MOVS    R0, #0xE&lt;br /&gt;
RAM:0000008A   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000008A ; End of function sub_48&lt;br /&gt;
RAM:0000008A&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C sub_8C&lt;br /&gt;
RAM:0000008C   LDR     R0, [R1,#0x18]                ; 1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:0000008E   MOVS    R2, #1&lt;br /&gt;
RAM:00000090   ORRS    R0, R2&lt;br /&gt;
RAM:00000092   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:00000092 ; End of function sub_8C&lt;br /&gt;
RAM:00000092&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 sub_94&lt;br /&gt;
RAM:00000094   LDR     R2, [R4,#0x50]                ; 2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000096   ADDS    R2, R2, #2&lt;br /&gt;
RAM:00000098   STR     R2, [R4,#0x50]&lt;br /&gt;
RAM:0000009A   SUBS    R1, #0x80&lt;br /&gt;
RAM:0000009C   STR     R1, [R4,#0x34]&lt;br /&gt;
RAM:0000009E   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000009E ; End of function sub_94&lt;br /&gt;
RAM:0000009E&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 sub_A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; FUNCTION CHUNK AT RAM:00000148 SIZE 00000004 BYTES&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0   MOVS    R0, #0x70000000               ; 4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:000000A4   LDR     R6, =dword_7000EF14&lt;br /&gt;
RAM:000000A6   LDR     R2, =dword_7000E5B4&lt;br /&gt;
RAM:000000A8   LDR     R2, [R2]&lt;br /&gt;
RAM:000000AA   CMP     R2, #0&lt;br /&gt;
RAM:000000AC   BEQ     loc_B4&lt;br /&gt;
RAM:000000AE   LDR     R2, [R6]&lt;br /&gt;
RAM:000000B0   STR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B2   B       loc_BC&lt;br /&gt;
RAM:000000B4 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:000000B4&lt;br /&gt;
RAM:000000B4 loc_B4                                  ; CODE XREF: sub_A0+C↑j&lt;br /&gt;
RAM:000000B4   LDR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B6   LSRS    R0, R0, #0x12&lt;br /&gt;
RAM:000000B8   ORRS    R2, R0&lt;br /&gt;
RAM:000000BA   STR     R2, [R6]&lt;br /&gt;
RAM:000000BC&lt;br /&gt;
RAM:000000BC loc_BC                                  ; CODE XREF: sub_A0+12↑j&lt;br /&gt;
RAM:000000BC   LDR     R6, =dword_7000E9C0&lt;br /&gt;
RAM:000000BE   LDR     R0, [R6]&lt;br /&gt;
RAM:000000C0   MOVS    R2, #0x4000&lt;br /&gt;
RAM:000000C4   ORRS    R2, R0&lt;br /&gt;
RAM:000000C6   STR     R2, [R6]&lt;br /&gt;
RAM:000000C8   LDR     R0, [R5,#0x10]&lt;br /&gt;
RAM:000000CA   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000CA ; End of function sub_A0&lt;br /&gt;
RAM:000000CA&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC sub_CC&lt;br /&gt;
RAM:000000CC   MOVS    R2, #0xF000000                ; 5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:000000D0   BICS    R1, R2&lt;br /&gt;
RAM:000000D2   STR     R1, [R4,#0x10]&lt;br /&gt;
RAM:000000D4   LDR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000D6   MOVS    R2, #7&lt;br /&gt;
RAM:000000D8   BICS    R1, R2&lt;br /&gt;
RAM:000000DA   STR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000DC   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000DC ; End of function sub_CC&lt;br /&gt;
RAM:000000DC&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE sub_DE&lt;br /&gt;
RAM:000000DE   LDR     R2, =dword_7000FA9C           ; 6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:000000E0   LDR     R2, [R2]&lt;br /&gt;
RAM:000000E2   LSRS    R2, R2, #8&lt;br /&gt;
RAM:000000E4   LSLS    R2, R2, #1&lt;br /&gt;
RAM:000000E6   LDR     R1, [R4]&lt;br /&gt;
RAM:000000E8   BICS    R1, R2&lt;br /&gt;
RAM:000000EA   STR     R1, [R4]&lt;br /&gt;
RAM:000000EC   CMP     R0, #0&lt;br /&gt;
RAM:000000EE   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000EE ; End of function sub_DE&lt;br /&gt;
RAM:000000EE&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 sub_F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 arg_0=  0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0   LDR     R0, =0x400049F0               ; 7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:000000F2   LDR     R2, [R0]&lt;br /&gt;
RAM:000000F4   STR     R2, [SP,#arg_0]&lt;br /&gt;
RAM:000000F6   LDR     R0, =0x40010000&lt;br /&gt;
RAM:000000F8   LSRS    R2, R2, #17&lt;br /&gt;
RAM:000000FA   BEQ     pop_r2_mov_pc_lr              ; if ([0x400049F0] &amp;gt;&amp;gt; 17) == 0) {&lt;br /&gt;
RAM:000000FA                                         ;   r2 = [0x400049F0];&lt;br /&gt;
RAM:000000FA                                         ; } else {&lt;br /&gt;
RAM:000000FC   LDR     R0, =APBDEV_PMC_CNTRL_0&lt;br /&gt;
RAM:000000FE   STR     R4, [R0]                      ;  write APBDEV_PMC_CNTRL&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000100 loc_100                                 ; CODE XREF: sub_F0:loc_100↓j&lt;br /&gt;
RAM:00000100   B       loc_100                       ;  hang&lt;br /&gt;
RAM:00000100 ; End of function sub_F0                ; }&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 sub_102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 arg_0=  0&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102   LDR     R2, =0x40010220               ; 8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000104   STR     R2, [SP,#arg_0]               ; set r2 retval = [0x40010220]&lt;br /&gt;
RAM:00000106   LDR     R2, [R2,#0x18]&lt;br /&gt;
RAM:00000108   ADDS    R0, #0xFC&lt;br /&gt;
RAM:0000010A   STR     R2, [R0,#0x1C]                ; [r0+0x118] = [0x40010220 + 0x18]&lt;br /&gt;
RAM:0000010C   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000010C ; End of function sub_102&lt;br /&gt;
RAM:0000010C&lt;br /&gt;
RAM:0000010C ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000010E   DCB    0&lt;br /&gt;
RAM:0000010F   DCB    0&lt;br /&gt;
RAM:00000110 off_110 DCD 0x60006410                  ; DATA XREF: sub_48+4↑r&lt;br /&gt;
RAM:00000114 off_114 DCD 0x600060F8                  ; DATA XREF: sub_48+A↑r&lt;br /&gt;
RAM:00000118 off_118 DCD 0x60006284                  ; DATA XREF: sub_48+10↑r&lt;br /&gt;
RAM:0000011C off_11C DCD 0x60006554                  ; DATA XREF: sub_48+26↑r&lt;br /&gt;
RAM:00000120 off_120 DCD 0x60006148                  ; DATA XREF: sub_48+2E↑r&lt;br /&gt;
RAM:00000124 off_124 DCD 0x600066A0                  ; DATA XREF: sub_48+3A↑r&lt;br /&gt;
RAM:00000128 off_128 DCD dword_7000EF14              ; DATA XREF: sub_A0+4↑r&lt;br /&gt;
RAM:0000012C off_12C DCD dword_7000E5B4              ; DATA XREF: sub_A0+6↑r&lt;br /&gt;
RAM:00000130 off_130 DCD dword_7000E9C0              ; DATA XREF: sub_A0:loc_BC↑r&lt;br /&gt;
RAM:00000134 off_134 DCD dword_7000FA9C              ; DATA XREF: sub_DE↑r&lt;br /&gt;
RAM:00000138 off_138 DCD 0x400049F0                  ; DATA XREF: sub_F0↑r&lt;br /&gt;
RAM:0000013C dword_13C DCD 0x40010000                ; DATA XREF: sub_F0+6↑r&lt;br /&gt;
RAM:00000140 off_140 DCD APBDEV_PMC_CNTRL_0          ; DATA XREF: sub_F0+C↑r&lt;br /&gt;
RAM:00000144 off_144 DCD 0x40010220                  ; DATA XREF: sub_102↑r&lt;br /&gt;
RAM:00000148 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:00000148 ; START OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
RAM:00000148&lt;br /&gt;
RAM:00000148 pop_r2_mov_pc_lr                        ; CODE XREF: sub_48+42↑j&lt;br /&gt;
RAM:00000148                                         ; sub_8C+6↑j ...&lt;br /&gt;
RAM:00000148   POP     {R2}&lt;br /&gt;
RAM:0000014A   MOV     PC, LR&lt;br /&gt;
RAM:0000014A ; END OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last 4 patches are exclusive to the Switch, while the remaining ones are often included in most Tegra210 based devices.&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 0 ====&lt;br /&gt;
This patch configures clock enables and clock gate overrides for new hardware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 CLK_ENB_H_SET = 0x60006328;&lt;br /&gt;
 u32 CLK_ENB_L_SET = 0x60006320;&lt;br /&gt;
 u32 CLK_ENB_U_SET = 0x60006330; &lt;br /&gt;
 u32 CLK_ENB_V_SET = 0x60006440;&lt;br /&gt;
 u32 CLK_ENB_W_SET = 0x60006448;&lt;br /&gt;
 u32 CLK_ENB_X_SET = 0x60006284;&lt;br /&gt;
 u32 CLK_ENB_Y_SET = 0x6000629C;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRA = 0x600060F8;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRB = 0x600060FC;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRC = 0x600063A0;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRD = 0x600063A4;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRE = 0x60006554;&lt;br /&gt;
 u32 CLK_SOURCE_VI = 0x60006148;&lt;br /&gt;
 u32 CLK_SOURCE_HOST1X = 0x60006180;&lt;br /&gt;
 u32 CLK_SOURCE_NVENC = 0x600066A0; &lt;br /&gt;
&lt;br /&gt;
 // Set all clock enables and overrides&lt;br /&gt;
 *(u32 *)CLK_ENB_V_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_W_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRA = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRB = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_X_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_Y_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_L_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_H_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_U_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRC = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRD = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRE = 0xFFFFFFFF;&lt;br /&gt;
&lt;br /&gt;
 // Set VI, HOST1X and NVENC clock sources to CLK_M&lt;br /&gt;
 *(u32 *)CLK_SOURCE_VI = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_HOST1X = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_NVENC = 0xE0000000;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
&lt;br /&gt;
     MOVS    R1, #0&lt;br /&gt;
     MOVS    R0, #0xE&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 1 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
LP0 resume code expects APBDEV_PMC_SCRATCH190_0 to be set to 0x01, but the bootrom didn&#039;t set it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH190_0 = 0x7000EC18;&lt;br /&gt;
 u32 pmc_scratch190_val = *(u32 *)APBDEV_PMC_SCRATCH190_0;&lt;br /&gt;
 &lt;br /&gt;
 return (pmc_scratch190_val | 0x01);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 2 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_SPARE_CFG0_0 = 0x7D000834;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
 &lt;br /&gt;
 // Increase UTMIP_HSSQUELCH_LEVEL_NEW by 0x02&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 += 0x02;&lt;br /&gt;
&lt;br /&gt;
 // Clear FUSE_HS_IREF_CAP_CFG&lt;br /&gt;
 *(u32 *)USB1_UTMIP_SPARE_CFG0_0 = ((*(u32 *)USB1_UTMIP_SPARE_CFG0_0 &amp;amp; ~(0x118)) - 0x80);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 3 ====&lt;br /&gt;
This patch ensures that waiting on PRC_PENDING from the XUSB_DEV register T_XUSB_DEV_XHCI_PORTSC never fails.&lt;br /&gt;
&lt;br /&gt;
In the second batch of patched units ([[#FUSE_OPT_FT_REV|FUSE_OPT_FT_REV]] set to revision 7.0) this patch has been replaced with a fix for [[Switch_System_Flaws#Hardware|CVE-2018-6242]] (arbitrary copy when handling USB control requests in RCM). By setting R1 to 0 at address 0x0010769A in the bootrom, the upper 16 bits of the USB control request&#039;s wLength field are cleared out, effectively limiting the request&#039;s size to a maximum of 255 bytes.&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 4 ====&lt;br /&gt;
This patch allows backing up and restoring strapping options for warmboot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH0_0 = 0x7000E450;&lt;br /&gt;
 u32 APBDEV_PMC_RST_STATUS_0 = 0x7000E5B4;&lt;br /&gt;
 u32 APBDEV_PMC_SEC_DISABLE8_0 = 0x7000E9C0;&lt;br /&gt;
 u32 APBDEV_PMC_SECURE_SCRATCH111_0 = 0x7000EF14;&lt;br /&gt;
 u32 APB_MISC_PP_STRAPPING_OPT_A_0 = 0x70000008; &lt;br /&gt;
&lt;br /&gt;
 u32 reset_status = *(u32 *)APBDEV_PMC_RST_STATUS_0;&lt;br /&gt;
&lt;br /&gt;
 // Check for regular power on&lt;br /&gt;
 if (reset_status == 0)&lt;br /&gt;
 {    &lt;br /&gt;
     // Set all buttons in RCM_STRAPS and backup to PMC scratch&lt;br /&gt;
     *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0 = (*(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 | 0x1C00);&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
     // Restore strapping options from PMC scratch&lt;br /&gt;
     *(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 = *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // Disable write access to APBDEV_PMC_SECURE_SCRATCH111_0&lt;br /&gt;
 *(u32 *)APBDEV_PMC_SEC_DISABLE8_0 |= 0x4000;&lt;br /&gt;
 &lt;br /&gt;
 return *(u32 *)APBDEV_PMC_SCRATCH0_0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 5 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_HSRX_CFG0_0 = 0x7D000810;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
&lt;br /&gt;
 // Clear UTMIP_IDLE_WAIT, UTMIP_ELASTIC_LIMIT and UTMIP_PCOUNT_UPDN_DIV,&lt;br /&gt;
 // and set UTMIP_IDLE_WAIT to 0x11 and UTMIP_ELASTIC_LIMIT to 0x10 &lt;br /&gt;
 *(u32 *)USB1_UTMIP_HSRX_CFG0_0 = ((*(u32 *)USB1_UTMIP_HSRX_CFG0_0 &amp;amp; ~(0xF8000) + 0x88000 &amp;amp; ~(0x7C00) + 0x4000) &amp;amp; ~(0xF000000));&lt;br /&gt;
 &lt;br /&gt;
 // Clear UTMIP_HSSQUELCH_LEVEL_NEW&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 &amp;amp;= ~(0x07);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 6 ====&lt;br /&gt;
This patch is a factory backdoor.&lt;br /&gt;
&lt;br /&gt;
It allows controlling the debug authentication configuration using a fuse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 FUSE_ODM_INFO = 0x7000FA9C;&lt;br /&gt;
&lt;br /&gt;
 u32 odm_info = *(u32 *)FUSE_ODM_INFO;&lt;br /&gt;
 debug_auth_override_val = ((odm_info &amp;gt;&amp;gt; 0x08) &amp;lt;&amp;lt; 0x01);&lt;br /&gt;
&lt;br /&gt;
 // Override debug authentication value stored in IRAM&lt;br /&gt;
 *(u32 *)0x400028E4 &amp;amp;= ~(debug_auth_override_val);&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     CMP     R0, #0&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 7 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It prevents overflowing IRAM (0x40010000) when copying the warmboot binary from DRAM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_CNTRL_0 = 0x7000E400;&lt;br /&gt;
 &lt;br /&gt;
 u32 warmboot_header_addr = 0x400049F0;&lt;br /&gt;
 u32 warmboot_bin_size = *(u32 *)warmboot_bin_header_addr;&lt;br /&gt;
 &lt;br /&gt;
 // Invalid warmboot binary size&lt;br /&gt;
 if (warmboot_size &amp;gt;&amp;gt; 0x11)&lt;br /&gt;
 {&lt;br /&gt;
     // Assert MAIN_RST&lt;br /&gt;
     // 0x40004BF0 comes from R4 and the bootrom doesn&#039;t bother to change it&lt;br /&gt;
     *(u32 *)APBDEV_PMC_CNTRL_0 = 0x40004BF0;&lt;br /&gt;
&lt;br /&gt;
     // Deadlock&lt;br /&gt;
     while(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R0, =0x40010000&lt;br /&gt;
     LDR     R2, [warmboot_bin_header_addr]&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 8 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It sets the correct warmboot binary entrypoint address for RSA signature verification, which would be done in DRAM instead of IRAM without this patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 warmboot_addr_ptr = 0x40010238;&lt;br /&gt;
 u32 warmboot_entry_addr_ptr = 0x40004C28;&lt;br /&gt;
&lt;br /&gt;
 *(u32 *)warmboot_entry_addr_ptr = *(u32 *)warmboot_addr_ptr;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R2, [warmboot_addr_ptr]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IROM patches 9 and 10 ====&lt;br /&gt;
These patches modify the 256-bit Secure Provisioning AES key with index 0x3A.&lt;br /&gt;
&lt;br /&gt;
==== IROM patch 11 ====&lt;br /&gt;
This patch forces the value of [[Security_Engine|SE_TZRAM_SECURITY]] to be 0x01 instead of restoring it from the saved SE context.&lt;br /&gt;
&lt;br /&gt;
== Anti-downgrade ==&lt;br /&gt;
The first bootloader verifies [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]] to prevent downgrading.&lt;br /&gt;
How many fuses are expected to be burnt depends the device&#039;s unit type as below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1-3.0.2&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0-4.1.0&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0-5.1.0&lt;br /&gt;
| 6&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0-6.1.0&lt;br /&gt;
| 7&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 6.2.0&lt;br /&gt;
| 8&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0-8.0.1&lt;br /&gt;
| 9&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.0&lt;br /&gt;
| 10&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.0-9.0.1&lt;br /&gt;
| 11&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 9.1.0-9.2.0&lt;br /&gt;
| 12&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0-10.0.4&lt;br /&gt;
| 13&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If too many fuses are burnt the bootloader will panic immediately.&lt;br /&gt;
&lt;br /&gt;
If too few are burnt, the bootloader will enable fuse programming and write the expected value to fuses [[#reserved_odm6|reserved_odm6]] and [[#reserved_odm7|reserved_odm7]]. Afterwards, fuse programming is disabled and the panic value 0x21 is written to PMC_SCRATCH200 register (0x7000EC40). Finally, the watchdog timer is initialized and programmed to force a reset.&lt;br /&gt;
&lt;br /&gt;
On a subsequent boot, after the anti-downgrade fuses are checked again, the PMC_RST_STATUS register (0x7000E5B4) is checked and if set to 0x01 (watchdog reset) the PMC_SCRATCH200 register (0x7000EC40) will be checked for the panic value 0x21.&lt;br /&gt;
PMC_RST_STATUS will only be set back to 0 (power on reset) if the fuse count matches the new expected value, otherwise the system will panic.&lt;/div&gt;</summary>
		<author><name>Lacius</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Fuses&amp;diff=6903</id>
		<title>Fuses</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Fuses&amp;diff=6903"/>
		<updated>2019-05-15T21:55:12Z</updated>

		<summary type="html">&lt;p&gt;Lacius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch makes use of Tegra&#039;s fuse driver for a number of operations. This driver is mapped to physical address 0x7000F800 with a total size of 0x400 bytes and exposes several registers for fuse programming.&lt;br /&gt;
&lt;br /&gt;
Registers from 0x7000F800 to 0x7000F800 + 0xFF can be used to directly program the hardware fuse array, while registers from 0x7000F800 + 0x100 (FUSE_CHIP_REG_START_OFFSET) to 0x7000F800 + 0x3FC (FUSE_CHIP_REG_END_OFFSET) represent cached values read from certain fuses.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Below is a list of fuse driver registers used by the Switch&#039;s bootloaders.&lt;br /&gt;
&lt;br /&gt;
=== Driver registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_CTRL|FUSE_CTRL]]&lt;br /&gt;
| 0x7000F800&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_ADDR|FUSE_REG_ADDR]]&lt;br /&gt;
| 0x7000F804&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_READ|FUSE_REG_READ]]&lt;br /&gt;
| 0x7000F808&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_WRITE|FUSE_REG_WRITE]]&lt;br /&gt;
| 0x7000F80C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD1&lt;br /&gt;
| 0x7000F810&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD2&lt;br /&gt;
| 0x7000F814&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_PGM1&lt;br /&gt;
| 0x7000F818&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_TIME_PGM2|FUSE_TIME_PGM2]]&lt;br /&gt;
| 0x7000F81C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIV2INTFC|FUSE_PRIV2INTFC]]&lt;br /&gt;
| 0x7000F820&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FUSEBYPASS&lt;br /&gt;
| 0x7000F824&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATEKEYDISABLE&lt;br /&gt;
| 0x7000F828&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_DIS_PGM|FUSE_DIS_PGM]]&lt;br /&gt;
| 0x7000F82C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_WRITE_ACCESS|FUSE_WRITE_ACCESS]]&lt;br /&gt;
| 0x7000F830&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PWR_GOOD_SW&lt;br /&gt;
| 0x7000F834&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIV2RESHIFT&lt;br /&gt;
| 0x7000F83C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD3&lt;br /&gt;
| 0x7000F84C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATE_KEY0_NONZERO&lt;br /&gt;
| 0x7000F880&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATE_KEY1_NONZERO&lt;br /&gt;
| 0x7000F884&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATE_KEY2_NONZERO&lt;br /&gt;
| 0x7000F888&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATE_KEY3_NONZERO&lt;br /&gt;
| 0x7000F88C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATE_KEY4_NONZERO&lt;br /&gt;
| 0x7000F890&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_CTRL ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Fuse command (1 = FUSE_READ; 2 = FUSE_WRITE; 3 = FUSE_SENSE)&lt;br /&gt;
|-&lt;br /&gt;
| 16-20&lt;br /&gt;
| Fuse state (4 = STATE_IDLE)&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| Fuse power down mode flag (FUSE_CTRL_PD)&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| Fuse sense status (FUSE_CTRL_SENSE_DONE)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before fuse reading/writing the power down mode must be disabled.&lt;br /&gt;
FUSE_SENSE mode flushes programmed values into the [[Fuses#Cache_registers|cache registers]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_ADDR ====&lt;br /&gt;
This register takes the address of the fuse to be read/written/sensed.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_READ ====&lt;br /&gt;
This register receives the value read from the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_WRITE ====&lt;br /&gt;
This register takes the value to be written to the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_TIME_PGM2 ====&lt;br /&gt;
This register takes the fuse programming pulse (0xC0 == 19200 kHz).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIV2INTFC ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FUSE_PRIV2INTFC_SDATA&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FUSE_PRIV2INTFC_SKIP_RECORDS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_DIS_PGM ====&lt;br /&gt;
If set to 0x01, this register disables fuse programming.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_WRITE_ACCESS ====&lt;br /&gt;
If set to 0x01, this register disables software writes to the fuse driver registers.&lt;br /&gt;
&lt;br /&gt;
=== Cache registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MODE&lt;br /&gt;
| 0x7000F900&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_JTAG_SECUREID_VALID&lt;br /&gt;
| 0x7000F904&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ODM_LOCK&lt;br /&gt;
| 0x7000F908&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_OPENGL_EN&lt;br /&gt;
| 0x7000F90C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SKU_INFO|FUSE_SKU_INFO]]&lt;br /&gt;
| 0x7000F910&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_0_CALIB&lt;br /&gt;
| 0x7000F914&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_IDDQ_CALIB&lt;br /&gt;
| 0x7000F918&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DAC_CRT_CALIB&lt;br /&gt;
| 0x7000F91C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DAC_HDTV_CALIB&lt;br /&gt;
| 0x7000F920&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DAC_SDTV_CALIB&lt;br /&gt;
| 0x7000F924&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_OPT_FT_REV|FUSE_OPT_FT_REV]]&lt;br /&gt;
| 0x7000F928&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_1_CALIB&lt;br /&gt;
| 0x7000F92C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_2_CALIB&lt;br /&gt;
| 0x7000F930&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_0_CALIB&lt;br /&gt;
| 0x7000F934&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SOC_SPEEDO_1_CALIB|FUSE_SOC_SPEEDO_1_CALIB]]&lt;br /&gt;
| 0x7000F938&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_2_CALIB&lt;br /&gt;
| 0x7000F93C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_IDDQ_CALIB&lt;br /&gt;
| 0x7000F940&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_PRODUCTION_WP&lt;br /&gt;
| 0x7000F944&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FA|FUSE_FA]]&lt;br /&gt;
| 0x7000F948&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_PRODUCTION&lt;br /&gt;
| 0x7000F94C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_HDMI_LANE0_CALIB&lt;br /&gt;
| 0x7000F950&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_HDMI_LANE1_CALIB&lt;br /&gt;
| 0x7000F954&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_HDMI_LANE2_CALIB&lt;br /&gt;
| 0x7000F958&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_HDMI_LANE3_CALIB&lt;br /&gt;
| 0x7000F95C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ENCRYPTION_RATE&lt;br /&gt;
| 0x7000F960&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY0]]&lt;br /&gt;
| 0x7000F964&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY1]]&lt;br /&gt;
| 0x7000F968&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY2]]&lt;br /&gt;
| 0x7000F96C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY3]]&lt;br /&gt;
| 0x7000F970&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY4]]&lt;br /&gt;
| 0x7000F974&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY5]]&lt;br /&gt;
| 0x7000F978&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY6]]&lt;br /&gt;
| 0x7000F97C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY7]]&lt;br /&gt;
| 0x7000F980&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR1_CALIB&lt;br /&gt;
| 0x7000F984&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR2_CALIB&lt;br /&gt;
| 0x7000F988&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VSENSOR_CALIB&lt;br /&gt;
| 0x7000F98C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_OPT_CP_REV|FUSE_OPT_CP_REV]]&lt;br /&gt;
| 0x7000F990&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_PFG&lt;br /&gt;
| 0x7000F994&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR0_CALIB&lt;br /&gt;
| 0x7000F998&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FIRST_BOOTROM_PATCH_SIZE&lt;br /&gt;
| 0x7000F99C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURITY_MODE&lt;br /&gt;
| 0x7000F9A0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY0]]&lt;br /&gt;
| 0x7000F9A4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY1]]&lt;br /&gt;
| 0x7000F9A8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY2]]&lt;br /&gt;
| 0x7000F9AC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY3]]&lt;br /&gt;
| 0x7000F9B0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY4]]&lt;br /&gt;
| 0x7000F9B4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ARM_JTAG_DIS&lt;br /&gt;
| 0x7000F9B8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_BOOT_DEVICE_INFO&lt;br /&gt;
| 0x7000F9BC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_SW|FUSE_RESERVED_SW]]&lt;br /&gt;
| 0x7000F9C0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_VP9_DISABLE&lt;br /&gt;
| 0x7000F9C4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]]&lt;br /&gt;
| 0x7000F9C8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]]&lt;br /&gt;
| 0x7000F9CC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]]&lt;br /&gt;
| 0x7000F9D0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM3|FUSE_RESERVED_ODM3]]&lt;br /&gt;
| 0x7000F9D4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]&lt;br /&gt;
| 0x7000F9D8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_ODM5&lt;br /&gt;
| 0x7000F9DC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]]&lt;br /&gt;
| 0x7000F9E0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]]&lt;br /&gt;
| 0x7000F9E4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OBS_DIS&lt;br /&gt;
| 0x7000F9E8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_NOR_INFO&lt;br /&gt;
| 0x7000F9EC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB&lt;br /&gt;
| 0x7000F9F0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_DIRECT_CONFIG&lt;br /&gt;
| 0x7000F9F4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_KFUSE_PRIVKEY_CTRL&lt;br /&gt;
| 0x7000F9F8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PACKAGE_INFO&lt;br /&gt;
| 0x7000F9FC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_VENDOR_CODE&lt;br /&gt;
| 0x7000FA00&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_FAB_CODE&lt;br /&gt;
| 0x7000FA04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_LOT_CODE_0&lt;br /&gt;
| 0x7000FA08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_LOT_CODE_1&lt;br /&gt;
| 0x7000FA0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_WAFER_ID&lt;br /&gt;
| 0x7000FA10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_X_COORDINATE&lt;br /&gt;
| 0x7000FA14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_Y_COORDINATE&lt;br /&gt;
| 0x7000FA18&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SEC_DEBUG_EN&lt;br /&gt;
| 0x7000FA1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_OPS_RESERVED&lt;br /&gt;
| 0x7000FA20&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SATA_CALIB&lt;br /&gt;
| 0x7000FA24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GPU_IDDQ_CALIB&lt;br /&gt;
| 0x7000FA28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR3_CALIB&lt;br /&gt;
| 0x7000FA2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_L&lt;br /&gt;
| 0x7000FA30&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_H&lt;br /&gt;
| 0x7000FA34&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_U&lt;br /&gt;
| 0x7000FA38&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_V&lt;br /&gt;
| 0x7000FA3C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_BOND_OUT_W&lt;br /&gt;
| 0x7000FA40&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SAMPLE_TYPE&lt;br /&gt;
| 0x7000FA44&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SUBREVISION&lt;br /&gt;
| 0x7000FA48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SW_RESERVED_0&lt;br /&gt;
| 0x7000FA4C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SW_RESERVED_1&lt;br /&gt;
| 0x7000FA50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR4_CALIB&lt;br /&gt;
| 0x7000FA54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR5_CALIB&lt;br /&gt;
| 0x7000FA58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR6_CALIB&lt;br /&gt;
| 0x7000FA5C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR7_CALIB&lt;br /&gt;
| 0x7000FA60&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_PRIV_SEC_EN&lt;br /&gt;
| 0x7000FA64&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PKC_DISABLE|FUSE_PKC_DISABLE]]&lt;br /&gt;
| 0x7000FA68&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FUSE2TSEC_DEBUG_DISABLE&lt;br /&gt;
| 0x7000FA7C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_COMMON&lt;br /&gt;
| 0x7000FA80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_CP_BIN&lt;br /&gt;
| 0x7000FA84&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_DISABLE&lt;br /&gt;
| 0x7000FA88&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_FT_BIN&lt;br /&gt;
| 0x7000FA8C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_DONE_MAP&lt;br /&gt;
| 0x7000FA90&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_APB2JTAG_DISABLE&lt;br /&gt;
| 0x7000FA98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ODM_INFO&lt;br /&gt;
| 0x7000FA9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ARM_CRYPT_DE_FEATURE&lt;br /&gt;
| 0x7000FAA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_WOA_SKU_FLAG&lt;br /&gt;
| 0x7000FAC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ECO_RESERVE_1&lt;br /&gt;
| 0x7000FAC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GCPLEX_CONFIG_FUSE&lt;br /&gt;
| 0x7000FAC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MONTH&lt;br /&gt;
| 0x7000FACC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RAM_REPAIR_INDICATOR&lt;br /&gt;
| 0x7000FAD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR9_CALIB&lt;br /&gt;
| 0x7000FAD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VMIN_CALIBRATION&lt;br /&gt;
| 0x7000FADC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_AGING_SENSOR_CALIBRATION&lt;br /&gt;
| 0x7000FAE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DEBUG_AUTHENTICATION&lt;br /&gt;
| 0x7000FAE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INDEX&lt;br /&gt;
| 0x7000FAE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INFO&lt;br /&gt;
| 0x7000FAEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_DISABLE_CP1&lt;br /&gt;
| 0x7000FAF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_ENDIS&lt;br /&gt;
| 0x7000FAF4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_ECO_RESERVE_0&lt;br /&gt;
| 0x7000FAF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_REALIGNMENT_REG_OLD&lt;br /&gt;
| 0x7000FAFC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB0&lt;br /&gt;
| 0x7000FB04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB1&lt;br /&gt;
| 0x7000FB08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC0_DISABLE&lt;br /&gt;
| 0x7000FB0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC0_DISABLE_CP1&lt;br /&gt;
| 0x7000FB10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_CPU_DISABLE&lt;br /&gt;
| 0x7000FB14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_CPU_DISABLE_CP1&lt;br /&gt;
| 0x7000FB18&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR10_CALIB&lt;br /&gt;
| 0x7000FB1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR10_CALIB_AUX&lt;br /&gt;
| 0x7000FB20&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_DP&lt;br /&gt;
| 0x7000FB24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_PDP&lt;br /&gt;
| 0x7000FB28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_REG&lt;br /&gt;
| 0x7000FB2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_SP&lt;br /&gt;
| 0x7000FB30&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_RAM_SVOP_SMPDP&lt;br /&gt;
| 0x7000FB34&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC0_DISABLE_CP2&lt;br /&gt;
| 0x7000FB38&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC1_DISABLE&lt;br /&gt;
| 0x7000FB3C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC1_DISABLE_CP1&lt;br /&gt;
| 0x7000FB40&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC1_DISABLE_CP2&lt;br /&gt;
| 0x7000FB44&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_CPU_DISABLE_CP2&lt;br /&gt;
| 0x7000FB48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_DISABLE_CP2&lt;br /&gt;
| 0x7000FB4C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB_EXT&lt;br /&gt;
| 0x7000FB50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_FIELD&lt;br /&gt;
| 0x7000FB54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_ECC_EN&lt;br /&gt;
| 0x7000FB58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_REALIGNMENT_REG&lt;br /&gt;
| 0x7000FB7C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_0&lt;br /&gt;
| 0x7000FB80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_1&lt;br /&gt;
| 0x7000FB84&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_2|FUSE_SPARE_BIT_2]]&lt;br /&gt;
| 0x7000FB88&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_3|FUSE_SPARE_BIT_3]]&lt;br /&gt;
| 0x7000FB8C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_4|FUSE_SPARE_BIT_4]]&lt;br /&gt;
| 0x7000FB90&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_5|FUSE_SPARE_BIT_5]]&lt;br /&gt;
| 0x7000FB94&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_6&lt;br /&gt;
| 0x7000FB98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_7&lt;br /&gt;
| 0x7000FB9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_8&lt;br /&gt;
| 0x7000FBA0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_9&lt;br /&gt;
| 0x7000FBA4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_10&lt;br /&gt;
| 0x7000FBA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_11&lt;br /&gt;
| 0x7000FBAC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_12&lt;br /&gt;
| 0x7000FBB0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_13&lt;br /&gt;
| 0x7000FBB4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_14&lt;br /&gt;
| 0x7000FBB8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_15&lt;br /&gt;
| 0x7000FBBC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_16&lt;br /&gt;
| 0x7000FBC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_17&lt;br /&gt;
| 0x7000FBC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_18&lt;br /&gt;
| 0x7000FBC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_19&lt;br /&gt;
| 0x7000FBCC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_20&lt;br /&gt;
| 0x7000FBD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_21&lt;br /&gt;
| 0x7000FBD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_22&lt;br /&gt;
| 0x7000FBD8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_23&lt;br /&gt;
| 0x7000FBDC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_24&lt;br /&gt;
| 0x7000FBE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_25&lt;br /&gt;
| 0x7000FBE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_26&lt;br /&gt;
| 0x7000FBE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_27&lt;br /&gt;
| 0x7000FBEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_28&lt;br /&gt;
| 0x7000FBF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_29&lt;br /&gt;
| 0x7000FBF4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_30&lt;br /&gt;
| 0x7000FBF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_31&lt;br /&gt;
| 0x7000FBFC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SKU_INFO ====&lt;br /&gt;
Stores the SKU ID (must be 0x83).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_OPT_FT_REV ====&lt;br /&gt;
Stores the FT (Final Test) revision.&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FA ====&lt;br /&gt;
Stores failure analysis mode.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SOC_SPEEDO_1_CALIB ====&lt;br /&gt;
Stores the bootrom patch version.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM0 ====&lt;br /&gt;
This stores an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM1 ====&lt;br /&gt;
This stores an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| [5.0.0+] Used as key generation (patched units only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This stores an hardware ID in original launch units, but in patched units it stores a single value (key generation).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM3 ====&lt;br /&gt;
This stores an hardware ID in original launch units, but in patched units it&#039;s empty.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Unit type (3 = debug; 0 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown config (must be 1 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-3.0.2] 3-5&lt;br /&gt;
[4.0.0+] 3-7&lt;br /&gt;
| DRAM ID&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown config mask (must be 0 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Unit type mask (0 = debug; 1 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [3.0.0+] Kiosk mode (0 = retail; 1 = kiosk)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [5.0.0+] Unit patch flag (0 = unpatched; 1 = patched)&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| [4.0.0+] New unit type (0 = Erista; 1 = Mariko)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This stores some device configuration parameters.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM6 ====&lt;br /&gt;
This register returns the value programmed into index 0x3A of the fuse array. &lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM7 ====&lt;br /&gt;
This register returns the value programmed into index 0x3C of the fuse array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PUBLIC_KEY ====&lt;br /&gt;
This stores the SHA256 hash of the 2048-bit RSA key expected at BCT+0x210.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_OPT_CP_REV ====&lt;br /&gt;
Stores the CP (Chip Probing) revision.&lt;br /&gt;
&lt;br /&gt;
Original launch units have this value set to 0xA0 (revision 5.0). Patched units have this value set to 0x103 (revision 8.3).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY ====&lt;br /&gt;
This stores the 160-bit private key (128 bit SBK + 32-bit device key).&lt;br /&gt;
Reads to these registers after the SBK is locked out produce all-FF output.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Boot device&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Skip device selection straps (0 = don&#039;t skip; 1 = skip)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ENABLE_CHARGER_DETECT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ENABLE_WATCHDOG&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Forced RCM two button mode (0 = Only VOLUME_UP; 1 = VOLUME_UP + HOME)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| RCM USB controller mode (0 = USB 2.0; 1 = XUSB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This caches the value of the sw_reserved fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==== FUSE_PKC_DISABLE ====&lt;br /&gt;
This caches the value of the pkc_disable fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_2 ====&lt;br /&gt;
Stores part of the speedo fusing revision.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_3 ====&lt;br /&gt;
Stores part of the speedo fusing revision.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_4 ====&lt;br /&gt;
Stores part of the speedo fusing revision.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_5 ====&lt;br /&gt;
Must be non-zero on retail units, otherwise the first bootloader panics.&lt;br /&gt;
On debug units it can be zero, which tells the bootloader to choose from two debug master key seeds. If set to non-zero on a debug unit, it tells the bootloader to choose from two master key seeds (with the second one being the retail master key seed).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This value is no longer used during boot.&lt;br /&gt;
&lt;br /&gt;
== eFuses ==&lt;br /&gt;
The actual hardware fuses can be programmed through the fuse driver after enabling fuse programming.&lt;br /&gt;
&lt;br /&gt;
Below is a list of common fuse indexes used by Tegra devices (and applicable to the Switch).&lt;br /&gt;
Note that the indexes are relative to the start of the fuse array and each element is a 4 byte word. A single fuse write operation always writes the same word at both fuse_array + 0 (PRIMARY_ALIAS) and fuse_array + 1 (REDUNDANT_ALIAS).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Index&lt;br /&gt;
!  Bits&lt;br /&gt;
|-&lt;br /&gt;
| jtag_disable&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_production_mode&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_lock&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| public_key&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| secure_boot_key&lt;br /&gt;
| 0x22&lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| device_key&lt;br /&gt;
| 0x2A&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_cfg&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_sel&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| sw_reserved&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| ignore_dev_sel_straps&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#odm_reserved|odm_reserved]]&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| pkc_disable&lt;br /&gt;
| 0x52&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| debug_authentication&lt;br /&gt;
| 0x5A&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| aid&lt;br /&gt;
| 0x67&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| [[#bootrom_ipatch|bootrom_ipatch]]&lt;br /&gt;
| 0x72&lt;br /&gt;
| 624&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== odm_reserved ===&lt;br /&gt;
The first bootloader only burns fuses in this region.&lt;br /&gt;
Both fuse indexes 0x3A (odm_reserved + 0x0C) and 0x3C (odm_reserved + 0x0E) are used for anti-downgrade control. These fuses will have their values cached into [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]] and [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]].&lt;br /&gt;
&lt;br /&gt;
=== bootrom_ipatch ===&lt;br /&gt;
Tegra210 based hardware such as the Switch provides support for bootrom patches. The patch data is burned to the hardware fuse array using a specific format (see [https://gist.github.com/shuffle2/f8728159da100e9df2606d43925de0af shuffle2&#039;s ipatch decoder]). The bootrom reads these fuses in order to initialize the IPATCH hardware, which allows overriding data returned for code and data fetches done by BPMP.&lt;br /&gt;
&lt;br /&gt;
The following represents the patch data dumped from a Switch console:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
RAM:00000000 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000 irom_svc_dispatch&lt;br /&gt;
RAM:00000000   STMFD   SP!, {R0-R2}                  ; ipatches (new):&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 3b4d2100     769a     2100 : movs r1, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000000                                         ; &lt;br /&gt;
RAM:00000000                                         ; ipatches (old):&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 7d9e2000     fb3c     2000 : movs r0, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000004   MOV     R2, LR&lt;br /&gt;
RAM:00000008   SUB     R2, R2, #2&lt;br /&gt;
RAM:0000000C   LDR     R2, [R2]&lt;br /&gt;
RAM:00000010   AND     R2, R2, #0xFF&lt;br /&gt;
RAM:00000014   MOV     R2, R2,LSL#1&lt;br /&gt;
RAM:00000018   LDR     R0, =0x1007B0&lt;br /&gt;
RAM:0000001C   LDR     R1, =0x1007F8&lt;br /&gt;
RAM:00000020   SUB     R1, R1, R0&lt;br /&gt;
RAM:00000024   LDR     R0, =0x40004C30&lt;br /&gt;
RAM:00000028   ADD     R0, R0, R1&lt;br /&gt;
RAM:0000002C   ADD     R2, R2, R0&lt;br /&gt;
RAM:00000030   ORR     R2, R2, #1&lt;br /&gt;
RAM:00000034   LDMFD   SP!, {R0,R1}&lt;br /&gt;
RAM:00000038   BX      R2&lt;br /&gt;
RAM:00000038 ; End of function irom_svc_dispatch&lt;br /&gt;
RAM:00000038&lt;br /&gt;
RAM:00000038 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000003C dword_3C DCD 0x1007B0                   ; DATA XREF: irom_svc_dispatch+18↑r&lt;br /&gt;
RAM:00000040 dword_40 DCD 0x1007F8                   ; DATA XREF: irom_svc_dispatch+1C↑r&lt;br /&gt;
RAM:00000044 dword_44 DCD 0x40004C30                 ; DATA XREF: irom_svc_dispatch+24↑r&lt;br /&gt;
RAM:00000048   CODE16&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 sub_48&lt;br /&gt;
RAM:00000048   MOVS    R2, #0                        ; 0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:0000004A   MVNS    R2, R2&lt;br /&gt;
RAM:0000004C   LDR     R1, =0x60006410&lt;br /&gt;
RAM:0000004E   STR     R2, [R1,#0x30]&lt;br /&gt;
RAM:00000050   STR     R2, [R1,#0x38]&lt;br /&gt;
RAM:00000052   LDR     R1, =0x600060F8&lt;br /&gt;
RAM:00000054   STR     R2, [R1]&lt;br /&gt;
RAM:00000056   STR     R2, [R1,#4]&lt;br /&gt;
RAM:00000058   LDR     R1, =0x60006284&lt;br /&gt;
RAM:0000005A   STR     R2, [R1]&lt;br /&gt;
RAM:0000005C   STR     R2, [R1,#0x18]&lt;br /&gt;
RAM:0000005E   ADDS    R1, #0x80&lt;br /&gt;
RAM:00000060   ADDS    R1, #0x1C&lt;br /&gt;
RAM:00000062   STR     R2, [R1]&lt;br /&gt;
RAM:00000064   STR     R2, [R1,#8]&lt;br /&gt;
RAM:00000066   STR     R2, [R1,#0x10]&lt;br /&gt;
RAM:00000068   ADDS    R1, #0x80&lt;br /&gt;
RAM:0000006A   STR     R2, [R1]&lt;br /&gt;
RAM:0000006C   STR     R2, [R1,#4]&lt;br /&gt;
RAM:0000006E   LDR     R1, =0x60006554&lt;br /&gt;
RAM:00000070   STR     R2, [R1]&lt;br /&gt;
RAM:00000072   MOVS    R2, #0xA0000000&lt;br /&gt;
RAM:00000076   LDR     R1, =0x60006148&lt;br /&gt;
RAM:00000078   STR     R2, [R1]&lt;br /&gt;
RAM:0000007A   ADDS    R1, #0x38 ; &#039;8&#039;&lt;br /&gt;
RAM:0000007C   STR     R2, [R1]&lt;br /&gt;
RAM:0000007E   MOVS    R2, #0xE0000000&lt;br /&gt;
RAM:00000082   LDR     R1, =0x600066A0&lt;br /&gt;
RAM:00000084   STR     R2, [R1]&lt;br /&gt;
RAM:00000086   MOVS    R1, #0&lt;br /&gt;
RAM:00000088   MOVS    R0, #0xE&lt;br /&gt;
RAM:0000008A   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000008A ; End of function sub_48&lt;br /&gt;
RAM:0000008A&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C sub_8C&lt;br /&gt;
RAM:0000008C   LDR     R0, [R1,#0x18]                ; 1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:0000008E   MOVS    R2, #1&lt;br /&gt;
RAM:00000090   ORRS    R0, R2&lt;br /&gt;
RAM:00000092   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:00000092 ; End of function sub_8C&lt;br /&gt;
RAM:00000092&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 sub_94&lt;br /&gt;
RAM:00000094   LDR     R2, [R4,#0x50]                ; 2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000096   ADDS    R2, R2, #2&lt;br /&gt;
RAM:00000098   STR     R2, [R4,#0x50]&lt;br /&gt;
RAM:0000009A   SUBS    R1, #0x80&lt;br /&gt;
RAM:0000009C   STR     R1, [R4,#0x34]&lt;br /&gt;
RAM:0000009E   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000009E ; End of function sub_94&lt;br /&gt;
RAM:0000009E&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 sub_A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; FUNCTION CHUNK AT RAM:00000148 SIZE 00000004 BYTES&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0   MOVS    R0, #0x70000000               ; 4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:000000A4   LDR     R6, =dword_7000EF14&lt;br /&gt;
RAM:000000A6   LDR     R2, =dword_7000E5B4&lt;br /&gt;
RAM:000000A8   LDR     R2, [R2]&lt;br /&gt;
RAM:000000AA   CMP     R2, #0&lt;br /&gt;
RAM:000000AC   BEQ     loc_B4&lt;br /&gt;
RAM:000000AE   LDR     R2, [R6]&lt;br /&gt;
RAM:000000B0   STR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B2   B       loc_BC&lt;br /&gt;
RAM:000000B4 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:000000B4&lt;br /&gt;
RAM:000000B4 loc_B4                                  ; CODE XREF: sub_A0+C↑j&lt;br /&gt;
RAM:000000B4   LDR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B6   LSRS    R0, R0, #0x12&lt;br /&gt;
RAM:000000B8   ORRS    R2, R0&lt;br /&gt;
RAM:000000BA   STR     R2, [R6]&lt;br /&gt;
RAM:000000BC&lt;br /&gt;
RAM:000000BC loc_BC                                  ; CODE XREF: sub_A0+12↑j&lt;br /&gt;
RAM:000000BC   LDR     R6, =dword_7000E9C0&lt;br /&gt;
RAM:000000BE   LDR     R0, [R6]&lt;br /&gt;
RAM:000000C0   MOVS    R2, #0x4000&lt;br /&gt;
RAM:000000C4   ORRS    R2, R0&lt;br /&gt;
RAM:000000C6   STR     R2, [R6]&lt;br /&gt;
RAM:000000C8   LDR     R0, [R5,#0x10]&lt;br /&gt;
RAM:000000CA   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000CA ; End of function sub_A0&lt;br /&gt;
RAM:000000CA&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC sub_CC&lt;br /&gt;
RAM:000000CC   MOVS    R2, #0xF000000                ; 5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:000000D0   BICS    R1, R2&lt;br /&gt;
RAM:000000D2   STR     R1, [R4,#0x10]&lt;br /&gt;
RAM:000000D4   LDR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000D6   MOVS    R2, #7&lt;br /&gt;
RAM:000000D8   BICS    R1, R2&lt;br /&gt;
RAM:000000DA   STR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000DC   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000DC ; End of function sub_CC&lt;br /&gt;
RAM:000000DC&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE sub_DE&lt;br /&gt;
RAM:000000DE   LDR     R2, =dword_7000FA9C           ; 6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:000000E0   LDR     R2, [R2]&lt;br /&gt;
RAM:000000E2   LSRS    R2, R2, #8&lt;br /&gt;
RAM:000000E4   LSLS    R2, R2, #1&lt;br /&gt;
RAM:000000E6   LDR     R1, [R4]&lt;br /&gt;
RAM:000000E8   BICS    R1, R2&lt;br /&gt;
RAM:000000EA   STR     R1, [R4]&lt;br /&gt;
RAM:000000EC   CMP     R0, #0&lt;br /&gt;
RAM:000000EE   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000EE ; End of function sub_DE&lt;br /&gt;
RAM:000000EE&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 sub_F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 arg_0=  0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0   LDR     R0, =0x400049F0               ; 7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:000000F2   LDR     R2, [R0]&lt;br /&gt;
RAM:000000F4   STR     R2, [SP,#arg_0]&lt;br /&gt;
RAM:000000F6   LDR     R0, =0x40010000&lt;br /&gt;
RAM:000000F8   LSRS    R2, R2, #17&lt;br /&gt;
RAM:000000FA   BEQ     pop_r2_mov_pc_lr              ; if ([0x400049F0] &amp;gt;&amp;gt; 17) == 0) {&lt;br /&gt;
RAM:000000FA                                         ;   r2 = [0x400049F0];&lt;br /&gt;
RAM:000000FA                                         ; } else {&lt;br /&gt;
RAM:000000FC   LDR     R0, =APBDEV_PMC_CNTRL_0&lt;br /&gt;
RAM:000000FE   STR     R4, [R0]                      ;  write APBDEV_PMC_CNTRL&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000100 loc_100                                 ; CODE XREF: sub_F0:loc_100↓j&lt;br /&gt;
RAM:00000100   B       loc_100                       ;  hang&lt;br /&gt;
RAM:00000100 ; End of function sub_F0                ; }&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 sub_102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 arg_0=  0&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102   LDR     R2, =0x40010220               ; 8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000104   STR     R2, [SP,#arg_0]               ; set r2 retval = [0x40010220]&lt;br /&gt;
RAM:00000106   LDR     R2, [R2,#0x18]&lt;br /&gt;
RAM:00000108   ADDS    R0, #0xFC&lt;br /&gt;
RAM:0000010A   STR     R2, [R0,#0x1C]                ; [r0+0x118] = [0x40010220 + 0x18]&lt;br /&gt;
RAM:0000010C   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000010C ; End of function sub_102&lt;br /&gt;
RAM:0000010C&lt;br /&gt;
RAM:0000010C ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000010E   DCB    0&lt;br /&gt;
RAM:0000010F   DCB    0&lt;br /&gt;
RAM:00000110 off_110 DCD 0x60006410                  ; DATA XREF: sub_48+4↑r&lt;br /&gt;
RAM:00000114 off_114 DCD 0x600060F8                  ; DATA XREF: sub_48+A↑r&lt;br /&gt;
RAM:00000118 off_118 DCD 0x60006284                  ; DATA XREF: sub_48+10↑r&lt;br /&gt;
RAM:0000011C off_11C DCD 0x60006554                  ; DATA XREF: sub_48+26↑r&lt;br /&gt;
RAM:00000120 off_120 DCD 0x60006148                  ; DATA XREF: sub_48+2E↑r&lt;br /&gt;
RAM:00000124 off_124 DCD 0x600066A0                  ; DATA XREF: sub_48+3A↑r&lt;br /&gt;
RAM:00000128 off_128 DCD dword_7000EF14              ; DATA XREF: sub_A0+4↑r&lt;br /&gt;
RAM:0000012C off_12C DCD dword_7000E5B4              ; DATA XREF: sub_A0+6↑r&lt;br /&gt;
RAM:00000130 off_130 DCD dword_7000E9C0              ; DATA XREF: sub_A0:loc_BC↑r&lt;br /&gt;
RAM:00000134 off_134 DCD dword_7000FA9C              ; DATA XREF: sub_DE↑r&lt;br /&gt;
RAM:00000138 off_138 DCD 0x400049F0                  ; DATA XREF: sub_F0↑r&lt;br /&gt;
RAM:0000013C dword_13C DCD 0x40010000                ; DATA XREF: sub_F0+6↑r&lt;br /&gt;
RAM:00000140 off_140 DCD APBDEV_PMC_CNTRL_0          ; DATA XREF: sub_F0+C↑r&lt;br /&gt;
RAM:00000144 off_144 DCD 0x40010220                  ; DATA XREF: sub_102↑r&lt;br /&gt;
RAM:00000148 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:00000148 ; START OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
RAM:00000148&lt;br /&gt;
RAM:00000148 pop_r2_mov_pc_lr                        ; CODE XREF: sub_48+42↑j&lt;br /&gt;
RAM:00000148                                         ; sub_8C+6↑j ...&lt;br /&gt;
RAM:00000148   POP     {R2}&lt;br /&gt;
RAM:0000014A   MOV     PC, LR&lt;br /&gt;
RAM:0000014A ; END OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last 4 patches are exclusive to the Switch, while the remaining ones are often included in most Tegra210 based devices.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 0 ====&lt;br /&gt;
This patch configures clock enables and clock gate overrides for new hardware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 CLK_ENB_H_SET = 0x60006328;&lt;br /&gt;
 u32 CLK_ENB_L_SET = 0x60006320;&lt;br /&gt;
 u32 CLK_ENB_U_SET = 0x60006330; &lt;br /&gt;
 u32 CLK_ENB_V_SET = 0x60006440;&lt;br /&gt;
 u32 CLK_ENB_W_SET = 0x60006448;&lt;br /&gt;
 u32 CLK_ENB_X_SET = 0x60006284;&lt;br /&gt;
 u32 CLK_ENB_Y_SET = 0x6000629C;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRA = 0x600060F8;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRB = 0x600060FC;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRC = 0x600063A0;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRD = 0x600063A4;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRE = 0x60006554;&lt;br /&gt;
 u32 CLK_SOURCE_VI = 0x60006148;&lt;br /&gt;
 u32 CLK_SOURCE_HOST1X = 0x60006180;&lt;br /&gt;
 u32 CLK_SOURCE_NVENC = 0x600066A0; &lt;br /&gt;
&lt;br /&gt;
 // Set all clock enables and overrides&lt;br /&gt;
 *(u32 *)CLK_ENB_V_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_W_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRA = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRB = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_X_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_Y_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_L_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_H_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_U_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRC = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRD = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRE = 0xFFFFFFFF;&lt;br /&gt;
&lt;br /&gt;
 // Set VI, HOST1X and NVENC clock sources to CLK_M&lt;br /&gt;
 *(u32 *)CLK_SOURCE_VI = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_HOST1X = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_NVENC = 0xE0000000;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
&lt;br /&gt;
     MOVS    R1, #0&lt;br /&gt;
     MOVS    R0, #0xE&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 1 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
LP0 resume code expects APBDEV_PMC_SCRATCH190_0 to be set to 0x01, but the bootrom didn&#039;t set it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH190_0 = 0x7000EC18;&lt;br /&gt;
 u32 pmc_scratch190_val = *(u32 *)APBDEV_PMC_SCRATCH190_0;&lt;br /&gt;
 &lt;br /&gt;
 return (pmc_scratch190_val | 0x01);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 2 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_SPARE_CFG0_0 = 0x7D000834;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
 &lt;br /&gt;
 // Increase UTMIP_HSSQUELCH_LEVEL_NEW by 0x02&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 += 0x02;&lt;br /&gt;
&lt;br /&gt;
 // Clear FUSE_HS_IREF_CAP_CFG&lt;br /&gt;
 *(u32 *)USB1_UTMIP_SPARE_CFG0_0 = ((*(u32 *)USB1_UTMIP_SPARE_CFG0_0 &amp;amp; ~(0x118)) - 0x80);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 3 ====&lt;br /&gt;
This patch ensures that waiting on PRC_PENDING from the XUSB_DEV register T_XUSB_DEV_XHCI_PORTSC never fails.&lt;br /&gt;
&lt;br /&gt;
In the second batch of patched units ([[#FUSE_OPT_FT_REV|FUSE_OPT_FT_REV]] set to revision 7.0) this patch has been replaced with a fix for [[Switch_System_Flaws#Hardware|CVE-2018-6242]] (arbitrary copy when handling USB control requests in RCM). By setting R1 to 0 at address 0x0010769A in the bootrom, the upper 16 bits of the USB control request&#039;s wLength field are cleared out, effectively limiting the request&#039;s size to a maximum of 255 bytes.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 4 ====&lt;br /&gt;
This patch allows backing up and restoring strapping options for warmboot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH0_0 = 0x7000E450;&lt;br /&gt;
 u32 APBDEV_PMC_RST_STATUS_0 = 0x7000E5B4;&lt;br /&gt;
 u32 APBDEV_PMC_SEC_DISABLE8_0 = 0x7000E9C0;&lt;br /&gt;
 u32 APBDEV_PMC_SECURE_SCRATCH111_0 = 0x7000EF14;&lt;br /&gt;
 u32 APB_MISC_PP_STRAPPING_OPT_A_0 = 0x70000008; &lt;br /&gt;
&lt;br /&gt;
 u32 reset_status = *(u32 *)APBDEV_PMC_RST_STATUS_0;&lt;br /&gt;
&lt;br /&gt;
 // Check for regular power on&lt;br /&gt;
 if (reset_status == 0)&lt;br /&gt;
 {    &lt;br /&gt;
     // Set all buttons in RCM_STRAPS and backup to PMC scratch&lt;br /&gt;
     *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0 = (*(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 | 0x1C00);&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
     // Restore strapping options from PMC scratch&lt;br /&gt;
     *(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 = *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // Disable write access to APBDEV_PMC_SECURE_SCRATCH111_0&lt;br /&gt;
 *(u32 *)APBDEV_PMC_SEC_DISABLE8_0 |= 0x4000;&lt;br /&gt;
 &lt;br /&gt;
 return *(u32 *)APBDEV_PMC_SCRATCH0_0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 5 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_HSRX_CFG0_0 = 0x7D000810;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
&lt;br /&gt;
 // Clear UTMIP_IDLE_WAIT, UTMIP_ELASTIC_LIMIT and UTMIP_PCOUNT_UPDN_DIV,&lt;br /&gt;
 // and set UTMIP_IDLE_WAIT to 0x11 and UTMIP_ELASTIC_LIMIT to 0x10 &lt;br /&gt;
 *(u32 *)USB1_UTMIP_HSRX_CFG0_0 = ((*(u32 *)USB1_UTMIP_HSRX_CFG0_0 &amp;amp; ~(0xF8000) + 0x88000 &amp;amp; ~(0x7C00) + 0x4000) &amp;amp; ~(0xF000000));&lt;br /&gt;
 &lt;br /&gt;
 // Clear UTMIP_HSSQUELCH_LEVEL_NEW&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 &amp;amp;= ~(0x07);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 6 ====&lt;br /&gt;
This patch is a factory backdoor.&lt;br /&gt;
&lt;br /&gt;
It allows controlling the debug authentication configuration using a fuse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 FUSE_ODM_INFO = 0x7000FA9C;&lt;br /&gt;
&lt;br /&gt;
 u32 odm_info = *(u32 *)FUSE_ODM_INFO;&lt;br /&gt;
 debug_auth_override_val = ((odm_info &amp;gt;&amp;gt; 0x08) &amp;lt;&amp;lt; 0x01);&lt;br /&gt;
&lt;br /&gt;
 // Override debug authentication value stored in IRAM&lt;br /&gt;
 *(u32 *)0x400028E4 &amp;amp;= ~(debug_auth_override_val);&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     CMP     R0, #0&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 7 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It prevents overflowing IRAM (0x40010000) when copying the warmboot binary from DRAM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_CNTRL_0 = 0x7000E400;&lt;br /&gt;
 &lt;br /&gt;
 u32 warmboot_header_addr = 0x400049F0;&lt;br /&gt;
 u32 warmboot_bin_size = *(u32 *)warmboot_bin_header_addr;&lt;br /&gt;
 &lt;br /&gt;
 // Invalid warmboot binary size&lt;br /&gt;
 if (warmboot_size &amp;gt;&amp;gt; 0x11)&lt;br /&gt;
 {&lt;br /&gt;
     // Assert MAIN_RST&lt;br /&gt;
     // 0x40004BF0 comes from R4 and the bootrom doesn&#039;t bother to change it&lt;br /&gt;
     *(u32 *)APBDEV_PMC_CNTRL_0 = 0x40004BF0;&lt;br /&gt;
&lt;br /&gt;
     // Deadlock&lt;br /&gt;
     while(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R0, =0x40010000&lt;br /&gt;
     LDR     R2, [warmboot_bin_header_addr]&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 8 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It sets the correct warmboot binary entrypoint address for RSA signature verification, which would be done in DRAM instead of IRAM without this patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 warmboot_addr_ptr = 0x40010238;&lt;br /&gt;
 u32 warmboot_entry_addr_ptr = 0x40004C28;&lt;br /&gt;
&lt;br /&gt;
 *(u32 *)warmboot_entry_addr_ptr = *(u32 *)warmboot_addr_ptr;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R2, [warmboot_addr_ptr]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatches 9 and 10 ====&lt;br /&gt;
These patches modify the 256-bit Secure Provisioning AES key with index 0x3A.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 11 ====&lt;br /&gt;
This patch forces the value of [[Security_Engine|SE_TZRAM_SECURITY]] to be 0x01 instead of restoring it from the saved SE context.&lt;br /&gt;
&lt;br /&gt;
== Anti-downgrade ==&lt;br /&gt;
The first bootloader verifies [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]] to prevent downgrading.&lt;br /&gt;
How many fuses are expected to be burnt depends the device&#039;s unit type as below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1-3.0.2&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0-4.1.0&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0-5.1.0&lt;br /&gt;
| 6&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0-6.1.0&lt;br /&gt;
| 7&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 6.2.0&lt;br /&gt;
| 8&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0-8.0.1&lt;br /&gt;
| 9&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If too many fuses are burnt the bootloader will panic immediately.&lt;br /&gt;
&lt;br /&gt;
If too few are burnt, the bootloader will enable fuse programming and write the expected value to fuse indexes 0x3A and 0x3C. Afterwards, fuse programming is disabled and the panic value 0x21 is written to PMC_SCRATCH200 register (0x7000EC40). Finally, the watchdog timer is initialized and programmed to force a reset.&lt;br /&gt;
&lt;br /&gt;
On a subsequent boot, after the anti-downgrade fuses are checked again, the PMC_RST_STATUS register (0x7000E5B4) is checked and if set to 0x01 (watchdog reset) the PMC_SCRATCH200 register (0x7000EC40) will be checked for the panic value 0x21.&lt;br /&gt;
PMC_RST_STATUS will only be set back to 0 (power on reset) if the fuse count matches the new expected value, otherwise the system will panic.&lt;/div&gt;</summary>
		<author><name>Lacius</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Fuses&amp;diff=5552</id>
		<title>Fuses</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Fuses&amp;diff=5552"/>
		<updated>2018-11-20T01:05:17Z</updated>

		<summary type="html">&lt;p&gt;Lacius: /* Anti-downgrade */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch makes use of Tegra&#039;s fuse driver for a number of operations. This driver is mapped to physical address 0x7000F800 with a total size of 0x400 bytes and exposes several registers for fuse programming.&lt;br /&gt;
&lt;br /&gt;
Registers from 0x7000F800 to 0x7000F800 + 0xFF can be used to directly program the hardware fuse array, while registers from 0x7000F800 + 0x100 (FUSE_CHIP_REG_START_OFFSET) to 0x7000F800 + 0x3FC (FUSE_CHIP_REG_END_OFFSET) represent cached values read from certain fuses.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Below is a list of fuse driver registers used by the Switch&#039;s bootloaders.&lt;br /&gt;
&lt;br /&gt;
=== Driver registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_CTRL|FUSE_CTRL]]&lt;br /&gt;
| 0x7000F800&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_ADDR|FUSE_REG_ADDR]]&lt;br /&gt;
| 0x7000F804&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_READ|FUSE_REG_READ]]&lt;br /&gt;
| 0x7000F808&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_WRITE|FUSE_REG_WRITE]]&lt;br /&gt;
| 0x7000F80C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD1&lt;br /&gt;
| 0x7000F810&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD2&lt;br /&gt;
| 0x7000F814&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_PGM1&lt;br /&gt;
| 0x7000F818&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_TIME_PGM2|FUSE_TIME_PGM2]]&lt;br /&gt;
| 0x7000F81C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIV2INTFC&lt;br /&gt;
| 0x7000F820&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FUSEBYPASS&lt;br /&gt;
| 0x7000F824&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATEKEYDISABLE&lt;br /&gt;
| 0x7000F828&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_DIS_PGM|FUSE_DIS_PGM]]&lt;br /&gt;
| 0x7000F82C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_WRITE_ACCESS|FUSE_WRITE_ACCESS]]&lt;br /&gt;
| 0x7000F830&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PWR_GOOD_SW&lt;br /&gt;
| 0x7000F834&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_CTRL ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Fuse command (1 = FUSE_READ; 2 = FUSE_WRITE; 3 = FUSE_SENSE)&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| Fuse power down mode flag (FUSE_CTRL_PD)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before fuse reading/writing the power down mode must be disabled.&lt;br /&gt;
FUSE_SENSE mode flushes programmed values into the [[Fuses#Cache_registers|cache registers]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_ADDR ====&lt;br /&gt;
This register takes the address of the fuse to be read/written/sensed.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_READ ====&lt;br /&gt;
This register receives the value read from the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_WRITE ====&lt;br /&gt;
This register takes the value to be written to the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_TIME_PGM2 ====&lt;br /&gt;
This register takes the fuse programming pulse (0xC0 == 19200 kHz).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_DIS_PGM ====&lt;br /&gt;
If set to 0x01, this register disables fuse programming.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_WRITE_ACCESS ====&lt;br /&gt;
If set to 0x01, this register disables software writes to the fuse driver registers.&lt;br /&gt;
&lt;br /&gt;
=== Cache registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MODE&lt;br /&gt;
| 0x7000F900&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SKU_INFO|FUSE_SKU_INFO]]&lt;br /&gt;
| 0x7000F910&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_0&lt;br /&gt;
| 0x7000F914&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_IDDQ&lt;br /&gt;
| 0x7000F918&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FT_REV&lt;br /&gt;
| 0x7000F928&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_1&lt;br /&gt;
| 0x7000F92C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_2&lt;br /&gt;
| 0x7000F930&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_0&lt;br /&gt;
| 0x7000F934&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SOC_SPEEDO_1|FUSE_SOC_SPEEDO_1]]&lt;br /&gt;
| 0x7000F938&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_2&lt;br /&gt;
| 0x7000F93C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_IDDQ&lt;br /&gt;
| 0x7000F940&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FA|FUSE_FA]]&lt;br /&gt;
| 0x7000F948&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY0]]&lt;br /&gt;
| 0x7000F964&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY1]]&lt;br /&gt;
| 0x7000F968&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY2]]&lt;br /&gt;
| 0x7000F96C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY3]]&lt;br /&gt;
| 0x7000F970&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY4]]&lt;br /&gt;
| 0x7000F974&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY5]]&lt;br /&gt;
| 0x7000F978&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY6]]&lt;br /&gt;
| 0x7000F97C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY7]]&lt;br /&gt;
| 0x7000F980&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_1&lt;br /&gt;
| 0x7000F984&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_2&lt;br /&gt;
| 0x7000F988&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CP_REV&lt;br /&gt;
| 0x7000F990&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_0&lt;br /&gt;
| 0x7000F998&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FIRST_BOOTROM_PATCH_SIZE_REG&lt;br /&gt;
| 0x7000F99C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURITY_MODE&lt;br /&gt;
| 0x7000F9A0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY0]]&lt;br /&gt;
| 0x7000F9A4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY1]]&lt;br /&gt;
| 0x7000F9A8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY2]]&lt;br /&gt;
| 0x7000F9AC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY3]]&lt;br /&gt;
| 0x7000F9B0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY4]]&lt;br /&gt;
| 0x7000F9B4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_BOOT_DEVICE_INFO&lt;br /&gt;
| 0x7000F9BC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_SW|FUSE_RESERVED_SW]]&lt;br /&gt;
| 0x7000F9C0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VP8_ENABLE&lt;br /&gt;
| 0x7000F9C4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]]&lt;br /&gt;
| 0x7000F9C8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]]&lt;br /&gt;
| 0x7000F9CC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]]&lt;br /&gt;
| 0x7000F9D0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM3|FUSE_RESERVED_ODM3]]&lt;br /&gt;
| 0x7000F9D4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]&lt;br /&gt;
| 0x7000F9D8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_ODM5&lt;br /&gt;
| 0x7000F9DC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]]&lt;br /&gt;
| 0x7000F9E0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]]&lt;br /&gt;
| 0x7000F9E4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_USB_CALIB&lt;br /&gt;
| 0x7000F9F0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_DIRECT_CONFIG&lt;br /&gt;
| 0x7000F9F4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VENDOR_CODE&lt;br /&gt;
| 0x7000FA00&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FAB_CODE&lt;br /&gt;
| 0x7000FA04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_0&lt;br /&gt;
| 0x7000FA08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_1&lt;br /&gt;
| 0x7000FA0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_WAFER_ID&lt;br /&gt;
| 0x7000FA10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_X_COORDINATE&lt;br /&gt;
| 0x7000FA14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_Y_COORDINATE&lt;br /&gt;
| 0x7000FA18&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SATA_CALIB&lt;br /&gt;
| 0x7000FA24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GPU_IDDQ&lt;br /&gt;
| 0x7000FA28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_3&lt;br /&gt;
| 0x7000FA2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SUBREVISION&lt;br /&gt;
| 0x7000FA48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_4&lt;br /&gt;
| 0x7000FA54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_5&lt;br /&gt;
| 0x7000FA58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_6&lt;br /&gt;
| 0x7000FA5C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_7&lt;br /&gt;
| 0x7000FA60&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_PRIV_SEC_DIS&lt;br /&gt;
| 0x7000FA64&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PKC_DISABLE|FUSE_PKC_DISABLE]]&lt;br /&gt;
| 0x7000FA68&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_COMMON&lt;br /&gt;
| 0x7000FA80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DEBUG_AUTH_OVERRIDE&lt;br /&gt;
| 0x7000FA9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_8&lt;br /&gt;
| 0x7000FAD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INDEX&lt;br /&gt;
| 0x7000FAE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB&lt;br /&gt;
| 0x7000FB04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC0_DISABLE&lt;br /&gt;
| 0x7000FB0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_9&lt;br /&gt;
| 0x7000FB1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC1_DISABLE&lt;br /&gt;
| 0x7000FB3C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB_EXT&lt;br /&gt;
| 0x7000FB50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_0&lt;br /&gt;
| 0x7000FB80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_1&lt;br /&gt;
| 0x7000FB84&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_2|FUSE_SPARE_BIT_2]]&lt;br /&gt;
| 0x7000FB88&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_3|FUSE_SPARE_BIT_3]]&lt;br /&gt;
| 0x7000FB8C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_4|FUSE_SPARE_BIT_4]]&lt;br /&gt;
| 0x7000FB90&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_5|FUSE_SPARE_BIT_5]]&lt;br /&gt;
| 0x7000FB94&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_6&lt;br /&gt;
| 0x7000FB98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_7&lt;br /&gt;
| 0x7000FB9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_8&lt;br /&gt;
| 0x7000FBA0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_9&lt;br /&gt;
| 0x7000FBA4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_10&lt;br /&gt;
| 0x7000FBA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_11&lt;br /&gt;
| 0x7000FBAC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_12&lt;br /&gt;
| 0x7000FBB0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_13&lt;br /&gt;
| 0x7000FBB4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_14&lt;br /&gt;
| 0x7000FBB8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_15&lt;br /&gt;
| 0x7000FBBC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_16&lt;br /&gt;
| 0x7000FBC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_17&lt;br /&gt;
| 0x7000FBC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_18&lt;br /&gt;
| 0x7000FBC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_19&lt;br /&gt;
| 0x7000FBCC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_20&lt;br /&gt;
| 0x7000FBD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_21&lt;br /&gt;
| 0x7000FBD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_22&lt;br /&gt;
| 0x7000FBD8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_23&lt;br /&gt;
| 0x7000FBDC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_24&lt;br /&gt;
| 0x7000FBE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_25&lt;br /&gt;
| 0x7000FBE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_26&lt;br /&gt;
| 0x7000FBE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_27&lt;br /&gt;
| 0x7000FBEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_28&lt;br /&gt;
| 0x7000FBF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_29&lt;br /&gt;
| 0x7000FBF4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_30&lt;br /&gt;
| 0x7000FBF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_31&lt;br /&gt;
| 0x7000FBFC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SKU_INFO ====&lt;br /&gt;
Stores the SKU ID (must be 0x83).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FA ====&lt;br /&gt;
Stores failure analysis mode.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SOC_SPEEDO_1 ====&lt;br /&gt;
Stores the bootrom patch version.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM0 ====&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM1 ====&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| [5.0.0+] Used as key generation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM3 ====&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Unit type (3 = debug; 0 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown config (must be 1 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-3.0.2] 3-5&lt;br /&gt;
[4.0.0+] 3-7&lt;br /&gt;
| DRAM id&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown config mask (must be 0 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Unit type mask (0 = debug; 1 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [3.0.0+] Kiosk mode (0 = retail; 1 = kiosk)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [5.0.0+] SoC variant (0 = T210; 1 = T214)&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| [4.0.0+] New unit type&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This stores some device configuration parameters.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM6 ====&lt;br /&gt;
This register returns the value programmed into index 0x3A of the fuse array. &lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM7 ====&lt;br /&gt;
This register returns the value programmed into index 0x3C of the fuse array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_2 ====&lt;br /&gt;
Stores part of the speedo fusing revision.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_3 ====&lt;br /&gt;
Stores part of the speedo fusing revision.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_4 ====&lt;br /&gt;
Stores part of the speedo fusing revision.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_5 ====&lt;br /&gt;
Must be non-zero on retail units, otherwise the first bootloader panics.&lt;br /&gt;
On debug units it can be zero, which tells the bootloader to choose from two debug master key seeds. If set to non-zero on a debug unit, it tells the bootloader to choose from two retail master key seeds (only the last one matches the retail master key seed).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY ====&lt;br /&gt;
This stores the 160-bit private key (128 bit SBK + 32-bit device key).&lt;br /&gt;
Reads to these registers after the SBK is locked out produce all-FF output.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PUBLIC_KEY ====&lt;br /&gt;
This stores the SHA256 hash of the 2048-bit RSA key expected at BCT+0x210.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Boot device&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Skip device selection straps (0 = don&#039;t skip; 1 = skip)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ENABLE_CHARGER_DETECT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ENABLE_WATCHDOG&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Forced RCM two button mode (0 = Only VOLUME_UP; 1 = VOLUME_UP + HOME)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| RCM USB controller mode (0 = USB 2.0; 1 = XUSB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This caches the value of the sw_reserved fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PKC_DISABLE ====&lt;br /&gt;
This caches the value of the pkc_disable fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
== eFuses ==&lt;br /&gt;
The actual hardware fuses can be programmed through the fuse driver after enabling fuse programming.&lt;br /&gt;
&lt;br /&gt;
Below is a list of common fuse indexes used by Tegra devices (and applicable to the Switch).&lt;br /&gt;
Note that the indexes are relative to the start of the fuse array and each element is a 4 byte word. A single fuse write operation always writes the same word at both fuse_array + 0 (PRIMARY_ALIAS) and fuse_array + 1 (REDUNDANT_ALIAS).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Index&lt;br /&gt;
!  Bits&lt;br /&gt;
|-&lt;br /&gt;
| jtag_disable&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_production_mode&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_lock&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| public_key&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| secure_boot_key&lt;br /&gt;
| 0x22&lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| device_key&lt;br /&gt;
| 0x2A&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_cfg&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_sel&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| sw_reserved&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| ignore_dev_sel_straps&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#odm_reserved|odm_reserved]]&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| pkc_disable&lt;br /&gt;
| 0x52&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#bootrom_ipatch|bootrom_ipatch]]&lt;br /&gt;
| 0x72&lt;br /&gt;
| 624&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== odm_reserved ===&lt;br /&gt;
The first bootloader only burns fuses in this region.&lt;br /&gt;
Both fuse indexes 0x3A (odm_reserved + 0x0C) and 0x3C (odm_reserved + 0x0E) are used for anti-downgrade control. These fuses will have their values cached into [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]] and [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]].&lt;br /&gt;
&lt;br /&gt;
=== bootrom_ipatch ===&lt;br /&gt;
Tegra210 based hardware such as the Switch provides support for bootrom patches. The patch data is burned to the hardware fuse array using a specific format (see [https://gist.github.com/shuffle2/f8728159da100e9df2606d43925de0af shuffle2&#039;s ipatch decoder]). The bootrom reads these fuses in order to initialize the IPATCH hardware, which allows overriding data returned for code and data fetches done by BPMP. The revision stored in FUSE_CP_REV indicates the unique set of values stored in ipatch fuses.&lt;br /&gt;
&lt;br /&gt;
The following represents the patch data dumped from a Switch console:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
RAM:00000000 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000 irom_svc_dispatch&lt;br /&gt;
RAM:00000000   STMFD   SP!, {R0-R2}                  ; ipatches:&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 7d9e2000     fb3c     2000 : movs r0, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000004   MOV     R2, LR&lt;br /&gt;
RAM:00000008   SUB     R2, R2, #2&lt;br /&gt;
RAM:0000000C   LDR     R2, [R2]&lt;br /&gt;
RAM:00000010   AND     R2, R2, #0xFF&lt;br /&gt;
RAM:00000014   MOV     R2, R2,LSL#1&lt;br /&gt;
RAM:00000018   LDR     R0, =0x1007B0&lt;br /&gt;
RAM:0000001C   LDR     R1, =0x1007F8&lt;br /&gt;
RAM:00000020   SUB     R1, R1, R0&lt;br /&gt;
RAM:00000024   LDR     R0, =0x40004C30&lt;br /&gt;
RAM:00000028   ADD     R0, R0, R1&lt;br /&gt;
RAM:0000002C   ADD     R2, R2, R0&lt;br /&gt;
RAM:00000030   ORR     R2, R2, #1&lt;br /&gt;
RAM:00000034   LDMFD   SP!, {R0,R1}&lt;br /&gt;
RAM:00000038   BX      R2&lt;br /&gt;
RAM:00000038 ; End of function irom_svc_dispatch&lt;br /&gt;
RAM:00000038&lt;br /&gt;
RAM:00000038 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000003C dword_3C DCD 0x1007B0                   ; DATA XREF: irom_svc_dispatch+18↑r&lt;br /&gt;
RAM:00000040 dword_40 DCD 0x1007F8                   ; DATA XREF: irom_svc_dispatch+1C↑r&lt;br /&gt;
RAM:00000044 dword_44 DCD 0x40004C30                 ; DATA XREF: irom_svc_dispatch+24↑r&lt;br /&gt;
RAM:00000048   CODE16&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 sub_48&lt;br /&gt;
RAM:00000048   MOVS    R2, #0                        ; 0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:0000004A   MVNS    R2, R2&lt;br /&gt;
RAM:0000004C   LDR     R1, =0x60006410&lt;br /&gt;
RAM:0000004E   STR     R2, [R1,#0x30]&lt;br /&gt;
RAM:00000050   STR     R2, [R1,#0x38]&lt;br /&gt;
RAM:00000052   LDR     R1, =0x600060F8&lt;br /&gt;
RAM:00000054   STR     R2, [R1]&lt;br /&gt;
RAM:00000056   STR     R2, [R1,#4]&lt;br /&gt;
RAM:00000058   LDR     R1, =0x60006284&lt;br /&gt;
RAM:0000005A   STR     R2, [R1]&lt;br /&gt;
RAM:0000005C   STR     R2, [R1,#0x18]&lt;br /&gt;
RAM:0000005E   ADDS    R1, #0x80&lt;br /&gt;
RAM:00000060   ADDS    R1, #0x1C&lt;br /&gt;
RAM:00000062   STR     R2, [R1]&lt;br /&gt;
RAM:00000064   STR     R2, [R1,#8]&lt;br /&gt;
RAM:00000066   STR     R2, [R1,#0x10]&lt;br /&gt;
RAM:00000068   ADDS    R1, #0x80&lt;br /&gt;
RAM:0000006A   STR     R2, [R1]&lt;br /&gt;
RAM:0000006C   STR     R2, [R1,#4]&lt;br /&gt;
RAM:0000006E   LDR     R1, =0x60006554&lt;br /&gt;
RAM:00000070   STR     R2, [R1]&lt;br /&gt;
RAM:00000072   MOVS    R2, #0xA0000000&lt;br /&gt;
RAM:00000076   LDR     R1, =0x60006148&lt;br /&gt;
RAM:00000078   STR     R2, [R1]&lt;br /&gt;
RAM:0000007A   ADDS    R1, #0x38 ; &#039;8&#039;&lt;br /&gt;
RAM:0000007C   STR     R2, [R1]&lt;br /&gt;
RAM:0000007E   MOVS    R2, #0xE0000000&lt;br /&gt;
RAM:00000082   LDR     R1, =0x600066A0&lt;br /&gt;
RAM:00000084   STR     R2, [R1]&lt;br /&gt;
RAM:00000086   MOVS    R1, #0&lt;br /&gt;
RAM:00000088   MOVS    R0, #0xE&lt;br /&gt;
RAM:0000008A   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000008A ; End of function sub_48&lt;br /&gt;
RAM:0000008A&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C sub_8C&lt;br /&gt;
RAM:0000008C   LDR     R0, [R1,#0x18]                ; 1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:0000008E   MOVS    R2, #1&lt;br /&gt;
RAM:00000090   ORRS    R0, R2&lt;br /&gt;
RAM:00000092   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:00000092 ; End of function sub_8C&lt;br /&gt;
RAM:00000092&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 sub_94&lt;br /&gt;
RAM:00000094   LDR     R2, [R4,#0x50]                ; 2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000096   ADDS    R2, R2, #2&lt;br /&gt;
RAM:00000098   STR     R2, [R4,#0x50]&lt;br /&gt;
RAM:0000009A   SUBS    R1, #0x80&lt;br /&gt;
RAM:0000009C   STR     R1, [R4,#0x34]&lt;br /&gt;
RAM:0000009E   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000009E ; End of function sub_94&lt;br /&gt;
RAM:0000009E&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 sub_A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; FUNCTION CHUNK AT RAM:00000148 SIZE 00000004 BYTES&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0   MOVS    R0, #0x70000000               ; 4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:000000A4   LDR     R6, =dword_7000EF14&lt;br /&gt;
RAM:000000A6   LDR     R2, =dword_7000E5B4&lt;br /&gt;
RAM:000000A8   LDR     R2, [R2]&lt;br /&gt;
RAM:000000AA   CMP     R2, #0&lt;br /&gt;
RAM:000000AC   BEQ     loc_B4&lt;br /&gt;
RAM:000000AE   LDR     R2, [R6]&lt;br /&gt;
RAM:000000B0   STR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B2   B       loc_BC&lt;br /&gt;
RAM:000000B4 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:000000B4&lt;br /&gt;
RAM:000000B4 loc_B4                                  ; CODE XREF: sub_A0+C↑j&lt;br /&gt;
RAM:000000B4   LDR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B6   LSRS    R0, R0, #0x12&lt;br /&gt;
RAM:000000B8   ORRS    R2, R0&lt;br /&gt;
RAM:000000BA   STR     R2, [R6]&lt;br /&gt;
RAM:000000BC&lt;br /&gt;
RAM:000000BC loc_BC                                  ; CODE XREF: sub_A0+12↑j&lt;br /&gt;
RAM:000000BC   LDR     R6, =dword_7000E9C0&lt;br /&gt;
RAM:000000BE   LDR     R0, [R6]&lt;br /&gt;
RAM:000000C0   MOVS    R2, #0x4000&lt;br /&gt;
RAM:000000C4   ORRS    R2, R0&lt;br /&gt;
RAM:000000C6   STR     R2, [R6]&lt;br /&gt;
RAM:000000C8   LDR     R0, [R5,#0x10]&lt;br /&gt;
RAM:000000CA   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000CA ; End of function sub_A0&lt;br /&gt;
RAM:000000CA&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC sub_CC&lt;br /&gt;
RAM:000000CC   MOVS    R2, #0xF000000                ; 5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:000000D0   BICS    R1, R2&lt;br /&gt;
RAM:000000D2   STR     R1, [R4,#0x10]&lt;br /&gt;
RAM:000000D4   LDR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000D6   MOVS    R2, #7&lt;br /&gt;
RAM:000000D8   BICS    R1, R2&lt;br /&gt;
RAM:000000DA   STR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000DC   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000DC ; End of function sub_CC&lt;br /&gt;
RAM:000000DC&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE sub_DE&lt;br /&gt;
RAM:000000DE   LDR     R2, =dword_7000FA9C           ; 6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:000000E0   LDR     R2, [R2]&lt;br /&gt;
RAM:000000E2   LSRS    R2, R2, #8&lt;br /&gt;
RAM:000000E4   LSLS    R2, R2, #1&lt;br /&gt;
RAM:000000E6   LDR     R1, [R4]&lt;br /&gt;
RAM:000000E8   BICS    R1, R2&lt;br /&gt;
RAM:000000EA   STR     R1, [R4]&lt;br /&gt;
RAM:000000EC   CMP     R0, #0&lt;br /&gt;
RAM:000000EE   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000EE ; End of function sub_DE&lt;br /&gt;
RAM:000000EE&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 sub_F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 arg_0=  0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0   LDR     R0, =0x400049F0               ; 7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:000000F2   LDR     R2, [R0]&lt;br /&gt;
RAM:000000F4   STR     R2, [SP,#arg_0]&lt;br /&gt;
RAM:000000F6   LDR     R0, =0x40010000&lt;br /&gt;
RAM:000000F8   LSRS    R2, R2, #17&lt;br /&gt;
RAM:000000FA   BEQ     pop_r2_mov_pc_lr              ; if ([0x400049F0] &amp;gt;&amp;gt; 17) == 0) {&lt;br /&gt;
RAM:000000FA                                         ;   r2 = [0x400049F0];&lt;br /&gt;
RAM:000000FA                                         ; } else {&lt;br /&gt;
RAM:000000FC   LDR     R0, =APBDEV_PMC_CNTRL_0&lt;br /&gt;
RAM:000000FE   STR     R4, [R0]                      ;  write APBDEV_PMC_CNTRL&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000100 loc_100                                 ; CODE XREF: sub_F0:loc_100↓j&lt;br /&gt;
RAM:00000100   B       loc_100                       ;  hang&lt;br /&gt;
RAM:00000100 ; End of function sub_F0                ; }&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 sub_102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 arg_0=  0&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102   LDR     R2, =0x40010220               ; 8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000104   STR     R2, [SP,#arg_0]               ; set r2 retval = [0x40010220]&lt;br /&gt;
RAM:00000106   LDR     R2, [R2,#0x18]&lt;br /&gt;
RAM:00000108   ADDS    R0, #0xFC&lt;br /&gt;
RAM:0000010A   STR     R2, [R0,#0x1C]                ; [r0+0x118] = [0x40010220 + 0x18]&lt;br /&gt;
RAM:0000010C   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000010C ; End of function sub_102&lt;br /&gt;
RAM:0000010C&lt;br /&gt;
RAM:0000010C ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000010E   DCB    0&lt;br /&gt;
RAM:0000010F   DCB    0&lt;br /&gt;
RAM:00000110 off_110 DCD 0x60006410                  ; DATA XREF: sub_48+4↑r&lt;br /&gt;
RAM:00000114 off_114 DCD 0x600060F8                  ; DATA XREF: sub_48+A↑r&lt;br /&gt;
RAM:00000118 off_118 DCD 0x60006284                  ; DATA XREF: sub_48+10↑r&lt;br /&gt;
RAM:0000011C off_11C DCD 0x60006554                  ; DATA XREF: sub_48+26↑r&lt;br /&gt;
RAM:00000120 off_120 DCD 0x60006148                  ; DATA XREF: sub_48+2E↑r&lt;br /&gt;
RAM:00000124 off_124 DCD 0x600066A0                  ; DATA XREF: sub_48+3A↑r&lt;br /&gt;
RAM:00000128 off_128 DCD dword_7000EF14              ; DATA XREF: sub_A0+4↑r&lt;br /&gt;
RAM:0000012C off_12C DCD dword_7000E5B4              ; DATA XREF: sub_A0+6↑r&lt;br /&gt;
RAM:00000130 off_130 DCD dword_7000E9C0              ; DATA XREF: sub_A0:loc_BC↑r&lt;br /&gt;
RAM:00000134 off_134 DCD dword_7000FA9C              ; DATA XREF: sub_DE↑r&lt;br /&gt;
RAM:00000138 off_138 DCD 0x400049F0                  ; DATA XREF: sub_F0↑r&lt;br /&gt;
RAM:0000013C dword_13C DCD 0x40010000                ; DATA XREF: sub_F0+6↑r&lt;br /&gt;
RAM:00000140 off_140 DCD APBDEV_PMC_CNTRL_0          ; DATA XREF: sub_F0+C↑r&lt;br /&gt;
RAM:00000144 off_144 DCD 0x40010220                  ; DATA XREF: sub_102↑r&lt;br /&gt;
RAM:00000148 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:00000148 ; START OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
RAM:00000148&lt;br /&gt;
RAM:00000148 pop_r2_mov_pc_lr                        ; CODE XREF: sub_48+42↑j&lt;br /&gt;
RAM:00000148                                         ; sub_8C+6↑j ...&lt;br /&gt;
RAM:00000148   POP     {R2}&lt;br /&gt;
RAM:0000014A   MOV     PC, LR&lt;br /&gt;
RAM:0000014A ; END OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last 4 patches are exclusive to the Switch, while the remaining ones are often included in most Tegra210 based devices.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 0 ====&lt;br /&gt;
This patch configures clock enables and clock gate overrides for new hardware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 CLK_ENB_H_SET = 0x60006328;&lt;br /&gt;
 u32 CLK_ENB_L_SET = 0x60006320;&lt;br /&gt;
 u32 CLK_ENB_U_SET = 0x60006330; &lt;br /&gt;
 u32 CLK_ENB_V_SET = 0x60006440;&lt;br /&gt;
 u32 CLK_ENB_W_SET = 0x60006448;&lt;br /&gt;
 u32 CLK_ENB_X_SET = 0x60006284;&lt;br /&gt;
 u32 CLK_ENB_Y_SET = 0x6000629C;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRA = 0x600060F8;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRB = 0x600060FC;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRC = 0x600063A0;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRD = 0x600063A4;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRE = 0x60006554;&lt;br /&gt;
 u32 CLK_SOURCE_VI = 0x60006148;&lt;br /&gt;
 u32 CLK_SOURCE_HOST1X = 0x60006180;&lt;br /&gt;
 u32 CLK_SOURCE_NVENC = 0x600066A0; &lt;br /&gt;
&lt;br /&gt;
 // Set all clock enables and overrides&lt;br /&gt;
 *(u32 *)CLK_ENB_V_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_W_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRA = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRB = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_X_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_Y_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_L_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_H_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_U_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRC = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRD = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRE = 0xFFFFFFFF;&lt;br /&gt;
&lt;br /&gt;
 // Set VI, HOST1X and NVENC clock sources to CLK_M&lt;br /&gt;
 *(u32 *)CLK_SOURCE_VI = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_HOST1X = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_NVENC = 0xE0000000;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
&lt;br /&gt;
     MOVS    R1, #0&lt;br /&gt;
     MOVS    R0, #0xE&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 1 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
LP0 resume code expects APBDEV_PMC_SCRATCH190_0 to be set to 0x01, but the bootrom didn&#039;t set it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH190_0 = 0x7000EC18;&lt;br /&gt;
 u32 pmc_scratch190_val = *(u32 *)APBDEV_PMC_SCRATCH190_0;&lt;br /&gt;
 &lt;br /&gt;
 return (pmc_scratch190_val | 0x01);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 2 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_SPARE_CFG0_0 = 0x7D000834;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
 &lt;br /&gt;
 // Increase UTMIP_HSSQUELCH_LEVEL_NEW by 0x02&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 += 0x02;&lt;br /&gt;
&lt;br /&gt;
 // Clear FUSE_HS_IREF_CAP_CFG&lt;br /&gt;
 *(u32 *)USB1_UTMIP_SPARE_CFG0_0 = ((*(u32 *)USB1_UTMIP_SPARE_CFG0_0 &amp;amp; ~(0x118)) - 0x80);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 3 ====&lt;br /&gt;
This patch pertains to XHCI IRQ clearing checks and forces a result code to be 0.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 4 ====&lt;br /&gt;
This patch allows backing up and restoring strapping options for warmboot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH0_0 = 0x7000E450;&lt;br /&gt;
 u32 APBDEV_PMC_RST_STATUS_0 = 0x7000E5B4;&lt;br /&gt;
 u32 APBDEV_PMC_SEC_DISABLE8_0 = 0x7000E9C0;&lt;br /&gt;
 u32 APBDEV_PMC_SECURE_SCRATCH111_0 = 0x7000EF14;&lt;br /&gt;
 u32 APB_MISC_PP_STRAPPING_OPT_A_0 = 0x70000008; &lt;br /&gt;
&lt;br /&gt;
 u32 reset_status = *(u32 *)APBDEV_PMC_RST_STATUS_0;&lt;br /&gt;
&lt;br /&gt;
 // Check for regular power on&lt;br /&gt;
 if (reset_status == 0)&lt;br /&gt;
 {    &lt;br /&gt;
     // Set all buttons in RCM_STRAPS and backup to PMC scratch&lt;br /&gt;
     *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0 = (*(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 | 0x1C00);&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
     // Restore strapping options from PMC scratch&lt;br /&gt;
     *(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 = *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // Disable write access to APBDEV_PMC_SECURE_SCRATCH111_0&lt;br /&gt;
 *(u32 *)APBDEV_PMC_SEC_DISABLE8_0 |= 0x4000;&lt;br /&gt;
 &lt;br /&gt;
 return *(u32 *)APBDEV_PMC_SCRATCH0_0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 5 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_HSRX_CFG0_0 = 0x7D000810;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
&lt;br /&gt;
 // Clear UTMIP_IDLE_WAIT, UTMIP_ELASTIC_LIMIT and UTMIP_PCOUNT_UPDN_DIV,&lt;br /&gt;
 // and set UTMIP_IDLE_WAIT to 0x11 and UTMIP_ELASTIC_LIMIT to 0x10 &lt;br /&gt;
 *(u32 *)USB1_UTMIP_HSRX_CFG0_0 = ((*(u32 *)USB1_UTMIP_HSRX_CFG0_0 &amp;amp; ~(0xF8000) + 0x88000 &amp;amp; ~(0x7C00) + 0x4000) &amp;amp; ~(0xF000000));&lt;br /&gt;
 &lt;br /&gt;
 // Clear UTMIP_HSSQUELCH_LEVEL_NEW&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 &amp;amp;= ~(0x07);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 6 ====&lt;br /&gt;
This patch is a factory backdoor.&lt;br /&gt;
&lt;br /&gt;
It allows controlling the debug authentication configuration using a fuse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 FUSE_DEBUG_AUTH_OVERRIDE = 0x7000FA9C;&lt;br /&gt;
&lt;br /&gt;
 u32 debug_auth_override_val = *(u32 *)FUSE_DEBUG_AUTH_OVERRIDE;&lt;br /&gt;
 debug_auth_override_val = ((debug_auth_override_val &amp;gt;&amp;gt; 0x08) &amp;lt;&amp;lt; 0x01);&lt;br /&gt;
&lt;br /&gt;
 // Override debug authentication value stored in IRAM&lt;br /&gt;
 *(u32 *)0x400028E4 &amp;amp;= ~(debug_auth_override_val);&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     CMP     R0, #0&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 7 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It prevents overflowing IRAM (0x40010000) when copying the warmboot binary from DRAM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_CNTRL_0 = 0x7000E400;&lt;br /&gt;
 &lt;br /&gt;
 u32 warmboot_header_addr = 0x400049F0;&lt;br /&gt;
 u32 warmboot_bin_size = *(u32 *)warmboot_bin_header_addr;&lt;br /&gt;
 &lt;br /&gt;
 // Invalid warmboot binary size&lt;br /&gt;
 if (warmboot_size &amp;gt;&amp;gt; 0x11)&lt;br /&gt;
 {&lt;br /&gt;
     // Assert MAIN_RST&lt;br /&gt;
     // 0x40004BF0 comes from R4 and the bootrom doesn&#039;t bother to change it&lt;br /&gt;
     *(u32 *)APBDEV_PMC_CNTRL_0 = 0x40004BF0;&lt;br /&gt;
&lt;br /&gt;
     // Deadlock&lt;br /&gt;
     while(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R0, =0x40010000&lt;br /&gt;
     LDR     R2, [warmboot_bin_header_addr]&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 8 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It sets the correct warmboot binary entrypoint address for RSA signature verification, which would be done in DRAM instead of IRAM without this patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 warmboot_addr_ptr = 0x40010238;&lt;br /&gt;
 u32 warmboot_entry_addr_ptr = 0x40004C28;&lt;br /&gt;
&lt;br /&gt;
 *(u32 *)warmboot_entry_addr_ptr = *(u32 *)warmboot_addr_ptr;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R2, [warmboot_addr_ptr]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatches 9 and 10 ====&lt;br /&gt;
These patches modify the 256-bit Secure Provisioning AES key with index 0x3A.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 11 ====&lt;br /&gt;
This patch pertains to the [[Security_Engine|Security Engine]] context restore process and forces SE_OPERATION_UNK1 to be 0x01.&lt;br /&gt;
&lt;br /&gt;
== Anti-downgrade ==&lt;br /&gt;
The first bootloader verifies [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]] to prevent downgrading.&lt;br /&gt;
How many fuses are expected to be burnt depends the device&#039;s unit type as below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1-3.0.2&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0-4.1.0&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0-5.1.0&lt;br /&gt;
| 6&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0-6.1.0&lt;br /&gt;
| 7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.2.0&lt;br /&gt;
| 8&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If too many fuses are burnt the bootloader will panic immediately.&lt;br /&gt;
&lt;br /&gt;
If too few are burnt, the bootloader will enable fuse programming and write the expected value to fuse indexes 0x3A and 0x3C. Afterwards, fuse programming is disabled and the panic value 0x21 is written to PMC_SCRATCH200 register (0x7000EC40). Finally, the watchdog timer is initialized and programmed to force a reset.&lt;br /&gt;
&lt;br /&gt;
On a subsequent boot, after the anti-downgrade fuses are checked again, the PMC_RST_STATUS register (0x7000E5B4) is checked and if set to 0x01 (watchdog reset) the PMC_SCRATCH200 register (0x7000EC40) will be checked for the panic value 0x21.&lt;br /&gt;
PMC_RST_STATUS will only be set back to 0 (power on reset) if the fuse count matches the new expected value, otherwise the system will panic.&lt;/div&gt;</summary>
		<author><name>Lacius</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Fuses&amp;diff=5516</id>
		<title>Fuses</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Fuses&amp;diff=5516"/>
		<updated>2018-11-10T16:22:50Z</updated>

		<summary type="html">&lt;p&gt;Lacius: update for 6.1.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch makes use of Tegra&#039;s fuse driver for a number of operations. This driver is mapped to physical address 0x7000F800 with a total size of 0x400 bytes and exposes several registers for fuse programming.&lt;br /&gt;
&lt;br /&gt;
Registers from 0x7000F800 to 0x7000F800 + 0xFF can be used to directly program the hardware fuse array, while registers from 0x7000F800 + 0x100 (FUSE_CHIP_REG_START_OFFSET) to 0x7000F800 + 0x3FC (FUSE_CHIP_REG_END_OFFSET) represent cached values read from certain fuses.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Below is a list of fuse driver registers used by the Switch&#039;s bootloaders.&lt;br /&gt;
&lt;br /&gt;
=== Driver registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_CTRL|FUSE_CTRL]]&lt;br /&gt;
| 0x7000F800&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_ADDR|FUSE_REG_ADDR]]&lt;br /&gt;
| 0x7000F804&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_READ|FUSE_REG_READ]]&lt;br /&gt;
| 0x7000F808&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_WRITE|FUSE_REG_WRITE]]&lt;br /&gt;
| 0x7000F80C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD1&lt;br /&gt;
| 0x7000F810&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD2&lt;br /&gt;
| 0x7000F814&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_PGM1&lt;br /&gt;
| 0x7000F818&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_TIME_PGM2|FUSE_TIME_PGM2]]&lt;br /&gt;
| 0x7000F81C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIV2INTFC&lt;br /&gt;
| 0x7000F820&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FUSEBYPASS&lt;br /&gt;
| 0x7000F824&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATEKEYDISABLE&lt;br /&gt;
| 0x7000F828&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_DIS_PGM|FUSE_DIS_PGM]]&lt;br /&gt;
| 0x7000F82C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_WRITE_ACCESS|FUSE_WRITE_ACCESS]]&lt;br /&gt;
| 0x7000F830&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PWR_GOOD_SW&lt;br /&gt;
| 0x7000F834&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_CTRL ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Fuse command (1 = FUSE_READ; 2 = FUSE_WRITE; 3 = FUSE_SENSE)&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| Fuse power down mode flag (FUSE_CTRL_PD)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before fuse reading/writing the power down mode must be disabled.&lt;br /&gt;
FUSE_SENSE mode flushes programmed values into the [[Fuses#Cache_registers|cache registers]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_ADDR ====&lt;br /&gt;
This register takes the address of the fuse to be read/written/sensed.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_READ ====&lt;br /&gt;
This register receives the value read from the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_WRITE ====&lt;br /&gt;
This register takes the value to be written to the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_TIME_PGM2 ====&lt;br /&gt;
This register takes the fuse programming pulse (0xC0 == 19200 kHz).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_DIS_PGM ====&lt;br /&gt;
If set to 0x01, this register disables fuse programming.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_WRITE_ACCESS ====&lt;br /&gt;
If set to 0x01, this register disables software writes to the fuse driver registers.&lt;br /&gt;
&lt;br /&gt;
=== Cache registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MODE&lt;br /&gt;
| 0x7000F900&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SKU_INFO|FUSE_SKU_INFO]]&lt;br /&gt;
| 0x7000F910&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_0&lt;br /&gt;
| 0x7000F914&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_IDDQ&lt;br /&gt;
| 0x7000F918&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FT_REV&lt;br /&gt;
| 0x7000F928&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_1&lt;br /&gt;
| 0x7000F92C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_2&lt;br /&gt;
| 0x7000F930&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_0&lt;br /&gt;
| 0x7000F934&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SOC_SPEEDO_1|FUSE_SOC_SPEEDO_1]]&lt;br /&gt;
| 0x7000F938&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_2&lt;br /&gt;
| 0x7000F93C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_IDDQ&lt;br /&gt;
| 0x7000F940&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FA|FUSE_FA]]&lt;br /&gt;
| 0x7000F948&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY0]]&lt;br /&gt;
| 0x7000F964&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY1]]&lt;br /&gt;
| 0x7000F968&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY2]]&lt;br /&gt;
| 0x7000F96C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY3]]&lt;br /&gt;
| 0x7000F970&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY4]]&lt;br /&gt;
| 0x7000F974&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY5]]&lt;br /&gt;
| 0x7000F978&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY6]]&lt;br /&gt;
| 0x7000F97C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY7]]&lt;br /&gt;
| 0x7000F980&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_1&lt;br /&gt;
| 0x7000F984&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_2&lt;br /&gt;
| 0x7000F988&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CP_REV&lt;br /&gt;
| 0x7000F990&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_0&lt;br /&gt;
| 0x7000F998&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FIRST_BOOTROM_PATCH_SIZE_REG&lt;br /&gt;
| 0x7000F99C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURITY_MODE&lt;br /&gt;
| 0x7000F9A0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY0]]&lt;br /&gt;
| 0x7000F9A4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY1]]&lt;br /&gt;
| 0x7000F9A8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY2]]&lt;br /&gt;
| 0x7000F9AC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY3]]&lt;br /&gt;
| 0x7000F9B0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY4]]&lt;br /&gt;
| 0x7000F9B4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_BOOT_DEVICE_INFO&lt;br /&gt;
| 0x7000F9BC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_SW|FUSE_RESERVED_SW]]&lt;br /&gt;
| 0x7000F9C0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VP8_ENABLE&lt;br /&gt;
| 0x7000F9C4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]]&lt;br /&gt;
| 0x7000F9C8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]]&lt;br /&gt;
| 0x7000F9CC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]]&lt;br /&gt;
| 0x7000F9D0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM3|FUSE_RESERVED_ODM3]]&lt;br /&gt;
| 0x7000F9D4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]&lt;br /&gt;
| 0x7000F9D8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_ODM5&lt;br /&gt;
| 0x7000F9DC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]]&lt;br /&gt;
| 0x7000F9E0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]]&lt;br /&gt;
| 0x7000F9E4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_USB_CALIB&lt;br /&gt;
| 0x7000F9F0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_DIRECT_CONFIG&lt;br /&gt;
| 0x7000F9F4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VENDOR_CODE&lt;br /&gt;
| 0x7000FA00&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FAB_CODE&lt;br /&gt;
| 0x7000FA04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_0&lt;br /&gt;
| 0x7000FA08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_1&lt;br /&gt;
| 0x7000FA0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_WAFER_ID&lt;br /&gt;
| 0x7000FA10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_X_COORDINATE&lt;br /&gt;
| 0x7000FA14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_Y_COORDINATE&lt;br /&gt;
| 0x7000FA18&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SATA_CALIB&lt;br /&gt;
| 0x7000FA24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GPU_IDDQ&lt;br /&gt;
| 0x7000FA28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_3&lt;br /&gt;
| 0x7000FA2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SUBREVISION&lt;br /&gt;
| 0x7000FA48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_4&lt;br /&gt;
| 0x7000FA54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_5&lt;br /&gt;
| 0x7000FA58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_6&lt;br /&gt;
| 0x7000FA5C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_7&lt;br /&gt;
| 0x7000FA60&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_PRIV_SEC_DIS&lt;br /&gt;
| 0x7000FA64&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PKC_DISABLE|FUSE_PKC_DISABLE]]&lt;br /&gt;
| 0x7000FA68&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_COMMON&lt;br /&gt;
| 0x7000FA80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DEBUG_AUTH_OVERRIDE&lt;br /&gt;
| 0x7000FA9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_8&lt;br /&gt;
| 0x7000FAD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INDEX&lt;br /&gt;
| 0x7000FAE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB&lt;br /&gt;
| 0x7000FB04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC0_DISABLE&lt;br /&gt;
| 0x7000FB0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_9&lt;br /&gt;
| 0x7000FB1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_GPU_TPC1_DISABLE&lt;br /&gt;
| 0x7000FB3C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB_EXT&lt;br /&gt;
| 0x7000FB50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_0&lt;br /&gt;
| 0x7000FB80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_1&lt;br /&gt;
| 0x7000FB84&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_2|FUSE_SPARE_BIT_2]]&lt;br /&gt;
| 0x7000FB88&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_3|FUSE_SPARE_BIT_3]]&lt;br /&gt;
| 0x7000FB8C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_4|FUSE_SPARE_BIT_4]]&lt;br /&gt;
| 0x7000FB90&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_5|FUSE_SPARE_BIT_5]]&lt;br /&gt;
| 0x7000FB94&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_6&lt;br /&gt;
| 0x7000FB98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_7&lt;br /&gt;
| 0x7000FB9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_8&lt;br /&gt;
| 0x7000FBA0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_9&lt;br /&gt;
| 0x7000FBA4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_10&lt;br /&gt;
| 0x7000FBA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_11&lt;br /&gt;
| 0x7000FBAC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_12&lt;br /&gt;
| 0x7000FBB0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_13&lt;br /&gt;
| 0x7000FBB4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_14&lt;br /&gt;
| 0x7000FBB8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_15&lt;br /&gt;
| 0x7000FBBC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_16&lt;br /&gt;
| 0x7000FBC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_17&lt;br /&gt;
| 0x7000FBC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_18&lt;br /&gt;
| 0x7000FBC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_19&lt;br /&gt;
| 0x7000FBCC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_20&lt;br /&gt;
| 0x7000FBD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_21&lt;br /&gt;
| 0x7000FBD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_22&lt;br /&gt;
| 0x7000FBD8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_23&lt;br /&gt;
| 0x7000FBDC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_24&lt;br /&gt;
| 0x7000FBE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_25&lt;br /&gt;
| 0x7000FBE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_26&lt;br /&gt;
| 0x7000FBE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_27&lt;br /&gt;
| 0x7000FBEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_28&lt;br /&gt;
| 0x7000FBF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_29&lt;br /&gt;
| 0x7000FBF4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_30&lt;br /&gt;
| 0x7000FBF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_31&lt;br /&gt;
| 0x7000FBFC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SKU_INFO ====&lt;br /&gt;
Stores the SKU ID (must be 0x83).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FA ====&lt;br /&gt;
Stores failure analysis mode.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SOC_SPEEDO_1 ====&lt;br /&gt;
Stores the bootrom patch version.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM0 ====&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM1 ====&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| [5.0.0+] Used as key generation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM3 ====&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Unit type (3 = debug; 0 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown config (must be 1 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-3.0.2] 3-5&lt;br /&gt;
[4.0.0+] 3-7&lt;br /&gt;
| DRAM id&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown config mask (must be 0 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Unit type mask (0 = debug; 1 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [3.0.0+] Kiosk mode (0 = retail; 1 = kiosk)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [5.0.0+] SoC variant (0 = T210; 1 = T214)&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| [4.0.0+] New unit type&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This stores some device configuration parameters.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM6 ====&lt;br /&gt;
This register returns the value programmed into index 0x3A of the fuse array. &lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM7 ====&lt;br /&gt;
This register returns the value programmed into index 0x3C of the fuse array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_2 ====&lt;br /&gt;
Stores part of the speedo fusing revision.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_3 ====&lt;br /&gt;
Stores part of the speedo fusing revision.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_4 ====&lt;br /&gt;
Stores part of the speedo fusing revision.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_5 ====&lt;br /&gt;
Must be non-zero on retail units, otherwise the first bootloader panics.&lt;br /&gt;
On debug units it can be zero, which tells the bootloader to choose from two debug master key seeds. If set to non-zero on a debug unit, it tells the bootloader to choose from two retail master key seeds (only the last one matches the retail master key seed).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY ====&lt;br /&gt;
This stores the 160-bit private key (128 bit SBK + 32-bit device key).&lt;br /&gt;
Reads to these registers after the SBK is locked out produce all-FF output.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PUBLIC_KEY ====&lt;br /&gt;
This stores the SHA256 hash of the 2048-bit RSA key expected at BCT+0x210.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Boot device&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Skip device selection straps (0 = don&#039;t skip; 1 = skip)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ENABLE_CHARGER_DETECT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ENABLE_WATCHDOG&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Forced RCM two button mode (0 = Only VOLUME_UP; 1 = VOLUME_UP + HOME)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| RCM USB controller mode (0 = USB 2.0; 1 = XUSB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This caches the value of the sw_reserved fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PKC_DISABLE ====&lt;br /&gt;
This caches the value of the pkc_disable fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
== eFuses ==&lt;br /&gt;
The actual hardware fuses can be programmed through the fuse driver after enabling fuse programming.&lt;br /&gt;
&lt;br /&gt;
Below is a list of common fuse indexes used by Tegra devices (and applicable to the Switch).&lt;br /&gt;
Note that the indexes are relative to the start of the fuse array and each element is a 4 byte word. A single fuse write operation always writes the same word at both fuse_array + 0 (PRIMARY_ALIAS) and fuse_array + 1 (REDUNDANT_ALIAS).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Index&lt;br /&gt;
!  Bits&lt;br /&gt;
|-&lt;br /&gt;
| jtag_disable&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_production_mode&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_lock&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| public_key&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| secure_boot_key&lt;br /&gt;
| 0x22&lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| device_key&lt;br /&gt;
| 0x2A&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_cfg&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_sel&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| sw_reserved&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| ignore_dev_sel_straps&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#odm_reserved|odm_reserved]]&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| pkc_disable&lt;br /&gt;
| 0x52&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#bootrom_ipatch|bootrom_ipatch]]&lt;br /&gt;
| 0x72&lt;br /&gt;
| 624&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== odm_reserved ===&lt;br /&gt;
The first bootloader only burns fuses in this region.&lt;br /&gt;
Both fuse indexes 0x3A (odm_reserved + 0x0C) and 0x3C (odm_reserved + 0x0E) are used for anti-downgrade control. These fuses will have their values cached into [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]] and [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]].&lt;br /&gt;
&lt;br /&gt;
=== bootrom_ipatch ===&lt;br /&gt;
Tegra210 based hardware such as the Switch provides support for bootrom patches. The patch data is burned to the hardware fuse array using a specific format (see [https://gist.github.com/shuffle2/f8728159da100e9df2606d43925de0af shuffle2&#039;s ipatch decoder]). The bootrom reads these fuses in order to initialize the IPATCH hardware, which allows overriding data returned for code and data fetches done by BPMP. The revision stored in FUSE_CP_REV indicates the unique set of values stored in ipatch fuses.&lt;br /&gt;
&lt;br /&gt;
The following represents the patch data dumped from a Switch console:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
RAM:00000000 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000 irom_svc_dispatch&lt;br /&gt;
RAM:00000000   STMFD   SP!, {R0-R2}                  ; ipatches:&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 7d9e2000     fb3c     2000 : movs r0, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000004   MOV     R2, LR&lt;br /&gt;
RAM:00000008   SUB     R2, R2, #2&lt;br /&gt;
RAM:0000000C   LDR     R2, [R2]&lt;br /&gt;
RAM:00000010   AND     R2, R2, #0xFF&lt;br /&gt;
RAM:00000014   MOV     R2, R2,LSL#1&lt;br /&gt;
RAM:00000018   LDR     R0, =0x1007B0&lt;br /&gt;
RAM:0000001C   LDR     R1, =0x1007F8&lt;br /&gt;
RAM:00000020   SUB     R1, R1, R0&lt;br /&gt;
RAM:00000024   LDR     R0, =0x40004C30&lt;br /&gt;
RAM:00000028   ADD     R0, R0, R1&lt;br /&gt;
RAM:0000002C   ADD     R2, R2, R0&lt;br /&gt;
RAM:00000030   ORR     R2, R2, #1&lt;br /&gt;
RAM:00000034   LDMFD   SP!, {R0,R1}&lt;br /&gt;
RAM:00000038   BX      R2&lt;br /&gt;
RAM:00000038 ; End of function irom_svc_dispatch&lt;br /&gt;
RAM:00000038&lt;br /&gt;
RAM:00000038 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000003C dword_3C DCD 0x1007B0                   ; DATA XREF: irom_svc_dispatch+18↑r&lt;br /&gt;
RAM:00000040 dword_40 DCD 0x1007F8                   ; DATA XREF: irom_svc_dispatch+1C↑r&lt;br /&gt;
RAM:00000044 dword_44 DCD 0x40004C30                 ; DATA XREF: irom_svc_dispatch+24↑r&lt;br /&gt;
RAM:00000048   CODE16&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 sub_48&lt;br /&gt;
RAM:00000048   MOVS    R2, #0                        ; 0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:0000004A   MVNS    R2, R2&lt;br /&gt;
RAM:0000004C   LDR     R1, =0x60006410&lt;br /&gt;
RAM:0000004E   STR     R2, [R1,#0x30]&lt;br /&gt;
RAM:00000050   STR     R2, [R1,#0x38]&lt;br /&gt;
RAM:00000052   LDR     R1, =0x600060F8&lt;br /&gt;
RAM:00000054   STR     R2, [R1]&lt;br /&gt;
RAM:00000056   STR     R2, [R1,#4]&lt;br /&gt;
RAM:00000058   LDR     R1, =0x60006284&lt;br /&gt;
RAM:0000005A   STR     R2, [R1]&lt;br /&gt;
RAM:0000005C   STR     R2, [R1,#0x18]&lt;br /&gt;
RAM:0000005E   ADDS    R1, #0x80&lt;br /&gt;
RAM:00000060   ADDS    R1, #0x1C&lt;br /&gt;
RAM:00000062   STR     R2, [R1]&lt;br /&gt;
RAM:00000064   STR     R2, [R1,#8]&lt;br /&gt;
RAM:00000066   STR     R2, [R1,#0x10]&lt;br /&gt;
RAM:00000068   ADDS    R1, #0x80&lt;br /&gt;
RAM:0000006A   STR     R2, [R1]&lt;br /&gt;
RAM:0000006C   STR     R2, [R1,#4]&lt;br /&gt;
RAM:0000006E   LDR     R1, =0x60006554&lt;br /&gt;
RAM:00000070   STR     R2, [R1]&lt;br /&gt;
RAM:00000072   MOVS    R2, #0xA0000000&lt;br /&gt;
RAM:00000076   LDR     R1, =0x60006148&lt;br /&gt;
RAM:00000078   STR     R2, [R1]&lt;br /&gt;
RAM:0000007A   ADDS    R1, #0x38 ; &#039;8&#039;&lt;br /&gt;
RAM:0000007C   STR     R2, [R1]&lt;br /&gt;
RAM:0000007E   MOVS    R2, #0xE0000000&lt;br /&gt;
RAM:00000082   LDR     R1, =0x600066A0&lt;br /&gt;
RAM:00000084   STR     R2, [R1]&lt;br /&gt;
RAM:00000086   MOVS    R1, #0&lt;br /&gt;
RAM:00000088   MOVS    R0, #0xE&lt;br /&gt;
RAM:0000008A   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000008A ; End of function sub_48&lt;br /&gt;
RAM:0000008A&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C sub_8C&lt;br /&gt;
RAM:0000008C   LDR     R0, [R1,#0x18]                ; 1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:0000008E   MOVS    R2, #1&lt;br /&gt;
RAM:00000090   ORRS    R0, R2&lt;br /&gt;
RAM:00000092   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:00000092 ; End of function sub_8C&lt;br /&gt;
RAM:00000092&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 sub_94&lt;br /&gt;
RAM:00000094   LDR     R2, [R4,#0x50]                ; 2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000096   ADDS    R2, R2, #2&lt;br /&gt;
RAM:00000098   STR     R2, [R4,#0x50]&lt;br /&gt;
RAM:0000009A   SUBS    R1, #0x80&lt;br /&gt;
RAM:0000009C   STR     R1, [R4,#0x34]&lt;br /&gt;
RAM:0000009E   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000009E ; End of function sub_94&lt;br /&gt;
RAM:0000009E&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 sub_A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; FUNCTION CHUNK AT RAM:00000148 SIZE 00000004 BYTES&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0   MOVS    R0, #0x70000000               ; 4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:000000A4   LDR     R6, =dword_7000EF14&lt;br /&gt;
RAM:000000A6   LDR     R2, =dword_7000E5B4&lt;br /&gt;
RAM:000000A8   LDR     R2, [R2]&lt;br /&gt;
RAM:000000AA   CMP     R2, #0&lt;br /&gt;
RAM:000000AC   BEQ     loc_B4&lt;br /&gt;
RAM:000000AE   LDR     R2, [R6]&lt;br /&gt;
RAM:000000B0   STR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B2   B       loc_BC&lt;br /&gt;
RAM:000000B4 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:000000B4&lt;br /&gt;
RAM:000000B4 loc_B4                                  ; CODE XREF: sub_A0+C↑j&lt;br /&gt;
RAM:000000B4   LDR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B6   LSRS    R0, R0, #0x12&lt;br /&gt;
RAM:000000B8   ORRS    R2, R0&lt;br /&gt;
RAM:000000BA   STR     R2, [R6]&lt;br /&gt;
RAM:000000BC&lt;br /&gt;
RAM:000000BC loc_BC                                  ; CODE XREF: sub_A0+12↑j&lt;br /&gt;
RAM:000000BC   LDR     R6, =dword_7000E9C0&lt;br /&gt;
RAM:000000BE   LDR     R0, [R6]&lt;br /&gt;
RAM:000000C0   MOVS    R2, #0x4000&lt;br /&gt;
RAM:000000C4   ORRS    R2, R0&lt;br /&gt;
RAM:000000C6   STR     R2, [R6]&lt;br /&gt;
RAM:000000C8   LDR     R0, [R5,#0x10]&lt;br /&gt;
RAM:000000CA   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000CA ; End of function sub_A0&lt;br /&gt;
RAM:000000CA&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC sub_CC&lt;br /&gt;
RAM:000000CC   MOVS    R2, #0xF000000                ; 5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:000000D0   BICS    R1, R2&lt;br /&gt;
RAM:000000D2   STR     R1, [R4,#0x10]&lt;br /&gt;
RAM:000000D4   LDR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000D6   MOVS    R2, #7&lt;br /&gt;
RAM:000000D8   BICS    R1, R2&lt;br /&gt;
RAM:000000DA   STR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000DC   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000DC ; End of function sub_CC&lt;br /&gt;
RAM:000000DC&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE sub_DE&lt;br /&gt;
RAM:000000DE   LDR     R2, =dword_7000FA9C           ; 6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:000000E0   LDR     R2, [R2]&lt;br /&gt;
RAM:000000E2   LSRS    R2, R2, #8&lt;br /&gt;
RAM:000000E4   LSLS    R2, R2, #1&lt;br /&gt;
RAM:000000E6   LDR     R1, [R4]&lt;br /&gt;
RAM:000000E8   BICS    R1, R2&lt;br /&gt;
RAM:000000EA   STR     R1, [R4]&lt;br /&gt;
RAM:000000EC   CMP     R0, #0&lt;br /&gt;
RAM:000000EE   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000EE ; End of function sub_DE&lt;br /&gt;
RAM:000000EE&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 sub_F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 arg_0=  0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0   LDR     R0, =0x400049F0               ; 7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:000000F2   LDR     R2, [R0]&lt;br /&gt;
RAM:000000F4   STR     R2, [SP,#arg_0]&lt;br /&gt;
RAM:000000F6   LDR     R0, =0x40010000&lt;br /&gt;
RAM:000000F8   LSRS    R2, R2, #17&lt;br /&gt;
RAM:000000FA   BEQ     pop_r2_mov_pc_lr              ; if ([0x400049F0] &amp;gt;&amp;gt; 17) == 0) {&lt;br /&gt;
RAM:000000FA                                         ;   r2 = [0x400049F0];&lt;br /&gt;
RAM:000000FA                                         ; } else {&lt;br /&gt;
RAM:000000FC   LDR     R0, =APBDEV_PMC_CNTRL_0&lt;br /&gt;
RAM:000000FE   STR     R4, [R0]                      ;  write APBDEV_PMC_CNTRL&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000100 loc_100                                 ; CODE XREF: sub_F0:loc_100↓j&lt;br /&gt;
RAM:00000100   B       loc_100                       ;  hang&lt;br /&gt;
RAM:00000100 ; End of function sub_F0                ; }&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 sub_102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 arg_0=  0&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102   LDR     R2, =0x40010220               ; 8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000104   STR     R2, [SP,#arg_0]               ; set r2 retval = [0x40010220]&lt;br /&gt;
RAM:00000106   LDR     R2, [R2,#0x18]&lt;br /&gt;
RAM:00000108   ADDS    R0, #0xFC&lt;br /&gt;
RAM:0000010A   STR     R2, [R0,#0x1C]                ; [r0+0x118] = [0x40010220 + 0x18]&lt;br /&gt;
RAM:0000010C   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000010C ; End of function sub_102&lt;br /&gt;
RAM:0000010C&lt;br /&gt;
RAM:0000010C ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000010E   DCB    0&lt;br /&gt;
RAM:0000010F   DCB    0&lt;br /&gt;
RAM:00000110 off_110 DCD 0x60006410                  ; DATA XREF: sub_48+4↑r&lt;br /&gt;
RAM:00000114 off_114 DCD 0x600060F8                  ; DATA XREF: sub_48+A↑r&lt;br /&gt;
RAM:00000118 off_118 DCD 0x60006284                  ; DATA XREF: sub_48+10↑r&lt;br /&gt;
RAM:0000011C off_11C DCD 0x60006554                  ; DATA XREF: sub_48+26↑r&lt;br /&gt;
RAM:00000120 off_120 DCD 0x60006148                  ; DATA XREF: sub_48+2E↑r&lt;br /&gt;
RAM:00000124 off_124 DCD 0x600066A0                  ; DATA XREF: sub_48+3A↑r&lt;br /&gt;
RAM:00000128 off_128 DCD dword_7000EF14              ; DATA XREF: sub_A0+4↑r&lt;br /&gt;
RAM:0000012C off_12C DCD dword_7000E5B4              ; DATA XREF: sub_A0+6↑r&lt;br /&gt;
RAM:00000130 off_130 DCD dword_7000E9C0              ; DATA XREF: sub_A0:loc_BC↑r&lt;br /&gt;
RAM:00000134 off_134 DCD dword_7000FA9C              ; DATA XREF: sub_DE↑r&lt;br /&gt;
RAM:00000138 off_138 DCD 0x400049F0                  ; DATA XREF: sub_F0↑r&lt;br /&gt;
RAM:0000013C dword_13C DCD 0x40010000                ; DATA XREF: sub_F0+6↑r&lt;br /&gt;
RAM:00000140 off_140 DCD APBDEV_PMC_CNTRL_0          ; DATA XREF: sub_F0+C↑r&lt;br /&gt;
RAM:00000144 off_144 DCD 0x40010220                  ; DATA XREF: sub_102↑r&lt;br /&gt;
RAM:00000148 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:00000148 ; START OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
RAM:00000148&lt;br /&gt;
RAM:00000148 pop_r2_mov_pc_lr                        ; CODE XREF: sub_48+42↑j&lt;br /&gt;
RAM:00000148                                         ; sub_8C+6↑j ...&lt;br /&gt;
RAM:00000148   POP     {R2}&lt;br /&gt;
RAM:0000014A   MOV     PC, LR&lt;br /&gt;
RAM:0000014A ; END OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last 4 patches are exclusive to the Switch, while the remaining ones are often included in most Tegra210 based devices.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 0 ====&lt;br /&gt;
This patch configures clock enables and clock gate overrides for new hardware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 CLK_ENB_H_SET = 0x60006328;&lt;br /&gt;
 u32 CLK_ENB_L_SET = 0x60006320;&lt;br /&gt;
 u32 CLK_ENB_U_SET = 0x60006330; &lt;br /&gt;
 u32 CLK_ENB_V_SET = 0x60006440;&lt;br /&gt;
 u32 CLK_ENB_W_SET = 0x60006448;&lt;br /&gt;
 u32 CLK_ENB_X_SET = 0x60006284;&lt;br /&gt;
 u32 CLK_ENB_Y_SET = 0x6000629C;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRA = 0x600060F8;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRB = 0x600060FC;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRC = 0x600063A0;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRD = 0x600063A4;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRE = 0x60006554;&lt;br /&gt;
 u32 CLK_SOURCE_VI = 0x60006148;&lt;br /&gt;
 u32 CLK_SOURCE_HOST1X = 0x60006180;&lt;br /&gt;
 u32 CLK_SOURCE_NVENC = 0x600066A0; &lt;br /&gt;
&lt;br /&gt;
 // Set all clock enables and overrides&lt;br /&gt;
 *(u32 *)CLK_ENB_V_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_W_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRA = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRB = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_X_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_Y_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_L_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_H_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_U_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRC = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRD = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRE = 0xFFFFFFFF;&lt;br /&gt;
&lt;br /&gt;
 // Set VI, HOST1X and NVENC clock sources to CLK_M&lt;br /&gt;
 *(u32 *)CLK_SOURCE_VI = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_HOST1X = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_NVENC = 0xE0000000;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
&lt;br /&gt;
     MOVS    R1, #0&lt;br /&gt;
     MOVS    R0, #0xE&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 1 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
LP0 resume code expects APBDEV_PMC_SCRATCH190_0 to be set to 0x01, but the bootrom didn&#039;t set it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH190_0 = 0x7000EC18;&lt;br /&gt;
 u32 pmc_scratch190_val = *(u32 *)APBDEV_PMC_SCRATCH190_0;&lt;br /&gt;
 &lt;br /&gt;
 return (pmc_scratch190_val | 0x01);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 2 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_SPARE_CFG0_0 = 0x7D000834;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
 &lt;br /&gt;
 // Increase UTMIP_HSSQUELCH_LEVEL_NEW by 0x02&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 += 0x02;&lt;br /&gt;
&lt;br /&gt;
 // Clear FUSE_HS_IREF_CAP_CFG&lt;br /&gt;
 *(u32 *)USB1_UTMIP_SPARE_CFG0_0 = ((*(u32 *)USB1_UTMIP_SPARE_CFG0_0 &amp;amp; ~(0x118)) - 0x80);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 3 ====&lt;br /&gt;
This patch pertains to XHCI IRQ clearing checks and forces a result code to be 0.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 4 ====&lt;br /&gt;
This patch allows backing up and restoring strapping options for warmboot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH0_0 = 0x7000E450;&lt;br /&gt;
 u32 APBDEV_PMC_RST_STATUS_0 = 0x7000E5B4;&lt;br /&gt;
 u32 APBDEV_PMC_SEC_DISABLE8_0 = 0x7000E9C0;&lt;br /&gt;
 u32 APBDEV_PMC_SECURE_SCRATCH111_0 = 0x7000EF14;&lt;br /&gt;
 u32 APB_MISC_PP_STRAPPING_OPT_A_0 = 0x70000008; &lt;br /&gt;
&lt;br /&gt;
 u32 reset_status = *(u32 *)APBDEV_PMC_RST_STATUS_0;&lt;br /&gt;
&lt;br /&gt;
 // Check for regular power on&lt;br /&gt;
 if (reset_status == 0)&lt;br /&gt;
 {    &lt;br /&gt;
     // Set all buttons in RCM_STRAPS and backup to PMC scratch&lt;br /&gt;
     *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0 = (*(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 | 0x1C00);&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
     // Restore strapping options from PMC scratch&lt;br /&gt;
     *(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 = *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // Disable write access to APBDEV_PMC_SECURE_SCRATCH111_0&lt;br /&gt;
 *(u32 *)APBDEV_PMC_SEC_DISABLE8_0 |= 0x4000;&lt;br /&gt;
 &lt;br /&gt;
 return *(u32 *)APBDEV_PMC_SCRATCH0_0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 5 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_HSRX_CFG0_0 = 0x7D000810;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
&lt;br /&gt;
 // Clear UTMIP_IDLE_WAIT, UTMIP_ELASTIC_LIMIT and UTMIP_PCOUNT_UPDN_DIV,&lt;br /&gt;
 // and set UTMIP_IDLE_WAIT to 0x11 and UTMIP_ELASTIC_LIMIT to 0x10 &lt;br /&gt;
 *(u32 *)USB1_UTMIP_HSRX_CFG0_0 = ((*(u32 *)USB1_UTMIP_HSRX_CFG0_0 &amp;amp; ~(0xF8000) + 0x88000 &amp;amp; ~(0x7C00) + 0x4000) &amp;amp; ~(0xF000000));&lt;br /&gt;
 &lt;br /&gt;
 // Clear UTMIP_HSSQUELCH_LEVEL_NEW&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 &amp;amp;= ~(0x07);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 6 ====&lt;br /&gt;
This patch is a factory backdoor.&lt;br /&gt;
&lt;br /&gt;
It allows controlling the debug authentication configuration using a fuse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 FUSE_DEBUG_AUTH_OVERRIDE = 0x7000FA9C;&lt;br /&gt;
&lt;br /&gt;
 u32 debug_auth_override_val = *(u32 *)FUSE_DEBUG_AUTH_OVERRIDE;&lt;br /&gt;
 debug_auth_override_val = ((debug_auth_override_val &amp;gt;&amp;gt; 0x08) &amp;lt;&amp;lt; 0x01);&lt;br /&gt;
&lt;br /&gt;
 // Override debug authentication value stored in IRAM&lt;br /&gt;
 *(u32 *)0x400028E4 &amp;amp;= ~(debug_auth_override_val);&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     CMP     R0, #0&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 7 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It prevents overflowing IRAM (0x40010000) when copying the warmboot binary from DRAM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_CNTRL_0 = 0x7000E400;&lt;br /&gt;
 &lt;br /&gt;
 u32 warmboot_header_addr = 0x400049F0;&lt;br /&gt;
 u32 warmboot_bin_size = *(u32 *)warmboot_bin_header_addr;&lt;br /&gt;
 &lt;br /&gt;
 // Invalid warmboot binary size&lt;br /&gt;
 if (warmboot_size &amp;gt;&amp;gt; 0x11)&lt;br /&gt;
 {&lt;br /&gt;
     // Assert MAIN_RST&lt;br /&gt;
     // 0x40004BF0 comes from R4 and the bootrom doesn&#039;t bother to change it&lt;br /&gt;
     *(u32 *)APBDEV_PMC_CNTRL_0 = 0x40004BF0;&lt;br /&gt;
&lt;br /&gt;
     // Deadlock&lt;br /&gt;
     while(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R0, =0x40010000&lt;br /&gt;
     LDR     R2, [warmboot_bin_header_addr]&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 8 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It sets the correct warmboot binary entrypoint address for RSA signature verification, which would be done in DRAM instead of IRAM without this patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 warmboot_addr_ptr = 0x40010238;&lt;br /&gt;
 u32 warmboot_entry_addr_ptr = 0x40004C28;&lt;br /&gt;
&lt;br /&gt;
 *(u32 *)warmboot_entry_addr_ptr = *(u32 *)warmboot_addr_ptr;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R2, [warmboot_addr_ptr]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatches 9 and 10 ====&lt;br /&gt;
These patches modify the 256-bit Secure Provisioning AES key with index 0x3A.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 11 ====&lt;br /&gt;
This patch pertains to the [[Security_Engine|Security Engine]] context restore process and forces SE_OPERATION_UNK1 to be 0x01.&lt;br /&gt;
&lt;br /&gt;
== Anti-downgrade ==&lt;br /&gt;
The first bootloader verifies [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]] to prevent downgrading.&lt;br /&gt;
How many fuses are expected to be burnt depends the device&#039;s unit type as below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1-3.0.2&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0-4.1.0&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0-5.1.0&lt;br /&gt;
| 6&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0-6.1.0&lt;br /&gt;
| 7&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If too many fuses are burnt the bootloader will panic immediately.&lt;br /&gt;
&lt;br /&gt;
If too few are burnt, the bootloader will enable fuse programming and write the expected value to fuse indexes 0x3A and 0x3C. Afterwards, fuse programming is disabled and the panic value 0x21 is written to PMC_SCRATCH200 register (0x7000EC40). Finally, the watchdog timer is initialized and programmed to force a reset.&lt;br /&gt;
&lt;br /&gt;
On a subsequent boot, after the anti-downgrade fuses are checked again, the PMC_RST_STATUS register (0x7000E5B4) is checked and if set to 0x01 (watchdog reset) the PMC_SCRATCH200 register (0x7000EC40) will be checked for the panic value 0x21.&lt;br /&gt;
PMC_RST_STATUS will only be set back to 0 (power on reset) if the fuse count matches the new expected value, otherwise the system will panic.&lt;/div&gt;</summary>
		<author><name>Lacius</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Fuses&amp;diff=5184</id>
		<title>Fuses</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Fuses&amp;diff=5184"/>
		<updated>2018-10-09T21:39:17Z</updated>

		<summary type="html">&lt;p&gt;Lacius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch makes use of Tegra&#039;s fuse driver for a number of operations. This driver is mapped to physical address 0x7000F800 with a total size of 0x400 bytes and exposes several registers for fuse programming.&lt;br /&gt;
&lt;br /&gt;
Registers from 0x7000F800 to 0x7000F800 + 0xFF can be used to directly program the hardware fuse array, while registers from 0x7000F800 + 0x100 (FUSE_CHIP_REG_START_OFFSET) to 0x7000F800 + 0x3FC (FUSE_CHIP_REG_END_OFFSET) represent cached values read from certain fuses.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Below is a list of fuse driver registers used by the Switch&#039;s bootloaders.&lt;br /&gt;
&lt;br /&gt;
=== Driver registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_CTRL|FUSE_CTRL]]&lt;br /&gt;
| 0x7000F800&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_ADDR|FUSE_REG_ADDR]]&lt;br /&gt;
| 0x7000F804&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_READ|FUSE_REG_READ]]&lt;br /&gt;
| 0x7000F808&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_WRITE|FUSE_REG_WRITE]]&lt;br /&gt;
| 0x7000F80C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD1&lt;br /&gt;
| 0x7000F810&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD2&lt;br /&gt;
| 0x7000F814&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_PGM1&lt;br /&gt;
| 0x7000F818&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_TIME_PGM2|FUSE_TIME_PGM2]]&lt;br /&gt;
| 0x7000F81C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIV2INTFC&lt;br /&gt;
| 0x7000F820&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FUSEBYPASS&lt;br /&gt;
| 0x7000F824&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATEKEYDISABLE&lt;br /&gt;
| 0x7000F828&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_DIS_PGM|FUSE_DIS_PGM]]&lt;br /&gt;
| 0x7000F82C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_WRITE_ACCESS|FUSE_WRITE_ACCESS]]&lt;br /&gt;
| 0x7000F830&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PWR_GOOD_SW&lt;br /&gt;
| 0x7000F834&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_CTRL ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Fuse command (1 = FUSE_READ; 2 = FUSE_WRITE; 3 = FUSE_SENSE)&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| Fuse power down mode flag (FUSE_CTRL_PD)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before fuse reading/writing the power down mode must be disabled.&lt;br /&gt;
FUSE_SENSE mode flushes programmed values into the [[Fuses#Cache_registers|cache registers]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_ADDR ====&lt;br /&gt;
This register takes the address of the fuse to be read/written/sensed.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_READ ====&lt;br /&gt;
This register receives the value read from the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_WRITE ====&lt;br /&gt;
This register takes the value to be written to the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_TIME_PGM2 ====&lt;br /&gt;
This register takes the fuse programming pulse (0xC0 == 19200 kHz).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_DIS_PGM ====&lt;br /&gt;
If set to 0x01, this register disables fuse programming.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_WRITE_ACCESS ====&lt;br /&gt;
If set to 0x01, this register disables software writes to the fuse driver registers.&lt;br /&gt;
&lt;br /&gt;
=== Cache registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MODE&lt;br /&gt;
| 0x7000F900&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SKU_INFO|FUSE_SKU_INFO]]&lt;br /&gt;
| 0x7000F910&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_0&lt;br /&gt;
| 0x7000F914&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_IDDQ&lt;br /&gt;
| 0x7000F918&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FT_REV&lt;br /&gt;
| 0x7000F928&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_1&lt;br /&gt;
| 0x7000F92C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_2&lt;br /&gt;
| 0x7000F930&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_0&lt;br /&gt;
| 0x7000F934&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SOC_SPEEDO_1|FUSE_SOC_SPEEDO_1]]&lt;br /&gt;
| 0x7000F938&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_2&lt;br /&gt;
| 0x7000F93C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_IDDQ&lt;br /&gt;
| 0x7000F940&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FA|FUSE_FA]]&lt;br /&gt;
| 0x7000F948&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY0]]&lt;br /&gt;
| 0x7000F964&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY1]]&lt;br /&gt;
| 0x7000F968&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY2]]&lt;br /&gt;
| 0x7000F96C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY3]]&lt;br /&gt;
| 0x7000F970&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY4]]&lt;br /&gt;
| 0x7000F974&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY5]]&lt;br /&gt;
| 0x7000F978&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY6]]&lt;br /&gt;
| 0x7000F97C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY7]]&lt;br /&gt;
| 0x7000F980&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_1&lt;br /&gt;
| 0x7000F984&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_2&lt;br /&gt;
| 0x7000F988&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CP_REV&lt;br /&gt;
| 0x7000F990&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_0&lt;br /&gt;
| 0x7000F998&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FIRST_BOOTROM_PATCH_SIZE_REG&lt;br /&gt;
| 0x7000F99C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURITY_MODE&lt;br /&gt;
| 0x7000F9A0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY0]]&lt;br /&gt;
| 0x7000F9A4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY1]]&lt;br /&gt;
| 0x7000F9A8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY2]]&lt;br /&gt;
| 0x7000F9AC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY3]]&lt;br /&gt;
| 0x7000F9B0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY4]]&lt;br /&gt;
| 0x7000F9B4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_BOOT_DEVICE_INFO&lt;br /&gt;
| 0x7000F9BC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_SW|FUSE_RESERVED_SW]]&lt;br /&gt;
| 0x7000F9C0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VP8_ENABLE&lt;br /&gt;
| 0x7000F9C4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]]&lt;br /&gt;
| 0x7000F9C8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]]&lt;br /&gt;
| 0x7000F9CC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]]&lt;br /&gt;
| 0x7000F9D0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM3|FUSE_RESERVED_ODM3]]&lt;br /&gt;
| 0x7000F9D4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]&lt;br /&gt;
| 0x7000F9D8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_ODM5&lt;br /&gt;
| 0x7000F9DC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]]&lt;br /&gt;
| 0x7000F9E0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]]&lt;br /&gt;
| 0x7000F9E4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_USB_CALIB&lt;br /&gt;
| 0x7000F9F0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_DIRECT_CONFIG&lt;br /&gt;
| 0x7000F9F4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VENDOR_CODE&lt;br /&gt;
| 0x7000FA00&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FAB_CODE&lt;br /&gt;
| 0x7000FA04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_0&lt;br /&gt;
| 0x7000FA08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_1&lt;br /&gt;
| 0x7000FA0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_WAFER_ID&lt;br /&gt;
| 0x7000FA10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_X_COORDINATE&lt;br /&gt;
| 0x7000FA14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_Y_COORDINATE&lt;br /&gt;
| 0x7000FA18&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SATA_CALIB&lt;br /&gt;
| 0x7000FA24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GPU_IDDQ&lt;br /&gt;
| 0x7000FA28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_3&lt;br /&gt;
| 0x7000FA2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SUBREVISION&lt;br /&gt;
| 0x7000FA48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_4&lt;br /&gt;
| 0x7000FA54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_5&lt;br /&gt;
| 0x7000FA58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_6&lt;br /&gt;
| 0x7000FA5C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_7&lt;br /&gt;
| 0x7000FA60&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_PRIV_SEC_DIS&lt;br /&gt;
| 0x7000FA64&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PKC_DISABLE|FUSE_PKC_DISABLE]]&lt;br /&gt;
| 0x7000FA68&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_COMMON&lt;br /&gt;
| 0x7000FA80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DEBUG_AUTH_OVERRIDE&lt;br /&gt;
| 0x7000FA9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_8&lt;br /&gt;
| 0x7000FAD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INDEX&lt;br /&gt;
| 0x7000FAE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB&lt;br /&gt;
| 0x7000FB04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_9&lt;br /&gt;
| 0x7000FB1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB_EXT&lt;br /&gt;
| 0x7000FB50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_0&lt;br /&gt;
| 0x7000FB80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_1&lt;br /&gt;
| 0x7000FB84&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_2&lt;br /&gt;
| 0x7000FB88&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_3&lt;br /&gt;
| 0x7000FB8C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_4&lt;br /&gt;
| 0x7000FB90&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_5|FUSE_SPARE_BIT_5]]&lt;br /&gt;
| 0x7000FB94&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_6&lt;br /&gt;
| 0x7000FB98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_7&lt;br /&gt;
| 0x7000FB9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_8&lt;br /&gt;
| 0x7000FBA0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_9&lt;br /&gt;
| 0x7000FBA4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_10&lt;br /&gt;
| 0x7000FBA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_11&lt;br /&gt;
| 0x7000FBAC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_12&lt;br /&gt;
| 0x7000FBB0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_13&lt;br /&gt;
| 0x7000FBB4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_14&lt;br /&gt;
| 0x7000FBB8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_15&lt;br /&gt;
| 0x7000FBBC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_16&lt;br /&gt;
| 0x7000FBC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_17&lt;br /&gt;
| 0x7000FBC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_18&lt;br /&gt;
| 0x7000FBC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_19&lt;br /&gt;
| 0x7000FBCC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_20&lt;br /&gt;
| 0x7000FBD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_21&lt;br /&gt;
| 0x7000FBD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_22&lt;br /&gt;
| 0x7000FBD8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_23&lt;br /&gt;
| 0x7000FBDC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_24&lt;br /&gt;
| 0x7000FBE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_25&lt;br /&gt;
| 0x7000FBE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_26&lt;br /&gt;
| 0x7000FBE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_27&lt;br /&gt;
| 0x7000FBEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_28&lt;br /&gt;
| 0x7000FBF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_29&lt;br /&gt;
| 0x7000FBF4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_30&lt;br /&gt;
| 0x7000FBF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_31&lt;br /&gt;
| 0x7000FBFC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SKU_INFO ====&lt;br /&gt;
Stores the SKU ID (must be 0x83).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FA ====&lt;br /&gt;
Stores failure analysis mode.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SOC_SPEEDO_1 ====&lt;br /&gt;
Stores the bootrom patch version.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM0 ====&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM1 ====&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| [5.0.0+] Used as key generation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM3 ====&lt;br /&gt;
This appears to store a hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Unit type (3 = debug; 0 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown config (must be 1 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-3.0.2] 3-5&lt;br /&gt;
[4.0.0+] 3-7&lt;br /&gt;
| DRAM id&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown config mask (must be 0 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Unit type mask (0 = debug; 1 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [3.0.0+] Kiosk mode (0 = retail; 1 = kiosk)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [5.0.0+] SoC variant (0 = T210; 1 = T214)&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| [4.0.0+] New unit type&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This stores some device configuration parameters.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM6 ====&lt;br /&gt;
This register returns the value programmed into index 0x3A of the fuse array. &lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM7 ====&lt;br /&gt;
This register returns the value programmed into index 0x3C of the fuse array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_5 ====&lt;br /&gt;
Must be non-zero on retail units, otherwise the first bootloader panics.&lt;br /&gt;
On debug units it can be zero, which tells the bootloader to choose from two debug master key seeds. If set to non-zero on a debug unit, it tells the bootloader to choose from two retail master key seeds (only the last one matches the retail master key seed).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY ====&lt;br /&gt;
This stores the 160-bit private key (128 bit SBK + 32-bit device key).&lt;br /&gt;
Reads to these registers after the SBK is locked out produce all-FF output.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PUBLIC_KEY ====&lt;br /&gt;
This stores the SHA256 hash of the 2048-bit RSA key expected at BCT+0x210.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Boot device&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Skip device selection straps (0 = don&#039;t skip; 1 = skip)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ENABLE_CHARGER_DETECT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ENABLE_WATCHDOG&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Forced RCM two button mode (0 = Only VOLUME_UP; 1 = VOLUME_UP + HOME)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| RCM USB controller mode (0 = USB 2.0; 1 = XUSB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This caches the value of the sw_reserved fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PKC_DISABLE ====&lt;br /&gt;
This caches the value of the pkc_disable fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
== eFuses ==&lt;br /&gt;
The actual hardware fuses can be programmed through the fuse driver after enabling fuse programming.&lt;br /&gt;
&lt;br /&gt;
Below is a list of common fuse indexes used by Tegra devices (and applicable to the Switch).&lt;br /&gt;
Note that the indexes are relative to the start of the fuse array and each element is a 4 byte word. A single fuse write operation always writes the same word at both fuse_array + 0 (PRIMARY_ALIAS) and fuse_array + 1 (REDUNDANT_ALIAS).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Index&lt;br /&gt;
!  Bits&lt;br /&gt;
|-&lt;br /&gt;
| jtag_disable&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_production_mode&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_lock&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| public_key&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| secure_boot_key&lt;br /&gt;
| 0x22&lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| device_key&lt;br /&gt;
| 0x2A&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_cfg&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_sel&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| sw_reserved&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| ignore_dev_sel_straps&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#odm_reserved|odm_reserved]]&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| pkc_disable&lt;br /&gt;
| 0x52&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#bootrom_ipatch|bootrom_ipatch]]&lt;br /&gt;
| 0x72&lt;br /&gt;
| 624&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== odm_reserved ===&lt;br /&gt;
The first bootloader only burns fuses in this region.&lt;br /&gt;
Both fuse indexes 0x3A (odm_reserved + 0x0C) and 0x3C (odm_reserved + 0x0E) are used for anti-downgrade control. These fuses will have their values cached into [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]] and [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]].&lt;br /&gt;
&lt;br /&gt;
=== bootrom_ipatch ===&lt;br /&gt;
Tegra210 based hardware such as the Switch provides support for bootrom patches. The patch data is burned to the hardware fuse array using a specific format (see [https://gist.github.com/shuffle2/f8728159da100e9df2606d43925de0af shuffle2&#039;s ipatch decoder]). The bootrom reads these fuses in order to initialize the IPATCH hardware, which allows overriding data returned for code and data fetches done by BPMP. The revision stored in FUSE_CP_REV indicates the unique set of values stored in ipatch fuses.&lt;br /&gt;
&lt;br /&gt;
The following represents the patch data dumped from a Switch console:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
RAM:00000000 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000 irom_svc_dispatch&lt;br /&gt;
RAM:00000000   STMFD   SP!, {R0-R2}                  ; ipatches:&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 7d9e2000     fb3c     2000 : movs r0, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000004   MOV     R2, LR&lt;br /&gt;
RAM:00000008   SUB     R2, R2, #2&lt;br /&gt;
RAM:0000000C   LDR     R2, [R2]&lt;br /&gt;
RAM:00000010   AND     R2, R2, #0xFF&lt;br /&gt;
RAM:00000014   MOV     R2, R2,LSL#1&lt;br /&gt;
RAM:00000018   LDR     R0, =0x1007B0&lt;br /&gt;
RAM:0000001C   LDR     R1, =0x1007F8&lt;br /&gt;
RAM:00000020   SUB     R1, R1, R0&lt;br /&gt;
RAM:00000024   LDR     R0, =0x40004C30&lt;br /&gt;
RAM:00000028   ADD     R0, R0, R1&lt;br /&gt;
RAM:0000002C   ADD     R2, R2, R0&lt;br /&gt;
RAM:00000030   ORR     R2, R2, #1&lt;br /&gt;
RAM:00000034   LDMFD   SP!, {R0,R1}&lt;br /&gt;
RAM:00000038   BX      R2&lt;br /&gt;
RAM:00000038 ; End of function irom_svc_dispatch&lt;br /&gt;
RAM:00000038&lt;br /&gt;
RAM:00000038 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000003C dword_3C DCD 0x1007B0                   ; DATA XREF: irom_svc_dispatch+18↑r&lt;br /&gt;
RAM:00000040 dword_40 DCD 0x1007F8                   ; DATA XREF: irom_svc_dispatch+1C↑r&lt;br /&gt;
RAM:00000044 dword_44 DCD 0x40004C30                 ; DATA XREF: irom_svc_dispatch+24↑r&lt;br /&gt;
RAM:00000048   CODE16&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 sub_48&lt;br /&gt;
RAM:00000048   MOVS    R2, #0                        ; 0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:0000004A   MVNS    R2, R2&lt;br /&gt;
RAM:0000004C   LDR     R1, =0x60006410&lt;br /&gt;
RAM:0000004E   STR     R2, [R1,#0x30]&lt;br /&gt;
RAM:00000050   STR     R2, [R1,#0x38]&lt;br /&gt;
RAM:00000052   LDR     R1, =0x600060F8&lt;br /&gt;
RAM:00000054   STR     R2, [R1]&lt;br /&gt;
RAM:00000056   STR     R2, [R1,#4]&lt;br /&gt;
RAM:00000058   LDR     R1, =0x60006284&lt;br /&gt;
RAM:0000005A   STR     R2, [R1]&lt;br /&gt;
RAM:0000005C   STR     R2, [R1,#0x18]&lt;br /&gt;
RAM:0000005E   ADDS    R1, #0x80&lt;br /&gt;
RAM:00000060   ADDS    R1, #0x1C&lt;br /&gt;
RAM:00000062   STR     R2, [R1]&lt;br /&gt;
RAM:00000064   STR     R2, [R1,#8]&lt;br /&gt;
RAM:00000066   STR     R2, [R1,#0x10]&lt;br /&gt;
RAM:00000068   ADDS    R1, #0x80&lt;br /&gt;
RAM:0000006A   STR     R2, [R1]&lt;br /&gt;
RAM:0000006C   STR     R2, [R1,#4]&lt;br /&gt;
RAM:0000006E   LDR     R1, =0x60006554&lt;br /&gt;
RAM:00000070   STR     R2, [R1]&lt;br /&gt;
RAM:00000072   MOVS    R2, #0xA0000000&lt;br /&gt;
RAM:00000076   LDR     R1, =0x60006148&lt;br /&gt;
RAM:00000078   STR     R2, [R1]&lt;br /&gt;
RAM:0000007A   ADDS    R1, #0x38 ; &#039;8&#039;&lt;br /&gt;
RAM:0000007C   STR     R2, [R1]&lt;br /&gt;
RAM:0000007E   MOVS    R2, #0xE0000000&lt;br /&gt;
RAM:00000082   LDR     R1, =0x600066A0&lt;br /&gt;
RAM:00000084   STR     R2, [R1]&lt;br /&gt;
RAM:00000086   MOVS    R1, #0&lt;br /&gt;
RAM:00000088   MOVS    R0, #0xE&lt;br /&gt;
RAM:0000008A   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000008A ; End of function sub_48&lt;br /&gt;
RAM:0000008A&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C sub_8C&lt;br /&gt;
RAM:0000008C   LDR     R0, [R1,#0x18]                ; 1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:0000008E   MOVS    R2, #1&lt;br /&gt;
RAM:00000090   ORRS    R0, R2&lt;br /&gt;
RAM:00000092   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:00000092 ; End of function sub_8C&lt;br /&gt;
RAM:00000092&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 sub_94&lt;br /&gt;
RAM:00000094   LDR     R2, [R4,#0x50]                ; 2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000096   ADDS    R2, R2, #2&lt;br /&gt;
RAM:00000098   STR     R2, [R4,#0x50]&lt;br /&gt;
RAM:0000009A   SUBS    R1, #0x80&lt;br /&gt;
RAM:0000009C   STR     R1, [R4,#0x34]&lt;br /&gt;
RAM:0000009E   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000009E ; End of function sub_94&lt;br /&gt;
RAM:0000009E&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 sub_A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; FUNCTION CHUNK AT RAM:00000148 SIZE 00000004 BYTES&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0   MOVS    R0, #0x70000000               ; 4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:000000A4   LDR     R6, =dword_7000EF14&lt;br /&gt;
RAM:000000A6   LDR     R2, =dword_7000E5B4&lt;br /&gt;
RAM:000000A8   LDR     R2, [R2]&lt;br /&gt;
RAM:000000AA   CMP     R2, #0&lt;br /&gt;
RAM:000000AC   BEQ     loc_B4&lt;br /&gt;
RAM:000000AE   LDR     R2, [R6]&lt;br /&gt;
RAM:000000B0   STR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B2   B       loc_BC&lt;br /&gt;
RAM:000000B4 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:000000B4&lt;br /&gt;
RAM:000000B4 loc_B4                                  ; CODE XREF: sub_A0+C↑j&lt;br /&gt;
RAM:000000B4   LDR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B6   LSRS    R0, R0, #0x12&lt;br /&gt;
RAM:000000B8   ORRS    R2, R0&lt;br /&gt;
RAM:000000BA   STR     R2, [R6]&lt;br /&gt;
RAM:000000BC&lt;br /&gt;
RAM:000000BC loc_BC                                  ; CODE XREF: sub_A0+12↑j&lt;br /&gt;
RAM:000000BC   LDR     R6, =dword_7000E9C0&lt;br /&gt;
RAM:000000BE   LDR     R0, [R6]&lt;br /&gt;
RAM:000000C0   MOVS    R2, #0x4000&lt;br /&gt;
RAM:000000C4   ORRS    R2, R0&lt;br /&gt;
RAM:000000C6   STR     R2, [R6]&lt;br /&gt;
RAM:000000C8   LDR     R0, [R5,#0x10]&lt;br /&gt;
RAM:000000CA   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000CA ; End of function sub_A0&lt;br /&gt;
RAM:000000CA&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC sub_CC&lt;br /&gt;
RAM:000000CC   MOVS    R2, #0xF000000                ; 5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:000000D0   BICS    R1, R2&lt;br /&gt;
RAM:000000D2   STR     R1, [R4,#0x10]&lt;br /&gt;
RAM:000000D4   LDR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000D6   MOVS    R2, #7&lt;br /&gt;
RAM:000000D8   BICS    R1, R2&lt;br /&gt;
RAM:000000DA   STR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000DC   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000DC ; End of function sub_CC&lt;br /&gt;
RAM:000000DC&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE sub_DE&lt;br /&gt;
RAM:000000DE   LDR     R2, =dword_7000FA9C           ; 6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:000000E0   LDR     R2, [R2]&lt;br /&gt;
RAM:000000E2   LSRS    R2, R2, #8&lt;br /&gt;
RAM:000000E4   LSLS    R2, R2, #1&lt;br /&gt;
RAM:000000E6   LDR     R1, [R4]&lt;br /&gt;
RAM:000000E8   BICS    R1, R2&lt;br /&gt;
RAM:000000EA   STR     R1, [R4]&lt;br /&gt;
RAM:000000EC   CMP     R0, #0&lt;br /&gt;
RAM:000000EE   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000EE ; End of function sub_DE&lt;br /&gt;
RAM:000000EE&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 sub_F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 arg_0=  0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0   LDR     R0, =0x400049F0               ; 7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:000000F2   LDR     R2, [R0]&lt;br /&gt;
RAM:000000F4   STR     R2, [SP,#arg_0]&lt;br /&gt;
RAM:000000F6   LDR     R0, =0x40010000&lt;br /&gt;
RAM:000000F8   LSRS    R2, R2, #17&lt;br /&gt;
RAM:000000FA   BEQ     pop_r2_mov_pc_lr              ; if ([0x400049F0] &amp;gt;&amp;gt; 17) == 0) {&lt;br /&gt;
RAM:000000FA                                         ;   r2 = [0x400049F0];&lt;br /&gt;
RAM:000000FA                                         ; } else {&lt;br /&gt;
RAM:000000FC   LDR     R0, =APBDEV_PMC_CNTRL_0&lt;br /&gt;
RAM:000000FE   STR     R4, [R0]                      ;  write APBDEV_PMC_CNTRL&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000100 loc_100                                 ; CODE XREF: sub_F0:loc_100↓j&lt;br /&gt;
RAM:00000100   B       loc_100                       ;  hang&lt;br /&gt;
RAM:00000100 ; End of function sub_F0                ; }&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 sub_102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 arg_0=  0&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102   LDR     R2, =0x40010220               ; 8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000104   STR     R2, [SP,#arg_0]               ; set r2 retval = [0x40010220]&lt;br /&gt;
RAM:00000106   LDR     R2, [R2,#0x18]&lt;br /&gt;
RAM:00000108   ADDS    R0, #0xFC&lt;br /&gt;
RAM:0000010A   STR     R2, [R0,#0x1C]                ; [r0+0x118] = [0x40010220 + 0x18]&lt;br /&gt;
RAM:0000010C   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000010C ; End of function sub_102&lt;br /&gt;
RAM:0000010C&lt;br /&gt;
RAM:0000010C ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000010E   DCB    0&lt;br /&gt;
RAM:0000010F   DCB    0&lt;br /&gt;
RAM:00000110 off_110 DCD 0x60006410                  ; DATA XREF: sub_48+4↑r&lt;br /&gt;
RAM:00000114 off_114 DCD 0x600060F8                  ; DATA XREF: sub_48+A↑r&lt;br /&gt;
RAM:00000118 off_118 DCD 0x60006284                  ; DATA XREF: sub_48+10↑r&lt;br /&gt;
RAM:0000011C off_11C DCD 0x60006554                  ; DATA XREF: sub_48+26↑r&lt;br /&gt;
RAM:00000120 off_120 DCD 0x60006148                  ; DATA XREF: sub_48+2E↑r&lt;br /&gt;
RAM:00000124 off_124 DCD 0x600066A0                  ; DATA XREF: sub_48+3A↑r&lt;br /&gt;
RAM:00000128 off_128 DCD dword_7000EF14              ; DATA XREF: sub_A0+4↑r&lt;br /&gt;
RAM:0000012C off_12C DCD dword_7000E5B4              ; DATA XREF: sub_A0+6↑r&lt;br /&gt;
RAM:00000130 off_130 DCD dword_7000E9C0              ; DATA XREF: sub_A0:loc_BC↑r&lt;br /&gt;
RAM:00000134 off_134 DCD dword_7000FA9C              ; DATA XREF: sub_DE↑r&lt;br /&gt;
RAM:00000138 off_138 DCD 0x400049F0                  ; DATA XREF: sub_F0↑r&lt;br /&gt;
RAM:0000013C dword_13C DCD 0x40010000                ; DATA XREF: sub_F0+6↑r&lt;br /&gt;
RAM:00000140 off_140 DCD APBDEV_PMC_CNTRL_0          ; DATA XREF: sub_F0+C↑r&lt;br /&gt;
RAM:00000144 off_144 DCD 0x40010220                  ; DATA XREF: sub_102↑r&lt;br /&gt;
RAM:00000148 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:00000148 ; START OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
RAM:00000148&lt;br /&gt;
RAM:00000148 pop_r2_mov_pc_lr                        ; CODE XREF: sub_48+42↑j&lt;br /&gt;
RAM:00000148                                         ; sub_8C+6↑j ...&lt;br /&gt;
RAM:00000148   POP     {R2}&lt;br /&gt;
RAM:0000014A   MOV     PC, LR&lt;br /&gt;
RAM:0000014A ; END OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last 4 patches are exclusive to the Switch, while the remaining ones are often included in most Tegra210 based devices.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 0 ====&lt;br /&gt;
This patch configures clock enables and clock gate overrides for new hardware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 CLK_ENB_H_SET = 0x60006328;&lt;br /&gt;
 u32 CLK_ENB_L_SET = 0x60006320;&lt;br /&gt;
 u32 CLK_ENB_U_SET = 0x60006330; &lt;br /&gt;
 u32 CLK_ENB_V_SET = 0x60006440;&lt;br /&gt;
 u32 CLK_ENB_W_SET = 0x60006448;&lt;br /&gt;
 u32 CLK_ENB_X_SET = 0x60006284;&lt;br /&gt;
 u32 CLK_ENB_Y_SET = 0x6000629C;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRA = 0x600060F8;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRB = 0x600060FC;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRC = 0x600063A0;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRD = 0x600063A4;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRE = 0x60006554;&lt;br /&gt;
 u32 CLK_SOURCE_VI = 0x60006148;&lt;br /&gt;
 u32 CLK_SOURCE_HOST1X = 0x60006180;&lt;br /&gt;
 u32 CLK_SOURCE_NVENC = 0x600066A0; &lt;br /&gt;
&lt;br /&gt;
 // Set all clock enables and overrides&lt;br /&gt;
 *(u32 *)CLK_ENB_V_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_W_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRA = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRB = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_X_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_Y_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_L_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_H_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_U_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRC = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRD = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRE = 0xFFFFFFFF;&lt;br /&gt;
&lt;br /&gt;
 // Set VI, HOST1X and NVENC clock sources to CLK_M&lt;br /&gt;
 *(u32 *)CLK_SOURCE_VI = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_HOST1X = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_NVENC = 0xE0000000;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
&lt;br /&gt;
     MOVS    R1, #0&lt;br /&gt;
     MOVS    R0, #0xE&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 1 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
LP0 resume code expects APBDEV_PMC_SCRATCH190_0 to be set to 0x01, but the bootrom didn&#039;t set it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH190_0 = 0x7000EC18;&lt;br /&gt;
 u32 pmc_scratch190_val = *(u32 *)APBDEV_PMC_SCRATCH190_0;&lt;br /&gt;
 &lt;br /&gt;
 return (pmc_scratch190_val | 0x01);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 2 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_SPARE_CFG0_0 = 0x7D000834;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
 &lt;br /&gt;
 // Increase UTMIP_HSSQUELCH_LEVEL_NEW by 0x02&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 += 0x02;&lt;br /&gt;
&lt;br /&gt;
 // Clear FUSE_HS_IREF_CAP_CFG&lt;br /&gt;
 *(u32 *)USB1_UTMIP_SPARE_CFG0_0 = ((*(u32 *)USB1_UTMIP_SPARE_CFG0_0 &amp;amp; ~(0x118)) - 0x80);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 3 ====&lt;br /&gt;
This patch pertains to XHCI IRQ clearing checks and forces a result code to be 0.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 4 ====&lt;br /&gt;
This patch allows backing up and restoring strapping options for warmboot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH0_0 = 0x7000E450;&lt;br /&gt;
 u32 APBDEV_PMC_RST_STATUS_0 = 0x7000E5B4;&lt;br /&gt;
 u32 APBDEV_PMC_SEC_DISABLE8_0 = 0x7000E9C0;&lt;br /&gt;
 u32 APBDEV_PMC_SECURE_SCRATCH111_0 = 0x7000EF14;&lt;br /&gt;
 u32 APB_MISC_PP_STRAPPING_OPT_A_0 = 0x70000008; &lt;br /&gt;
&lt;br /&gt;
 u32 reset_status = *(u32 *)APBDEV_PMC_RST_STATUS_0;&lt;br /&gt;
&lt;br /&gt;
 // Check for regular power on&lt;br /&gt;
 if (reset_status == 0)&lt;br /&gt;
 {    &lt;br /&gt;
     // Set all buttons in RCM_STRAPS and backup to PMC scratch&lt;br /&gt;
     *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0 = (*(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 | 0x1C00);&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
     // Restore strapping options from PMC scratch&lt;br /&gt;
     *(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 = *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // Disable write access to APBDEV_PMC_SECURE_SCRATCH111_0&lt;br /&gt;
 *(u32 *)APBDEV_PMC_SEC_DISABLE8_0 |= 0x4000;&lt;br /&gt;
 &lt;br /&gt;
 return *(u32 *)APBDEV_PMC_SCRATCH0_0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 5 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_HSRX_CFG0_0 = 0x7D000810;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
&lt;br /&gt;
 // Clear UTMIP_IDLE_WAIT, UTMIP_ELASTIC_LIMIT and UTMIP_PCOUNT_UPDN_DIV,&lt;br /&gt;
 // and set UTMIP_IDLE_WAIT to 0x11 and UTMIP_ELASTIC_LIMIT to 0x10 &lt;br /&gt;
 *(u32 *)USB1_UTMIP_HSRX_CFG0_0 = ((*(u32 *)USB1_UTMIP_HSRX_CFG0_0 &amp;amp; ~(0xF8000) + 0x88000 &amp;amp; ~(0x7C00) + 0x4000) &amp;amp; ~(0xF000000));&lt;br /&gt;
 &lt;br /&gt;
 // Clear UTMIP_HSSQUELCH_LEVEL_NEW&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 &amp;amp;= ~(0x07);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 6 ====&lt;br /&gt;
This patch is a factory backdoor.&lt;br /&gt;
&lt;br /&gt;
It allows controlling the debug authentication configuration using a fuse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 FUSE_DEBUG_AUTH_OVERRIDE = 0x7000FA9C;&lt;br /&gt;
&lt;br /&gt;
 u32 debug_auth_override_val = *(u32 *)FUSE_DEBUG_AUTH_OVERRIDE;&lt;br /&gt;
 debug_auth_override_val = ((debug_auth_override_val &amp;gt;&amp;gt; 0x08) &amp;lt;&amp;lt; 0x01);&lt;br /&gt;
&lt;br /&gt;
 // Override debug authentication value stored in IRAM&lt;br /&gt;
 *(u32 *)0x400028E4 &amp;amp;= ~(debug_auth_override_val);&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     CMP     R0, #0&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 7 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It prevents overflowing IRAM (0x40010000) when copying the warmboot binary from DRAM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_CNTRL_0 = 0x7000E400;&lt;br /&gt;
 &lt;br /&gt;
 u32 warmboot_header_addr = 0x400049F0;&lt;br /&gt;
 u32 warmboot_bin_size = *(u32 *)warmboot_bin_header_addr;&lt;br /&gt;
 &lt;br /&gt;
 // Invalid warmboot binary size&lt;br /&gt;
 if (warmboot_size &amp;gt;&amp;gt; 0x11)&lt;br /&gt;
 {&lt;br /&gt;
     // Assert MAIN_RST&lt;br /&gt;
     // 0x40004BF0 comes from R4 and the bootrom doesn&#039;t bother to change it&lt;br /&gt;
     *(u32 *)APBDEV_PMC_CNTRL_0 = 0x40004BF0;&lt;br /&gt;
&lt;br /&gt;
     // Deadlock&lt;br /&gt;
     while(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R0, =0x40010000&lt;br /&gt;
     LDR     R2, [warmboot_bin_header_addr]&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 8 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It sets the correct warmboot binary entrypoint address for RSA signature verification, which would be done in DRAM instead of IRAM without this patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 warmboot_addr_ptr = 0x40010238;&lt;br /&gt;
 u32 warmboot_entry_addr_ptr = 0x40004C28;&lt;br /&gt;
&lt;br /&gt;
 *(u32 *)warmboot_entry_addr_ptr = *(u32 *)warmboot_addr_ptr;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R2, [warmboot_addr_ptr]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatches 9 and 10 ====&lt;br /&gt;
These patches modify the 256-bit Secure Provisioning AES key with index 0x3A.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 11 ====&lt;br /&gt;
This patch pertains to the [[Security_Engine|Security Engine]] context restore process and forces SE_OPERATION_UNK1 to be 0x01.&lt;br /&gt;
&lt;br /&gt;
== Anti-downgrade ==&lt;br /&gt;
The first bootloader verifies [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]] to prevent downgrading.&lt;br /&gt;
How many fuses are expected to be burnt depends the device&#039;s unit type as below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1-3.0.2&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0-4.1.0&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0-5.1.0&lt;br /&gt;
| 6&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0-6.0.1&lt;br /&gt;
| 7&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If too many fuses are burnt the bootloader will panic immediately.&lt;br /&gt;
&lt;br /&gt;
If too few are burnt, the bootloader will enable fuse programming and write the expected value to fuse indexes 0x3A and 0x3C. Afterwards, fuse programming is disabled and the panic value 0x21 is written to PMC_SCRATCH200 register (0x7000EC40). Finally, the watchdog timer is initialized and programmed to force a reset.&lt;br /&gt;
&lt;br /&gt;
On a subsequent boot, after the anti-downgrade fuses are checked again, the PMC_RST_STATUS register (0x7000E5B4) is checked and if set to 0x01 (watchdog reset) the PMC_SCRATCH200 register (0x7000EC40) will be checked for the panic value 0x21.&lt;br /&gt;
PMC_RST_STATUS will only be set back to 0 (power on reset) if the fuse count matches the new expected value, otherwise the system will panic.&lt;/div&gt;</summary>
		<author><name>Lacius</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Fuses&amp;diff=5032</id>
		<title>Fuses</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Fuses&amp;diff=5032"/>
		<updated>2018-09-19T21:36:28Z</updated>

		<summary type="html">&lt;p&gt;Lacius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch makes use of Tegra&#039;s fuse driver for a number of operations. This driver is mapped to physical address 0x7000F800 with a total size of 0x400 bytes and exposes several registers for fuse programming.&lt;br /&gt;
&lt;br /&gt;
Registers from 0x7000F800 to 0x7000F800 + 0xFF can be used to directly program the hardware fuse array, while registers from 0x7000F800 + 0x100 (FUSE_CHIP_REG_START_OFFSET) to 0x7000F800 + 0x3FC (FUSE_CHIP_REG_END_OFFSET) represent cached values read from certain fuses.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Below is a list of fuse driver registers used by the Switch&#039;s bootloaders.&lt;br /&gt;
&lt;br /&gt;
=== Driver registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_CTRL|FUSE_CTRL]]&lt;br /&gt;
| 0x7000F800&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_ADDR|FUSE_REG_ADDR]]&lt;br /&gt;
| 0x7000F804&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_READ|FUSE_REG_READ]]&lt;br /&gt;
| 0x7000F808&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_WRITE|FUSE_REG_WRITE]]&lt;br /&gt;
| 0x7000F80C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD1&lt;br /&gt;
| 0x7000F810&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD2&lt;br /&gt;
| 0x7000F814&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_PGM1&lt;br /&gt;
| 0x7000F818&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_TIME_PGM2|FUSE_TIME_PGM2]]&lt;br /&gt;
| 0x7000F81C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIV2INTFC&lt;br /&gt;
| 0x7000F820&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FUSEBYPASS&lt;br /&gt;
| 0x7000F824&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATEKEYDISABLE&lt;br /&gt;
| 0x7000F828&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_DIS_PGM|FUSE_DIS_PGM]]&lt;br /&gt;
| 0x7000F82C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_WRITE_ACCESS|FUSE_WRITE_ACCESS]]&lt;br /&gt;
| 0x7000F830&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PWR_GOOD_SW&lt;br /&gt;
| 0x7000F834&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_CTRL ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Fuse command (1 = FUSE_READ; 2 = FUSE_WRITE; 3 = FUSE_SENSE)&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| Fuse power down mode flag (FUSE_CTRL_PD)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before fuse reading/writing the power down mode must be disabled.&lt;br /&gt;
FUSE_SENSE mode flushes programmed values into the [[Fuses#Cache_registers|cache registers]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_ADDR ====&lt;br /&gt;
This register takes the address of the fuse to be read/written/sensed.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_READ ====&lt;br /&gt;
This register receives the value read from the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_WRITE ====&lt;br /&gt;
This register takes the value to be written to the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_TIME_PGM2 ====&lt;br /&gt;
This register takes the fuse programming pulse (0xC0 == 19200 kHz).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_DIS_PGM ====&lt;br /&gt;
If set to 0x01, this register disables fuse programming.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_WRITE_ACCESS ====&lt;br /&gt;
If set to 0x01, this register disables software writes to the fuse driver registers.&lt;br /&gt;
&lt;br /&gt;
=== Cache registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MODE&lt;br /&gt;
| 0x7000F900&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SKU_INFO|FUSE_SKU_INFO]]&lt;br /&gt;
| 0x7000F910&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_0&lt;br /&gt;
| 0x7000F914&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_IDDQ&lt;br /&gt;
| 0x7000F918&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FT_REV&lt;br /&gt;
| 0x7000F928&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_1&lt;br /&gt;
| 0x7000F92C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_2&lt;br /&gt;
| 0x7000F930&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_0&lt;br /&gt;
| 0x7000F934&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SOC_SPEEDO_1|FUSE_SOC_SPEEDO_1]]&lt;br /&gt;
| 0x7000F938&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_2&lt;br /&gt;
| 0x7000F93C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_IDDQ&lt;br /&gt;
| 0x7000F940&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FA|FUSE_FA]]&lt;br /&gt;
| 0x7000F948&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY0]]&lt;br /&gt;
| 0x7000F964&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY1]]&lt;br /&gt;
| 0x7000F968&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY2]]&lt;br /&gt;
| 0x7000F96C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY3]]&lt;br /&gt;
| 0x7000F970&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY4]]&lt;br /&gt;
| 0x7000F974&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY5]]&lt;br /&gt;
| 0x7000F978&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY6]]&lt;br /&gt;
| 0x7000F97C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY7]]&lt;br /&gt;
| 0x7000F980&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_1&lt;br /&gt;
| 0x7000F984&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_2&lt;br /&gt;
| 0x7000F988&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CP_REV&lt;br /&gt;
| 0x7000F990&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_0&lt;br /&gt;
| 0x7000F998&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FIRST_BOOTROM_PATCH_SIZE_REG&lt;br /&gt;
| 0x7000F99C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURITY_MODE&lt;br /&gt;
| 0x7000F9A0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY0]]&lt;br /&gt;
| 0x7000F9A4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY1]]&lt;br /&gt;
| 0x7000F9A8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY2]]&lt;br /&gt;
| 0x7000F9AC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY3]]&lt;br /&gt;
| 0x7000F9B0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY4]]&lt;br /&gt;
| 0x7000F9B4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_BOOT_DEVICE_INFO&lt;br /&gt;
| 0x7000F9BC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_SW|FUSE_RESERVED_SW]]&lt;br /&gt;
| 0x7000F9C0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VP8_ENABLE&lt;br /&gt;
| 0x7000F9C4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]]&lt;br /&gt;
| 0x7000F9C8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]]&lt;br /&gt;
| 0x7000F9CC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]]&lt;br /&gt;
| 0x7000F9D0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM3|FUSE_RESERVED_ODM3]]&lt;br /&gt;
| 0x7000F9D4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]&lt;br /&gt;
| 0x7000F9D8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_ODM5&lt;br /&gt;
| 0x7000F9DC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]]&lt;br /&gt;
| 0x7000F9E0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]]&lt;br /&gt;
| 0x7000F9E4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_USB_CALIB&lt;br /&gt;
| 0x7000F9F0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_DIRECT_CONFIG&lt;br /&gt;
| 0x7000F9F4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VENDOR_CODE&lt;br /&gt;
| 0x7000FA00&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FAB_CODE&lt;br /&gt;
| 0x7000FA04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_0&lt;br /&gt;
| 0x7000FA08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_1&lt;br /&gt;
| 0x7000FA0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_WAFER_ID&lt;br /&gt;
| 0x7000FA10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_X_COORDINATE&lt;br /&gt;
| 0x7000FA14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_Y_COORDINATE&lt;br /&gt;
| 0x7000FA18&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SATA_CALIB&lt;br /&gt;
| 0x7000FA24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GPU_IDDQ&lt;br /&gt;
| 0x7000FA28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_3&lt;br /&gt;
| 0x7000FA2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SUBREVISION&lt;br /&gt;
| 0x7000FA48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_4&lt;br /&gt;
| 0x7000FA54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_5&lt;br /&gt;
| 0x7000FA58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_6&lt;br /&gt;
| 0x7000FA5C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_7&lt;br /&gt;
| 0x7000FA60&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_PRIV_SEC_DIS&lt;br /&gt;
| 0x7000FA64&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PKC_DISABLE|FUSE_PKC_DISABLE]]&lt;br /&gt;
| 0x7000FA68&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_COMMON&lt;br /&gt;
| 0x7000FA80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DEBUG_AUTH_OVERRIDE&lt;br /&gt;
| 0x7000FA9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_8&lt;br /&gt;
| 0x7000FAD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INDEX&lt;br /&gt;
| 0x7000FAE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB&lt;br /&gt;
| 0x7000FB04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_9&lt;br /&gt;
| 0x7000FB1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB_EXT&lt;br /&gt;
| 0x7000FB50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_0&lt;br /&gt;
| 0x7000FB80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_1&lt;br /&gt;
| 0x7000FB84&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_2&lt;br /&gt;
| 0x7000FB88&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_3&lt;br /&gt;
| 0x7000FB8C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_4&lt;br /&gt;
| 0x7000FB90&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_5|FUSE_SPARE_BIT_5]]&lt;br /&gt;
| 0x7000FB94&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_6&lt;br /&gt;
| 0x7000FB98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_7&lt;br /&gt;
| 0x7000FB9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_8&lt;br /&gt;
| 0x7000FBA0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_9&lt;br /&gt;
| 0x7000FBA4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_10&lt;br /&gt;
| 0x7000FBA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_11&lt;br /&gt;
| 0x7000FBAC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_12&lt;br /&gt;
| 0x7000FBB0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_13&lt;br /&gt;
| 0x7000FBB4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_14&lt;br /&gt;
| 0x7000FBB8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_15&lt;br /&gt;
| 0x7000FBBC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_16&lt;br /&gt;
| 0x7000FBC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_17&lt;br /&gt;
| 0x7000FBC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_18&lt;br /&gt;
| 0x7000FBC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_19&lt;br /&gt;
| 0x7000FBCC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_20&lt;br /&gt;
| 0x7000FBD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_21&lt;br /&gt;
| 0x7000FBD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_22&lt;br /&gt;
| 0x7000FBD8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_23&lt;br /&gt;
| 0x7000FBDC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_24&lt;br /&gt;
| 0x7000FBE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_25&lt;br /&gt;
| 0x7000FBE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_26&lt;br /&gt;
| 0x7000FBE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_27&lt;br /&gt;
| 0x7000FBEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_28&lt;br /&gt;
| 0x7000FBF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_29&lt;br /&gt;
| 0x7000FBF4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_30&lt;br /&gt;
| 0x7000FBF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_31&lt;br /&gt;
| 0x7000FBFC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SKU_INFO ====&lt;br /&gt;
Stores the SKU ID (must be 0x83).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FA ====&lt;br /&gt;
Stores failure analysis mode.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SOC_SPEEDO_1 ====&lt;br /&gt;
Stores the bootrom patch version.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM0 ====&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM1 ====&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| [5.0.0+] Used as key generation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM3 ====&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Unit type (3 = debug; 0 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown config (must be 1 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-3.0.2] 3-5&lt;br /&gt;
[4.0.0+] 3-7&lt;br /&gt;
| DRAM id&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown config mask (must be 0 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Unit type mask (0 = debug; 1 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [4.0.0+] Kiosk mode (0 = retail; 1 = kiosk)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [5.0.0+] SoC variant (0 = T210; 1 = T214)&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| [4.0.0+] New unit type&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This stores some device configuration parameters.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM6 ====&lt;br /&gt;
This register returns the value programmed into index 0x3A of the fuse array. &lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM7 ====&lt;br /&gt;
This register returns the value programmed into index 0x3C of the fuse array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_5 ====&lt;br /&gt;
Must be non-zero on retail units, otherwise the first bootloader panics.&lt;br /&gt;
On debug units it can be zero, which tells the bootloader to choose from two debug master key seeds. If set to non-zero on a debug unit, it tells the bootloader to choose from two retail master key seeds (only the last one matches the retail master key seed).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY ====&lt;br /&gt;
This stores the 160-bit private key (128 bit SBK + 32-bit device key).&lt;br /&gt;
Reads to these registers after the SBK is locked out produce all-FF output.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PUBLIC_KEY ====&lt;br /&gt;
This stores the SHA256 hash of the 2048-bit RSA key expected at BCT+0x210.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Boot device&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Skip device selection straps (0 = don&#039;t skip; 1 = skip)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ENABLE_CHARGER_DETECT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ENABLE_WATCHDOG&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Forced RCM two button mode (0 = Only VOLUME_UP; 1 = VOLUME_UP + HOME)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| RCM USB controller mode (0 = USB 2.0; 1 = XUSB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This caches the value of the sw_reserved fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PKC_DISABLE ====&lt;br /&gt;
This caches the value of the pkc_disable fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
== eFuses ==&lt;br /&gt;
The actual hardware fuses can be programmed through the fuse driver after enabling fuse programming.&lt;br /&gt;
&lt;br /&gt;
Below is a list of common fuse indexes used by Tegra devices (and applicable to the Switch).&lt;br /&gt;
Note that the indexes are relative to the start of the fuse array and each element is a 4 byte word. A single fuse write operation always writes the same word at both fuse_array + 0 (PRIMARY_ALIAS) and fuse_array + 1 (REDUNDANT_ALIAS).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Index&lt;br /&gt;
!  Bits&lt;br /&gt;
|-&lt;br /&gt;
| jtag_disable&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_production_mode&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_lock&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| public_key&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| secure_boot_key&lt;br /&gt;
| 0x22&lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| device_key&lt;br /&gt;
| 0x2A&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_cfg&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_sel&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| sw_reserved&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| ignore_dev_sel_straps&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#odm_reserved|odm_reserved]]&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| pkc_disable&lt;br /&gt;
| 0x52&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#bootrom_ipatch|bootrom_ipatch]]&lt;br /&gt;
| 0x72&lt;br /&gt;
| 624&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== odm_reserved ===&lt;br /&gt;
The first bootloader only burns fuses in this region.&lt;br /&gt;
Both fuse indexes 0x3A (odm_reserved + 0x0C) and 0x3C (odm_reserved + 0x0E) are used for anti-downgrade control. These fuses will have their values cached into [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]] and [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]].&lt;br /&gt;
&lt;br /&gt;
=== bootrom_ipatch ===&lt;br /&gt;
Tegra210 based hardware such as the Switch provides support for bootrom patches. The patch data is burned to the hardware fuse array using a specific format (see [https://gist.github.com/shuffle2/f8728159da100e9df2606d43925de0af shuffle2&#039;s ipatch decoder]). The bootrom reads these fuses in order to initialize the IPATCH hardware, which allows overriding data returned for code and data fetches done by BPMP. The revision stored in FUSE_CP_REV indicates the unique set of values stored in ipatch fuses.&lt;br /&gt;
&lt;br /&gt;
The following represents the patch data dumped from a Switch console:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
RAM:00000000 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000 irom_svc_dispatch&lt;br /&gt;
RAM:00000000   STMFD   SP!, {R0-R2}                  ; ipatches:&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 7d9e2000     fb3c     2000 : movs r0, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000004   MOV     R2, LR&lt;br /&gt;
RAM:00000008   SUB     R2, R2, #2&lt;br /&gt;
RAM:0000000C   LDR     R2, [R2]&lt;br /&gt;
RAM:00000010   AND     R2, R2, #0xFF&lt;br /&gt;
RAM:00000014   MOV     R2, R2,LSL#1&lt;br /&gt;
RAM:00000018   LDR     R0, =0x1007B0&lt;br /&gt;
RAM:0000001C   LDR     R1, =0x1007F8&lt;br /&gt;
RAM:00000020   SUB     R1, R1, R0&lt;br /&gt;
RAM:00000024   LDR     R0, =0x40004C30&lt;br /&gt;
RAM:00000028   ADD     R0, R0, R1&lt;br /&gt;
RAM:0000002C   ADD     R2, R2, R0&lt;br /&gt;
RAM:00000030   ORR     R2, R2, #1&lt;br /&gt;
RAM:00000034   LDMFD   SP!, {R0,R1}&lt;br /&gt;
RAM:00000038   BX      R2&lt;br /&gt;
RAM:00000038 ; End of function irom_svc_dispatch&lt;br /&gt;
RAM:00000038&lt;br /&gt;
RAM:00000038 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000003C dword_3C DCD 0x1007B0                   ; DATA XREF: irom_svc_dispatch+18↑r&lt;br /&gt;
RAM:00000040 dword_40 DCD 0x1007F8                   ; DATA XREF: irom_svc_dispatch+1C↑r&lt;br /&gt;
RAM:00000044 dword_44 DCD 0x40004C30                 ; DATA XREF: irom_svc_dispatch+24↑r&lt;br /&gt;
RAM:00000048   CODE16&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 sub_48&lt;br /&gt;
RAM:00000048   MOVS    R2, #0                        ; 0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:0000004A   MVNS    R2, R2&lt;br /&gt;
RAM:0000004C   LDR     R1, =0x60006410&lt;br /&gt;
RAM:0000004E   STR     R2, [R1,#0x30]&lt;br /&gt;
RAM:00000050   STR     R2, [R1,#0x38]&lt;br /&gt;
RAM:00000052   LDR     R1, =0x600060F8&lt;br /&gt;
RAM:00000054   STR     R2, [R1]&lt;br /&gt;
RAM:00000056   STR     R2, [R1,#4]&lt;br /&gt;
RAM:00000058   LDR     R1, =0x60006284&lt;br /&gt;
RAM:0000005A   STR     R2, [R1]&lt;br /&gt;
RAM:0000005C   STR     R2, [R1,#0x18]&lt;br /&gt;
RAM:0000005E   ADDS    R1, #0x80&lt;br /&gt;
RAM:00000060   ADDS    R1, #0x1C&lt;br /&gt;
RAM:00000062   STR     R2, [R1]&lt;br /&gt;
RAM:00000064   STR     R2, [R1,#8]&lt;br /&gt;
RAM:00000066   STR     R2, [R1,#0x10]&lt;br /&gt;
RAM:00000068   ADDS    R1, #0x80&lt;br /&gt;
RAM:0000006A   STR     R2, [R1]&lt;br /&gt;
RAM:0000006C   STR     R2, [R1,#4]&lt;br /&gt;
RAM:0000006E   LDR     R1, =0x60006554&lt;br /&gt;
RAM:00000070   STR     R2, [R1]&lt;br /&gt;
RAM:00000072   MOVS    R2, #0xA0000000&lt;br /&gt;
RAM:00000076   LDR     R1, =0x60006148&lt;br /&gt;
RAM:00000078   STR     R2, [R1]&lt;br /&gt;
RAM:0000007A   ADDS    R1, #0x38 ; &#039;8&#039;&lt;br /&gt;
RAM:0000007C   STR     R2, [R1]&lt;br /&gt;
RAM:0000007E   MOVS    R2, #0xE0000000&lt;br /&gt;
RAM:00000082   LDR     R1, =0x600066A0&lt;br /&gt;
RAM:00000084   STR     R2, [R1]&lt;br /&gt;
RAM:00000086   MOVS    R1, #0&lt;br /&gt;
RAM:00000088   MOVS    R0, #0xE&lt;br /&gt;
RAM:0000008A   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000008A ; End of function sub_48&lt;br /&gt;
RAM:0000008A&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C sub_8C&lt;br /&gt;
RAM:0000008C   LDR     R0, [R1,#0x18]                ; 1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:0000008E   MOVS    R2, #1&lt;br /&gt;
RAM:00000090   ORRS    R0, R2&lt;br /&gt;
RAM:00000092   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:00000092 ; End of function sub_8C&lt;br /&gt;
RAM:00000092&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 sub_94&lt;br /&gt;
RAM:00000094   LDR     R2, [R4,#0x50]                ; 2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000096   ADDS    R2, R2, #2&lt;br /&gt;
RAM:00000098   STR     R2, [R4,#0x50]&lt;br /&gt;
RAM:0000009A   SUBS    R1, #0x80&lt;br /&gt;
RAM:0000009C   STR     R1, [R4,#0x34]&lt;br /&gt;
RAM:0000009E   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000009E ; End of function sub_94&lt;br /&gt;
RAM:0000009E&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 sub_A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; FUNCTION CHUNK AT RAM:00000148 SIZE 00000004 BYTES&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0   MOVS    R0, #0x70000000               ; 4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:000000A4   LDR     R6, =dword_7000EF14&lt;br /&gt;
RAM:000000A6   LDR     R2, =dword_7000E5B4&lt;br /&gt;
RAM:000000A8   LDR     R2, [R2]&lt;br /&gt;
RAM:000000AA   CMP     R2, #0&lt;br /&gt;
RAM:000000AC   BEQ     loc_B4&lt;br /&gt;
RAM:000000AE   LDR     R2, [R6]&lt;br /&gt;
RAM:000000B0   STR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B2   B       loc_BC&lt;br /&gt;
RAM:000000B4 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:000000B4&lt;br /&gt;
RAM:000000B4 loc_B4                                  ; CODE XREF: sub_A0+C↑j&lt;br /&gt;
RAM:000000B4   LDR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B6   LSRS    R0, R0, #0x12&lt;br /&gt;
RAM:000000B8   ORRS    R2, R0&lt;br /&gt;
RAM:000000BA   STR     R2, [R6]&lt;br /&gt;
RAM:000000BC&lt;br /&gt;
RAM:000000BC loc_BC                                  ; CODE XREF: sub_A0+12↑j&lt;br /&gt;
RAM:000000BC   LDR     R6, =dword_7000E9C0&lt;br /&gt;
RAM:000000BE   LDR     R0, [R6]&lt;br /&gt;
RAM:000000C0   MOVS    R2, #0x4000&lt;br /&gt;
RAM:000000C4   ORRS    R2, R0&lt;br /&gt;
RAM:000000C6   STR     R2, [R6]&lt;br /&gt;
RAM:000000C8   LDR     R0, [R5,#0x10]&lt;br /&gt;
RAM:000000CA   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000CA ; End of function sub_A0&lt;br /&gt;
RAM:000000CA&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC sub_CC&lt;br /&gt;
RAM:000000CC   MOVS    R2, #0xF000000                ; 5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:000000D0   BICS    R1, R2&lt;br /&gt;
RAM:000000D2   STR     R1, [R4,#0x10]&lt;br /&gt;
RAM:000000D4   LDR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000D6   MOVS    R2, #7&lt;br /&gt;
RAM:000000D8   BICS    R1, R2&lt;br /&gt;
RAM:000000DA   STR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000DC   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000DC ; End of function sub_CC&lt;br /&gt;
RAM:000000DC&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE sub_DE&lt;br /&gt;
RAM:000000DE   LDR     R2, =dword_7000FA9C           ; 6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:000000E0   LDR     R2, [R2]&lt;br /&gt;
RAM:000000E2   LSRS    R2, R2, #8&lt;br /&gt;
RAM:000000E4   LSLS    R2, R2, #1&lt;br /&gt;
RAM:000000E6   LDR     R1, [R4]&lt;br /&gt;
RAM:000000E8   BICS    R1, R2&lt;br /&gt;
RAM:000000EA   STR     R1, [R4]&lt;br /&gt;
RAM:000000EC   CMP     R0, #0&lt;br /&gt;
RAM:000000EE   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000EE ; End of function sub_DE&lt;br /&gt;
RAM:000000EE&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 sub_F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 arg_0=  0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0   LDR     R0, =0x400049F0               ; 7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:000000F2   LDR     R2, [R0]&lt;br /&gt;
RAM:000000F4   STR     R2, [SP,#arg_0]&lt;br /&gt;
RAM:000000F6   LDR     R0, =0x40010000&lt;br /&gt;
RAM:000000F8   LSRS    R2, R2, #17&lt;br /&gt;
RAM:000000FA   BEQ     pop_r2_mov_pc_lr              ; if ([0x400049F0] &amp;gt;&amp;gt; 17) == 0) {&lt;br /&gt;
RAM:000000FA                                         ;   r2 = [0x400049F0];&lt;br /&gt;
RAM:000000FA                                         ; } else {&lt;br /&gt;
RAM:000000FC   LDR     R0, =APBDEV_PMC_CNTRL_0&lt;br /&gt;
RAM:000000FE   STR     R4, [R0]                      ;  write APBDEV_PMC_CNTRL&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000100 loc_100                                 ; CODE XREF: sub_F0:loc_100↓j&lt;br /&gt;
RAM:00000100   B       loc_100                       ;  hang&lt;br /&gt;
RAM:00000100 ; End of function sub_F0                ; }&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 sub_102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 arg_0=  0&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102   LDR     R2, =0x40010220               ; 8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000104   STR     R2, [SP,#arg_0]               ; set r2 retval = [0x40010220]&lt;br /&gt;
RAM:00000106   LDR     R2, [R2,#0x18]&lt;br /&gt;
RAM:00000108   ADDS    R0, #0xFC&lt;br /&gt;
RAM:0000010A   STR     R2, [R0,#0x1C]                ; [r0+0x118] = [0x40010220 + 0x18]&lt;br /&gt;
RAM:0000010C   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000010C ; End of function sub_102&lt;br /&gt;
RAM:0000010C&lt;br /&gt;
RAM:0000010C ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000010E   DCB    0&lt;br /&gt;
RAM:0000010F   DCB    0&lt;br /&gt;
RAM:00000110 off_110 DCD 0x60006410                  ; DATA XREF: sub_48+4↑r&lt;br /&gt;
RAM:00000114 off_114 DCD 0x600060F8                  ; DATA XREF: sub_48+A↑r&lt;br /&gt;
RAM:00000118 off_118 DCD 0x60006284                  ; DATA XREF: sub_48+10↑r&lt;br /&gt;
RAM:0000011C off_11C DCD 0x60006554                  ; DATA XREF: sub_48+26↑r&lt;br /&gt;
RAM:00000120 off_120 DCD 0x60006148                  ; DATA XREF: sub_48+2E↑r&lt;br /&gt;
RAM:00000124 off_124 DCD 0x600066A0                  ; DATA XREF: sub_48+3A↑r&lt;br /&gt;
RAM:00000128 off_128 DCD dword_7000EF14              ; DATA XREF: sub_A0+4↑r&lt;br /&gt;
RAM:0000012C off_12C DCD dword_7000E5B4              ; DATA XREF: sub_A0+6↑r&lt;br /&gt;
RAM:00000130 off_130 DCD dword_7000E9C0              ; DATA XREF: sub_A0:loc_BC↑r&lt;br /&gt;
RAM:00000134 off_134 DCD dword_7000FA9C              ; DATA XREF: sub_DE↑r&lt;br /&gt;
RAM:00000138 off_138 DCD 0x400049F0                  ; DATA XREF: sub_F0↑r&lt;br /&gt;
RAM:0000013C dword_13C DCD 0x40010000                ; DATA XREF: sub_F0+6↑r&lt;br /&gt;
RAM:00000140 off_140 DCD APBDEV_PMC_CNTRL_0          ; DATA XREF: sub_F0+C↑r&lt;br /&gt;
RAM:00000144 off_144 DCD 0x40010220                  ; DATA XREF: sub_102↑r&lt;br /&gt;
RAM:00000148 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:00000148 ; START OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
RAM:00000148&lt;br /&gt;
RAM:00000148 pop_r2_mov_pc_lr                        ; CODE XREF: sub_48+42↑j&lt;br /&gt;
RAM:00000148                                         ; sub_8C+6↑j ...&lt;br /&gt;
RAM:00000148   POP     {R2}&lt;br /&gt;
RAM:0000014A   MOV     PC, LR&lt;br /&gt;
RAM:0000014A ; END OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last 4 patches are exclusive to the Switch, while the remaining ones are often included in most Tegra210 based devices.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 0 ====&lt;br /&gt;
This patch configures clock enables and clock gate overrides for new hardware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 CLK_ENB_H_SET = 0x60006328;&lt;br /&gt;
 u32 CLK_ENB_L_SET = 0x60006320;&lt;br /&gt;
 u32 CLK_ENB_U_SET = 0x60006330; &lt;br /&gt;
 u32 CLK_ENB_V_SET = 0x60006440;&lt;br /&gt;
 u32 CLK_ENB_W_SET = 0x60006448;&lt;br /&gt;
 u32 CLK_ENB_X_SET = 0x60006284;&lt;br /&gt;
 u32 CLK_ENB_Y_SET = 0x6000629C;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRA = 0x600060F8;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRB = 0x600060FC;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRC = 0x600063A0;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRD = 0x600063A4;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRE = 0x60006554;&lt;br /&gt;
 u32 CLK_SOURCE_VI = 0x60006148;&lt;br /&gt;
 u32 CLK_SOURCE_HOST1X = 0x60006180;&lt;br /&gt;
 u32 CLK_SOURCE_NVENC = 0x600066A0; &lt;br /&gt;
&lt;br /&gt;
 // Set all clock enables and overrides&lt;br /&gt;
 *(u32 *)CLK_ENB_V_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_W_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRA = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRB = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_X_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_Y_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_L_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_H_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_U_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRC = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRD = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRE = 0xFFFFFFFF;&lt;br /&gt;
&lt;br /&gt;
 // Set VI, HOST1X and NVENC clock sources to CLK_M&lt;br /&gt;
 *(u32 *)CLK_SOURCE_VI = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_HOST1X = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_NVENC = 0xE0000000;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
&lt;br /&gt;
     MOVS    R1, #0&lt;br /&gt;
     MOVS    R0, #0xE&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 1 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
LP0 resume code expects APBDEV_PMC_SCRATCH190_0 to be set to 0x01, but the bootrom didn&#039;t set it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH190_0 = 0x7000EC18;&lt;br /&gt;
 u32 pmc_scratch190_val = *(u32 *)APBDEV_PMC_SCRATCH190_0;&lt;br /&gt;
 &lt;br /&gt;
 return (pmc_scratch190_val | 0x01);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 2 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_SPARE_CFG0_0 = 0x7D000834;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
 &lt;br /&gt;
 // Increase UTMIP_HSSQUELCH_LEVEL_NEW by 0x02&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 += 0x02;&lt;br /&gt;
&lt;br /&gt;
 // Clear FUSE_HS_IREF_CAP_CFG&lt;br /&gt;
 *(u32 *)USB1_UTMIP_SPARE_CFG0_0 = ((*(u32 *)USB1_UTMIP_SPARE_CFG0_0 &amp;amp; ~(0x118)) - 0x80);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 3 ====&lt;br /&gt;
This patch pertains to XHCI IRQ clearing checks and forces a result code to be 0.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 4 ====&lt;br /&gt;
This patch allows backing up and restoring strapping options for warmboot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH0_0 = 0x7000E450;&lt;br /&gt;
 u32 APBDEV_PMC_RST_STATUS_0 = 0x7000E5B4;&lt;br /&gt;
 u32 APBDEV_PMC_SEC_DISABLE8_0 = 0x7000E9C0;&lt;br /&gt;
 u32 APBDEV_PMC_SECURE_SCRATCH111_0 = 0x7000EF14;&lt;br /&gt;
 u32 APB_MISC_PP_STRAPPING_OPT_A_0 = 0x70000008; &lt;br /&gt;
&lt;br /&gt;
 u32 reset_status = *(u32 *)APBDEV_PMC_RST_STATUS_0;&lt;br /&gt;
&lt;br /&gt;
 // Check for regular power on&lt;br /&gt;
 if (reset_status == 0)&lt;br /&gt;
 {    &lt;br /&gt;
     // Set all buttons in RCM_STRAPS and backup to PMC scratch&lt;br /&gt;
     *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0 = (*(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 | 0x1C00);&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
     // Restore strapping options from PMC scratch&lt;br /&gt;
     *(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 = *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // Disable write access to APBDEV_PMC_SECURE_SCRATCH111_0&lt;br /&gt;
 *(u32 *)APBDEV_PMC_SEC_DISABLE8_0 |= 0x4000;&lt;br /&gt;
 &lt;br /&gt;
 return *(u32 *)APBDEV_PMC_SCRATCH0_0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 5 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_HSRX_CFG0_0 = 0x7D000810;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
&lt;br /&gt;
 // Clear UTMIP_IDLE_WAIT, UTMIP_ELASTIC_LIMIT and UTMIP_PCOUNT_UPDN_DIV,&lt;br /&gt;
 // and set UTMIP_IDLE_WAIT to 0x11 and UTMIP_ELASTIC_LIMIT to 0x10 &lt;br /&gt;
 *(u32 *)USB1_UTMIP_HSRX_CFG0_0 = ((*(u32 *)USB1_UTMIP_HSRX_CFG0_0 &amp;amp; ~(0xF8000) + 0x88000 &amp;amp; ~(0x7C00) + 0x4000) &amp;amp; ~(0xF000000));&lt;br /&gt;
 &lt;br /&gt;
 // Clear UTMIP_HSSQUELCH_LEVEL_NEW&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 &amp;amp;= ~(0x07);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 6 ====&lt;br /&gt;
This patch is a factory backdoor.&lt;br /&gt;
&lt;br /&gt;
It allows controlling the debug authentication configuration using a fuse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 FUSE_DEBUG_AUTH_OVERRIDE = 0x7000FA9C;&lt;br /&gt;
&lt;br /&gt;
 u32 debug_auth_override_val = *(u32 *)FUSE_DEBUG_AUTH_OVERRIDE;&lt;br /&gt;
 debug_auth_override_val = ((debug_auth_override_val &amp;gt;&amp;gt; 0x08) &amp;lt;&amp;lt; 0x01);&lt;br /&gt;
&lt;br /&gt;
 // Override debug authentication value stored in IRAM&lt;br /&gt;
 *(u32 *)0x400028E4 &amp;amp;= ~(debug_auth_override_val);&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     CMP     R0, #0&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 7 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It prevents overflowing IRAM (0x40010000) when copying the warmboot binary from DRAM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_CNTRL_0 = 0x7000E400;&lt;br /&gt;
 &lt;br /&gt;
 u32 warmboot_header_addr = 0x400049F0;&lt;br /&gt;
 u32 warmboot_bin_size = *(u32 *)warmboot_bin_header_addr;&lt;br /&gt;
 &lt;br /&gt;
 // Invalid warmboot binary size&lt;br /&gt;
 if (warmboot_size &amp;gt;&amp;gt; 0x11)&lt;br /&gt;
 {&lt;br /&gt;
     // Assert MAIN_RST&lt;br /&gt;
     // 0x40004BF0 comes from R4 and the bootrom doesn&#039;t bother to change it&lt;br /&gt;
     *(u32 *)APBDEV_PMC_CNTRL_0 = 0x40004BF0;&lt;br /&gt;
&lt;br /&gt;
     // Deadlock&lt;br /&gt;
     while(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R0, =0x40010000&lt;br /&gt;
     LDR     R2, [warmboot_bin_header_addr]&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 8 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It sets the correct warmboot binary entrypoint address for RSA signature verification, which would be done in DRAM instead of IRAM without this patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 warmboot_addr_ptr = 0x40010238;&lt;br /&gt;
 u32 warmboot_entry_addr_ptr = 0x40004C28;&lt;br /&gt;
&lt;br /&gt;
 *(u32 *)warmboot_entry_addr_ptr = *(u32 *)warmboot_addr_ptr;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R2, [warmboot_addr_ptr]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatches 9 and 10 ====&lt;br /&gt;
These patches modify the 256-bit Secure Provisioning AES key with index 0x3A.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 11 ====&lt;br /&gt;
This patch pertains to the [[Security_Engine|Security Engine]] context restore process and forces SE_OPERATION_UNK1 to be 0x01.&lt;br /&gt;
&lt;br /&gt;
== Anti-downgrade ==&lt;br /&gt;
The first bootloader verifies [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]] to prevent downgrading.&lt;br /&gt;
How many fuses are expected to be burnt depends the device&#039;s unit type as below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1-3.0.2&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0-4.1.0&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0-5.1.0&lt;br /&gt;
| 6&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0&lt;br /&gt;
| 7&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If too many fuses are burnt the bootloader will panic immediately.&lt;br /&gt;
&lt;br /&gt;
If too few are burnt, the bootloader will enable fuse programming and write the expected value to fuse indexes 0x3A and 0x3C. Afterwards, fuse programming is disabled and the panic value 0x21 is written to PMC_SCRATCH200 register (0x7000EC40). Finally, the watchdog timer is initialized and programmed to force a reset.&lt;br /&gt;
&lt;br /&gt;
On a subsequent boot, after the anti-downgrade fuses are checked again, the PMC_RST_STATUS register (0x7000E5B4) is checked and if set to 0x01 (watchdog reset) the PMC_SCRATCH200 register (0x7000EC40) will be checked for the panic value 0x21.&lt;br /&gt;
PMC_RST_STATUS will only be set back to 0 (power on reset) if the fuse count matches the new expected value, otherwise the system will panic.&lt;/div&gt;</summary>
		<author><name>Lacius</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Fuses&amp;diff=4844</id>
		<title>Fuses</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Fuses&amp;diff=4844"/>
		<updated>2018-07-23T23:05:38Z</updated>

		<summary type="html">&lt;p&gt;Lacius: remove ambiguity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch makes use of Tegra&#039;s fuse driver for a number of operations. This driver is mapped to physical address 0x7000F800 with a total size of 0x400 bytes and exposes several registers for fuse programming.&lt;br /&gt;
&lt;br /&gt;
Registers from 0x7000F800 to 0x7000F800 + 0xFF can be used to directly program the hardware fuse array, while registers from 0x7000F800 + 0x100 (FUSE_CHIP_REG_START_OFFSET) to 0x7000F800 + 0x3FC (FUSE_CHIP_REG_END_OFFSET) represent cached values read from certain fuses.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Below is a list of fuse driver registers used by the Switch&#039;s bootloaders.&lt;br /&gt;
&lt;br /&gt;
=== Driver registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_CTRL|FUSE_CTRL]]&lt;br /&gt;
| 0x7000F800&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_ADDR|FUSE_REG_ADDR]]&lt;br /&gt;
| 0x7000F804&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_READ|FUSE_REG_READ]]&lt;br /&gt;
| 0x7000F808&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_WRITE|FUSE_REG_WRITE]]&lt;br /&gt;
| 0x7000F80C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD1&lt;br /&gt;
| 0x7000F810&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD2&lt;br /&gt;
| 0x7000F814&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_PGM1&lt;br /&gt;
| 0x7000F818&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_TIME_PGM2|FUSE_TIME_PGM2]]&lt;br /&gt;
| 0x7000F81C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIV2INTFC&lt;br /&gt;
| 0x7000F820&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FUSEBYPASS&lt;br /&gt;
| 0x7000F824&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATEKEYDISABLE&lt;br /&gt;
| 0x7000F828&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_DIS_PGM|FUSE_DIS_PGM]]&lt;br /&gt;
| 0x7000F82C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_WRITE_ACCESS|FUSE_WRITE_ACCESS]]&lt;br /&gt;
| 0x7000F830&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PWR_GOOD_SW&lt;br /&gt;
| 0x7000F834&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_CTRL ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Fuse command (1 = FUSE_READ; 2 = FUSE_WRITE; 3 = FUSE_SENSE)&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| Fuse power down mode flag (FUSE_CTRL_PD)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before fuse reading/writing the power down mode must be disabled.&lt;br /&gt;
FUSE_SENSE mode flushes programmed values into the [[Fuses#Cache_registers|cache registers]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_ADDR ====&lt;br /&gt;
This register takes the address of the fuse to be read/written/sensed.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_READ ====&lt;br /&gt;
This register receives the value read from the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_WRITE ====&lt;br /&gt;
This register takes the value to be written to the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_TIME_PGM2 ====&lt;br /&gt;
This register takes the fuse programming pulse (0xC0 == 19200 kHz).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_DIS_PGM ====&lt;br /&gt;
If set to 0x01, this register disables fuse programming.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_WRITE_ACCESS ====&lt;br /&gt;
If set to 0x01, this register disables software writes to the fuse driver registers.&lt;br /&gt;
&lt;br /&gt;
=== Cache registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MODE&lt;br /&gt;
| 0x7000F900&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SKU_INFO|FUSE_SKU_INFO]]&lt;br /&gt;
| 0x7000F910&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_0&lt;br /&gt;
| 0x7000F914&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_IDDQ&lt;br /&gt;
| 0x7000F918&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FT_REV&lt;br /&gt;
| 0x7000F928&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_1&lt;br /&gt;
| 0x7000F92C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_2&lt;br /&gt;
| 0x7000F930&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_0&lt;br /&gt;
| 0x7000F934&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SOC_SPEEDO_1|FUSE_SOC_SPEEDO_1]]&lt;br /&gt;
| 0x7000F938&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_2&lt;br /&gt;
| 0x7000F93C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_IDDQ&lt;br /&gt;
| 0x7000F940&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FA|FUSE_FA]]&lt;br /&gt;
| 0x7000F948&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY0]]&lt;br /&gt;
| 0x7000F964&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY1]]&lt;br /&gt;
| 0x7000F968&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY2]]&lt;br /&gt;
| 0x7000F96C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY3]]&lt;br /&gt;
| 0x7000F970&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY4]]&lt;br /&gt;
| 0x7000F974&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY5]]&lt;br /&gt;
| 0x7000F978&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY6]]&lt;br /&gt;
| 0x7000F97C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY7]]&lt;br /&gt;
| 0x7000F980&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_1&lt;br /&gt;
| 0x7000F984&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_2&lt;br /&gt;
| 0x7000F988&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CP_REV&lt;br /&gt;
| 0x7000F990&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_0&lt;br /&gt;
| 0x7000F998&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FIRST_BOOTROM_PATCH_SIZE_REG&lt;br /&gt;
| 0x7000F99C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURITY_MODE&lt;br /&gt;
| 0x7000F9A0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY0]]&lt;br /&gt;
| 0x7000F9A4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY1]]&lt;br /&gt;
| 0x7000F9A8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY2]]&lt;br /&gt;
| 0x7000F9AC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY3]]&lt;br /&gt;
| 0x7000F9B0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY4]]&lt;br /&gt;
| 0x7000F9B4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_BOOT_DEVICE_INFO&lt;br /&gt;
| 0x7000F9BC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_SW|FUSE_RESERVED_SW]]&lt;br /&gt;
| 0x7000F9C0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VP8_ENABLE&lt;br /&gt;
| 0x7000F9C4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]]&lt;br /&gt;
| 0x7000F9C8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]]&lt;br /&gt;
| 0x7000F9CC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]]&lt;br /&gt;
| 0x7000F9D0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM3|FUSE_RESERVED_ODM3]]&lt;br /&gt;
| 0x7000F9D4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]&lt;br /&gt;
| 0x7000F9D8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_ODM5&lt;br /&gt;
| 0x7000F9DC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]]&lt;br /&gt;
| 0x7000F9E0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]]&lt;br /&gt;
| 0x7000F9E4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_USB_CALIB&lt;br /&gt;
| 0x7000F9F0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_DIRECT_CONFIG&lt;br /&gt;
| 0x7000F9F4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VENDOR_CODE&lt;br /&gt;
| 0x7000FA00&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FAB_CODE&lt;br /&gt;
| 0x7000FA04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_0&lt;br /&gt;
| 0x7000FA08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_1&lt;br /&gt;
| 0x7000FA0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_WAFER_ID&lt;br /&gt;
| 0x7000FA10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_X_COORDINATE&lt;br /&gt;
| 0x7000FA14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_Y_COORDINATE&lt;br /&gt;
| 0x7000FA18&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SATA_CALIB&lt;br /&gt;
| 0x7000FA24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GPU_IDDQ&lt;br /&gt;
| 0x7000FA28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_3&lt;br /&gt;
| 0x7000FA2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SUBREVISION&lt;br /&gt;
| 0x7000FA48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_4&lt;br /&gt;
| 0x7000FA54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_5&lt;br /&gt;
| 0x7000FA58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_6&lt;br /&gt;
| 0x7000FA5C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_7&lt;br /&gt;
| 0x7000FA60&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_PRIV_SEC_DIS&lt;br /&gt;
| 0x7000FA64&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PKC_DISABLE|FUSE_PKC_DISABLE]]&lt;br /&gt;
| 0x7000FA68&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_COMMON&lt;br /&gt;
| 0x7000FA80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DEBUG_AUTH_OVERRIDE&lt;br /&gt;
| 0x7000FA9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_8&lt;br /&gt;
| 0x7000FAD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INDEX&lt;br /&gt;
| 0x7000FAE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB&lt;br /&gt;
| 0x7000FB04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_9&lt;br /&gt;
| 0x7000FB1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB_EXT&lt;br /&gt;
| 0x7000FB50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_0&lt;br /&gt;
| 0x7000FB80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_1&lt;br /&gt;
| 0x7000FB84&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_2&lt;br /&gt;
| 0x7000FB88&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_3&lt;br /&gt;
| 0x7000FB8C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_4&lt;br /&gt;
| 0x7000FB90&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_5|FUSE_SPARE_BIT_5]]&lt;br /&gt;
| 0x7000FB94&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_6&lt;br /&gt;
| 0x7000FB98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_7&lt;br /&gt;
| 0x7000FB9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_8&lt;br /&gt;
| 0x7000FBA0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_9&lt;br /&gt;
| 0x7000FBA4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_10&lt;br /&gt;
| 0x7000FBA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_11&lt;br /&gt;
| 0x7000FBAC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_12&lt;br /&gt;
| 0x7000FBB0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_13&lt;br /&gt;
| 0x7000FBB4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_14&lt;br /&gt;
| 0x7000FBB8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_15&lt;br /&gt;
| 0x7000FBBC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_16&lt;br /&gt;
| 0x7000FBC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_17&lt;br /&gt;
| 0x7000FBC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_18&lt;br /&gt;
| 0x7000FBC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_19&lt;br /&gt;
| 0x7000FBCC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_20&lt;br /&gt;
| 0x7000FBD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_21&lt;br /&gt;
| 0x7000FBD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_22&lt;br /&gt;
| 0x7000FBD8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_23&lt;br /&gt;
| 0x7000FBDC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_24&lt;br /&gt;
| 0x7000FBE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_25&lt;br /&gt;
| 0x7000FBE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_26&lt;br /&gt;
| 0x7000FBE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_27&lt;br /&gt;
| 0x7000FBEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_28&lt;br /&gt;
| 0x7000FBF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_29&lt;br /&gt;
| 0x7000FBF4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_30&lt;br /&gt;
| 0x7000FBF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_31&lt;br /&gt;
| 0x7000FBFC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SKU_INFO ====&lt;br /&gt;
Stores the SKU ID (must be 0x83).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FA ====&lt;br /&gt;
Stores failure analysis mode.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SOC_SPEEDO_1 ====&lt;br /&gt;
Stores the bootrom patch version.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM0 ====&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM1 ====&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| [5.0.0+] Used as key generation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM3 ====&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Unit type (3 = debug; 0 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown config (must be 1 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-3.0.2] 3-5&lt;br /&gt;
[4.0.0+] 3-7&lt;br /&gt;
| DRAM id&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown config mask (must be 0 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Unit type mask (0 = debug; 1 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [4.0.0+] Kiosk mode (0 = retail; 1 = kiosk)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [5.0.0+] SoC variant (0 = T210; 1 = T214)&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| [4.0.0+] New unit type&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This stores some device configuration parameters.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM6 ====&lt;br /&gt;
This register returns the value programmed into index 0x3A of the fuse array. &lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM7 ====&lt;br /&gt;
This register returns the value programmed into index 0x3C of the fuse array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_5 ====&lt;br /&gt;
Must be non-zero on retail units, otherwise the first bootloader panics.&lt;br /&gt;
On debug units it can be zero, which tells the bootloader to choose from two debug master key seeds. If set to non-zero on a debug unit, it tells the bootloader to choose from two retail master key seeds (only the last one matches the retail master key seed).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY ====&lt;br /&gt;
This stores the 160-bit private key (128 bit SBK + 32-bit device key).&lt;br /&gt;
Reads to these registers after the SBK is locked out produce all-FF output.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PUBLIC_KEY ====&lt;br /&gt;
This stores the SHA256 hash of the 2048-bit RSA key expected at BCT+0x210.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Boot device&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Skip device selection straps (0 = don&#039;t skip; 1 = skip)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ENABLE_CHARGER_DETECT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ENABLE_WATCHDOG&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Forced RCM two button mode (0 = Only VOLUME_UP; 1 = VOLUME_UP + HOME)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| RCM USB controller mode (0 = USB 2.0; 1 = XUSB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This caches the value of the sw_reserved fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PKC_DISABLE ====&lt;br /&gt;
This caches the value of the pkc_disable fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
== eFuses ==&lt;br /&gt;
The actual hardware fuses can be programmed through the fuse driver after enabling fuse programming.&lt;br /&gt;
&lt;br /&gt;
Below is a list of common fuse indexes used by Tegra devices (and applicable to the Switch).&lt;br /&gt;
Note that the indexes are relative to the start of the fuse array and each element is a 4 byte word. A single fuse write operation always writes the same word at both fuse_array + 0 (PRIMARY_ALIAS) and fuse_array + 1 (REDUNDANT_ALIAS).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Index&lt;br /&gt;
!  Bits&lt;br /&gt;
|-&lt;br /&gt;
| jtag_disable&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_production_mode&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_lock&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| public_key&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| secure_boot_key&lt;br /&gt;
| 0x22&lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| device_key&lt;br /&gt;
| 0x2A&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_cfg&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_sel&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| sw_reserved&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| ignore_dev_sel_straps&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#odm_reserved|odm_reserved]]&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| pkc_disable&lt;br /&gt;
| 0x52&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#bootrom_ipatch|bootrom_ipatch]]&lt;br /&gt;
| 0x72&lt;br /&gt;
| 624&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== odm_reserved ===&lt;br /&gt;
The first bootloader only burns fuses in this region.&lt;br /&gt;
Both fuse indexes 0x3A (odm_reserved + 0x0C) and 0x3C (odm_reserved + 0x0E) are used for anti-downgrade control. These fuses will have their values cached into [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]] and [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]].&lt;br /&gt;
&lt;br /&gt;
=== bootrom_ipatch ===&lt;br /&gt;
Tegra210 based hardware such as the Switch provides support for bootrom patches. The patch data is burned to the hardware fuse array using a specific format (see [https://gist.github.com/shuffle2/f8728159da100e9df2606d43925de0af shuffle2&#039;s ipatch decoder]). The bootrom reads these fuses in order to initialize the IPATCH hardware, which allows overriding data returned for code and data fetches done by BPMP. The revision stored in FUSE_CP_REV indicates the unique set of values stored in ipatch fuses.&lt;br /&gt;
&lt;br /&gt;
The following represents the patch data dumped from a Switch console:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
RAM:00000000 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000 irom_svc_dispatch&lt;br /&gt;
RAM:00000000   STMFD   SP!, {R0-R2}                  ; ipatches:&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 7d9e2000     fb3c     2000 : movs r0, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000004   MOV     R2, LR&lt;br /&gt;
RAM:00000008   SUB     R2, R2, #2&lt;br /&gt;
RAM:0000000C   LDR     R2, [R2]&lt;br /&gt;
RAM:00000010   AND     R2, R2, #0xFF&lt;br /&gt;
RAM:00000014   MOV     R2, R2,LSL#1&lt;br /&gt;
RAM:00000018   LDR     R0, =0x1007B0&lt;br /&gt;
RAM:0000001C   LDR     R1, =0x1007F8&lt;br /&gt;
RAM:00000020   SUB     R1, R1, R0&lt;br /&gt;
RAM:00000024   LDR     R0, =0x40004C30&lt;br /&gt;
RAM:00000028   ADD     R0, R0, R1&lt;br /&gt;
RAM:0000002C   ADD     R2, R2, R0&lt;br /&gt;
RAM:00000030   ORR     R2, R2, #1&lt;br /&gt;
RAM:00000034   LDMFD   SP!, {R0,R1}&lt;br /&gt;
RAM:00000038   BX      R2&lt;br /&gt;
RAM:00000038 ; End of function irom_svc_dispatch&lt;br /&gt;
RAM:00000038&lt;br /&gt;
RAM:00000038 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000003C dword_3C DCD 0x1007B0                   ; DATA XREF: irom_svc_dispatch+18↑r&lt;br /&gt;
RAM:00000040 dword_40 DCD 0x1007F8                   ; DATA XREF: irom_svc_dispatch+1C↑r&lt;br /&gt;
RAM:00000044 dword_44 DCD 0x40004C30                 ; DATA XREF: irom_svc_dispatch+24↑r&lt;br /&gt;
RAM:00000048   CODE16&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 sub_48&lt;br /&gt;
RAM:00000048   MOVS    R2, #0                        ; 0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:0000004A   MVNS    R2, R2&lt;br /&gt;
RAM:0000004C   LDR     R1, =0x60006410&lt;br /&gt;
RAM:0000004E   STR     R2, [R1,#0x30]&lt;br /&gt;
RAM:00000050   STR     R2, [R1,#0x38]&lt;br /&gt;
RAM:00000052   LDR     R1, =0x600060F8&lt;br /&gt;
RAM:00000054   STR     R2, [R1]&lt;br /&gt;
RAM:00000056   STR     R2, [R1,#4]&lt;br /&gt;
RAM:00000058   LDR     R1, =0x60006284&lt;br /&gt;
RAM:0000005A   STR     R2, [R1]&lt;br /&gt;
RAM:0000005C   STR     R2, [R1,#0x18]&lt;br /&gt;
RAM:0000005E   ADDS    R1, #0x80&lt;br /&gt;
RAM:00000060   ADDS    R1, #0x1C&lt;br /&gt;
RAM:00000062   STR     R2, [R1]&lt;br /&gt;
RAM:00000064   STR     R2, [R1,#8]&lt;br /&gt;
RAM:00000066   STR     R2, [R1,#0x10]&lt;br /&gt;
RAM:00000068   ADDS    R1, #0x80&lt;br /&gt;
RAM:0000006A   STR     R2, [R1]&lt;br /&gt;
RAM:0000006C   STR     R2, [R1,#4]&lt;br /&gt;
RAM:0000006E   LDR     R1, =0x60006554&lt;br /&gt;
RAM:00000070   STR     R2, [R1]&lt;br /&gt;
RAM:00000072   MOVS    R2, #0xA0000000&lt;br /&gt;
RAM:00000076   LDR     R1, =0x60006148&lt;br /&gt;
RAM:00000078   STR     R2, [R1]&lt;br /&gt;
RAM:0000007A   ADDS    R1, #0x38 ; &#039;8&#039;&lt;br /&gt;
RAM:0000007C   STR     R2, [R1]&lt;br /&gt;
RAM:0000007E   MOVS    R2, #0xE0000000&lt;br /&gt;
RAM:00000082   LDR     R1, =0x600066A0&lt;br /&gt;
RAM:00000084   STR     R2, [R1]&lt;br /&gt;
RAM:00000086   MOVS    R1, #0&lt;br /&gt;
RAM:00000088   MOVS    R0, #0xE&lt;br /&gt;
RAM:0000008A   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000008A ; End of function sub_48&lt;br /&gt;
RAM:0000008A&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C sub_8C&lt;br /&gt;
RAM:0000008C   LDR     R0, [R1,#0x18]                ; 1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:0000008E   MOVS    R2, #1&lt;br /&gt;
RAM:00000090   ORRS    R0, R2&lt;br /&gt;
RAM:00000092   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:00000092 ; End of function sub_8C&lt;br /&gt;
RAM:00000092&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 sub_94&lt;br /&gt;
RAM:00000094   LDR     R2, [R4,#0x50]                ; 2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000096   ADDS    R2, R2, #2&lt;br /&gt;
RAM:00000098   STR     R2, [R4,#0x50]&lt;br /&gt;
RAM:0000009A   SUBS    R1, #0x80&lt;br /&gt;
RAM:0000009C   STR     R1, [R4,#0x34]&lt;br /&gt;
RAM:0000009E   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000009E ; End of function sub_94&lt;br /&gt;
RAM:0000009E&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 sub_A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; FUNCTION CHUNK AT RAM:00000148 SIZE 00000004 BYTES&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0   MOVS    R0, #0x70000000               ; 4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:000000A4   LDR     R6, =dword_7000EF14&lt;br /&gt;
RAM:000000A6   LDR     R2, =dword_7000E5B4&lt;br /&gt;
RAM:000000A8   LDR     R2, [R2]&lt;br /&gt;
RAM:000000AA   CMP     R2, #0&lt;br /&gt;
RAM:000000AC   BEQ     loc_B4&lt;br /&gt;
RAM:000000AE   LDR     R2, [R6]&lt;br /&gt;
RAM:000000B0   STR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B2   B       loc_BC&lt;br /&gt;
RAM:000000B4 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:000000B4&lt;br /&gt;
RAM:000000B4 loc_B4                                  ; CODE XREF: sub_A0+C↑j&lt;br /&gt;
RAM:000000B4   LDR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B6   LSRS    R0, R0, #0x12&lt;br /&gt;
RAM:000000B8   ORRS    R2, R0&lt;br /&gt;
RAM:000000BA   STR     R2, [R6]&lt;br /&gt;
RAM:000000BC&lt;br /&gt;
RAM:000000BC loc_BC                                  ; CODE XREF: sub_A0+12↑j&lt;br /&gt;
RAM:000000BC   LDR     R6, =dword_7000E9C0&lt;br /&gt;
RAM:000000BE   LDR     R0, [R6]&lt;br /&gt;
RAM:000000C0   MOVS    R2, #0x4000&lt;br /&gt;
RAM:000000C4   ORRS    R2, R0&lt;br /&gt;
RAM:000000C6   STR     R2, [R6]&lt;br /&gt;
RAM:000000C8   LDR     R0, [R5,#0x10]&lt;br /&gt;
RAM:000000CA   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000CA ; End of function sub_A0&lt;br /&gt;
RAM:000000CA&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC sub_CC&lt;br /&gt;
RAM:000000CC   MOVS    R2, #0xF000000                ; 5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:000000D0   BICS    R1, R2&lt;br /&gt;
RAM:000000D2   STR     R1, [R4,#0x10]&lt;br /&gt;
RAM:000000D4   LDR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000D6   MOVS    R2, #7&lt;br /&gt;
RAM:000000D8   BICS    R1, R2&lt;br /&gt;
RAM:000000DA   STR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000DC   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000DC ; End of function sub_CC&lt;br /&gt;
RAM:000000DC&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE sub_DE&lt;br /&gt;
RAM:000000DE   LDR     R2, =dword_7000FA9C           ; 6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:000000E0   LDR     R2, [R2]&lt;br /&gt;
RAM:000000E2   LSRS    R2, R2, #8&lt;br /&gt;
RAM:000000E4   LSLS    R2, R2, #1&lt;br /&gt;
RAM:000000E6   LDR     R1, [R4]&lt;br /&gt;
RAM:000000E8   BICS    R1, R2&lt;br /&gt;
RAM:000000EA   STR     R1, [R4]&lt;br /&gt;
RAM:000000EC   CMP     R0, #0&lt;br /&gt;
RAM:000000EE   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000EE ; End of function sub_DE&lt;br /&gt;
RAM:000000EE&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 sub_F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 arg_0=  0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0   LDR     R0, =0x400049F0               ; 7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:000000F2   LDR     R2, [R0]&lt;br /&gt;
RAM:000000F4   STR     R2, [SP,#arg_0]&lt;br /&gt;
RAM:000000F6   LDR     R0, =0x40010000&lt;br /&gt;
RAM:000000F8   LSRS    R2, R2, #17&lt;br /&gt;
RAM:000000FA   BEQ     pop_r2_mov_pc_lr              ; if ([0x400049F0] &amp;gt;&amp;gt; 17) == 0) {&lt;br /&gt;
RAM:000000FA                                         ;   r2 = [0x400049F0];&lt;br /&gt;
RAM:000000FA                                         ; } else {&lt;br /&gt;
RAM:000000FC   LDR     R0, =APBDEV_PMC_CNTRL_0&lt;br /&gt;
RAM:000000FE   STR     R4, [R0]                      ;  write APBDEV_PMC_CNTRL&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000100 loc_100                                 ; CODE XREF: sub_F0:loc_100↓j&lt;br /&gt;
RAM:00000100   B       loc_100                       ;  hang&lt;br /&gt;
RAM:00000100 ; End of function sub_F0                ; }&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 sub_102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 arg_0=  0&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102   LDR     R2, =0x40010220               ; 8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000104   STR     R2, [SP,#arg_0]               ; set r2 retval = [0x40010220]&lt;br /&gt;
RAM:00000106   LDR     R2, [R2,#0x18]&lt;br /&gt;
RAM:00000108   ADDS    R0, #0xFC&lt;br /&gt;
RAM:0000010A   STR     R2, [R0,#0x1C]                ; [r0+0x118] = [0x40010220 + 0x18]&lt;br /&gt;
RAM:0000010C   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000010C ; End of function sub_102&lt;br /&gt;
RAM:0000010C&lt;br /&gt;
RAM:0000010C ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000010E   DCB    0&lt;br /&gt;
RAM:0000010F   DCB    0&lt;br /&gt;
RAM:00000110 off_110 DCD 0x60006410                  ; DATA XREF: sub_48+4↑r&lt;br /&gt;
RAM:00000114 off_114 DCD 0x600060F8                  ; DATA XREF: sub_48+A↑r&lt;br /&gt;
RAM:00000118 off_118 DCD 0x60006284                  ; DATA XREF: sub_48+10↑r&lt;br /&gt;
RAM:0000011C off_11C DCD 0x60006554                  ; DATA XREF: sub_48+26↑r&lt;br /&gt;
RAM:00000120 off_120 DCD 0x60006148                  ; DATA XREF: sub_48+2E↑r&lt;br /&gt;
RAM:00000124 off_124 DCD 0x600066A0                  ; DATA XREF: sub_48+3A↑r&lt;br /&gt;
RAM:00000128 off_128 DCD dword_7000EF14              ; DATA XREF: sub_A0+4↑r&lt;br /&gt;
RAM:0000012C off_12C DCD dword_7000E5B4              ; DATA XREF: sub_A0+6↑r&lt;br /&gt;
RAM:00000130 off_130 DCD dword_7000E9C0              ; DATA XREF: sub_A0:loc_BC↑r&lt;br /&gt;
RAM:00000134 off_134 DCD dword_7000FA9C              ; DATA XREF: sub_DE↑r&lt;br /&gt;
RAM:00000138 off_138 DCD 0x400049F0                  ; DATA XREF: sub_F0↑r&lt;br /&gt;
RAM:0000013C dword_13C DCD 0x40010000                ; DATA XREF: sub_F0+6↑r&lt;br /&gt;
RAM:00000140 off_140 DCD APBDEV_PMC_CNTRL_0          ; DATA XREF: sub_F0+C↑r&lt;br /&gt;
RAM:00000144 off_144 DCD 0x40010220                  ; DATA XREF: sub_102↑r&lt;br /&gt;
RAM:00000148 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:00000148 ; START OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
RAM:00000148&lt;br /&gt;
RAM:00000148 pop_r2_mov_pc_lr                        ; CODE XREF: sub_48+42↑j&lt;br /&gt;
RAM:00000148                                         ; sub_8C+6↑j ...&lt;br /&gt;
RAM:00000148   POP     {R2}&lt;br /&gt;
RAM:0000014A   MOV     PC, LR&lt;br /&gt;
RAM:0000014A ; END OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last 4 patches are exclusive to the Switch, while the remaining ones are often included in most Tegra210 based devices.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 0 ====&lt;br /&gt;
This patch configures clock enables and clock gate overrides for new hardware.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 CLK_ENB_H_SET = 0x60006328;&lt;br /&gt;
 u32 CLK_ENB_L_SET = 0x60006320;&lt;br /&gt;
 u32 CLK_ENB_U_SET = 0x60006330; &lt;br /&gt;
 u32 CLK_ENB_V_SET = 0x60006440;&lt;br /&gt;
 u32 CLK_ENB_W_SET = 0x60006448;&lt;br /&gt;
 u32 CLK_ENB_X_SET = 0x60006284;&lt;br /&gt;
 u32 CLK_ENB_Y_SET = 0x6000629C;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRA = 0x600060F8;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRB = 0x600060FC;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRC = 0x600063A0;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRD = 0x600063A4;&lt;br /&gt;
 u32 LVL2_CLK_GATE_OVRE = 0x60006554;&lt;br /&gt;
 u32 CLK_SOURCE_VI = 0x60006148;&lt;br /&gt;
 u32 CLK_SOURCE_HOST1X = 0x60006180;&lt;br /&gt;
 u32 CLK_SOURCE_NVENC = 0x600066A0; &lt;br /&gt;
&lt;br /&gt;
 // Set all clock enables and overrides&lt;br /&gt;
 *(u32 *)CLK_ENB_V_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_W_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRA = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRB = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_X_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_Y_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_L_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_H_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)CLK_ENB_U_SET = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRC = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRD = 0xFFFFFFFF;&lt;br /&gt;
 *(u32 *)LVL2_CLK_GATE_OVRE = 0xFFFFFFFF;&lt;br /&gt;
&lt;br /&gt;
 // Set VI, HOST1X and NVENC clock sources to CLK_M&lt;br /&gt;
 *(u32 *)CLK_SOURCE_VI = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_HOST1X = 0xA0000000;&lt;br /&gt;
 *(u32 *)CLK_SOURCE_NVENC = 0xE0000000;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
&lt;br /&gt;
     MOVS    R1, #0&lt;br /&gt;
     MOVS    R0, #0xE&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 1 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
LP0 resume code expects APBDEV_PMC_SCRATCH190_0 to be set to 0x01, but the bootrom didn&#039;t set it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH190_0 = 0x7000EC18;&lt;br /&gt;
 u32 pmc_scratch190_val = *(u32 *)APBDEV_PMC_SCRATCH190_0;&lt;br /&gt;
 &lt;br /&gt;
 return (pmc_scratch190_val | 0x01);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 2 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_SPARE_CFG0_0 = 0x7D000834;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
 &lt;br /&gt;
 // Increase UTMIP_HSSQUELCH_LEVEL_NEW by 0x02&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 += 0x02;&lt;br /&gt;
&lt;br /&gt;
 // Clear FUSE_HS_IREF_CAP_CFG&lt;br /&gt;
 *(u32 *)USB1_UTMIP_SPARE_CFG0_0 = ((*(u32 *)USB1_UTMIP_SPARE_CFG0_0 &amp;amp; ~(0x118)) - 0x80);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 3 ====&lt;br /&gt;
This patch pertains to XHCI IRQ clearing checks and forces a result code to be 0.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 4 ====&lt;br /&gt;
This patch allows backing up and restoring strapping options for warmboot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_SCRATCH0_0 = 0x7000E450;&lt;br /&gt;
 u32 APBDEV_PMC_RST_STATUS_0 = 0x7000E5B4;&lt;br /&gt;
 u32 APBDEV_PMC_SEC_DISABLE8_0 = 0x7000E9C0;&lt;br /&gt;
 u32 APBDEV_PMC_SECURE_SCRATCH111_0 = 0x7000EF14;&lt;br /&gt;
 u32 APB_MISC_PP_STRAPPING_OPT_A_0 = 0x70000008; &lt;br /&gt;
&lt;br /&gt;
 u32 reset_status = *(u32 *)APBDEV_PMC_RST_STATUS_0;&lt;br /&gt;
&lt;br /&gt;
 // Check for regular power on&lt;br /&gt;
 if (reset_status == 0)&lt;br /&gt;
 {    &lt;br /&gt;
     // Set all buttons in RCM_STRAPS and backup to PMC scratch&lt;br /&gt;
     *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0 = (*(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 | 0x1C00);&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
     // Restore strapping options from PMC scratch&lt;br /&gt;
     *(u32 *)APB_MISC_PP_STRAPPING_OPT_A_0 = *(u32 *)APBDEV_PMC_SECURE_SCRATCH111_0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // Disable write access to APBDEV_PMC_SECURE_SCRATCH111_0&lt;br /&gt;
 *(u32 *)APBDEV_PMC_SEC_DISABLE8_0 |= 0x4000;&lt;br /&gt;
 &lt;br /&gt;
 return *(u32 *)APBDEV_PMC_SCRATCH0_0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 5 ====&lt;br /&gt;
This patch adjusts USB configurations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 USB1_UTMIP_HSRX_CFG0_0 = 0x7D000810;&lt;br /&gt;
 u32 USB1_UTMIP_BIAS_CFG2_0 = 0x7D000850;&lt;br /&gt;
&lt;br /&gt;
 // Clear UTMIP_IDLE_WAIT, UTMIP_ELASTIC_LIMIT and UTMIP_PCOUNT_UPDN_DIV,&lt;br /&gt;
 // and set UTMIP_IDLE_WAIT to 0x11 and UTMIP_ELASTIC_LIMIT to 0x10 &lt;br /&gt;
 *(u32 *)USB1_UTMIP_HSRX_CFG0_0 = ((*(u32 *)USB1_UTMIP_HSRX_CFG0_0 &amp;amp; ~(0xF8000) + 0x88000 &amp;amp; ~(0x7C00) + 0x4000) &amp;amp; ~(0xF000000));&lt;br /&gt;
 &lt;br /&gt;
 // Clear UTMIP_HSSQUELCH_LEVEL_NEW&lt;br /&gt;
 *(u32 *)USB1_UTMIP_BIAS_CFG2_0 &amp;amp;= ~(0x07);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 6 ====&lt;br /&gt;
This patch is a factory backdoor.&lt;br /&gt;
&lt;br /&gt;
It allows controlling the debug authentication configuration using a fuse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 FUSE_DEBUG_AUTH_OVERRIDE = 0x7000FA9C;&lt;br /&gt;
&lt;br /&gt;
 u32 debug_auth_override_val = *(u32 *)FUSE_DEBUG_AUTH_OVERRIDE;&lt;br /&gt;
 debug_auth_override_val = ((debug_auth_override_val &amp;gt;&amp;gt; 0x08) &amp;lt;&amp;lt; 0x01);&lt;br /&gt;
&lt;br /&gt;
 // Override debug authentication value stored in IRAM&lt;br /&gt;
 *(u32 *)0x400028E4 &amp;amp;= ~(debug_auth_override_val);&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     CMP     R0, #0&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 7 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It prevents overflowing IRAM (0x40010000) when copying the warmboot binary from DRAM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 APBDEV_PMC_CNTRL_0 = 0x7000E400;&lt;br /&gt;
 &lt;br /&gt;
 u32 warmboot_header_addr = 0x400049F0;&lt;br /&gt;
 u32 warmboot_bin_size = *(u32 *)warmboot_bin_header_addr;&lt;br /&gt;
 &lt;br /&gt;
 // Invalid warmboot binary size&lt;br /&gt;
 if (warmboot_size &amp;gt;&amp;gt; 0x11)&lt;br /&gt;
 {&lt;br /&gt;
     // Assert MAIN_RST&lt;br /&gt;
     // 0x40004BF0 comes from R4 and the bootrom doesn&#039;t bother to change it&lt;br /&gt;
     *(u32 *)APBDEV_PMC_CNTRL_0 = 0x40004BF0;&lt;br /&gt;
&lt;br /&gt;
     // Deadlock&lt;br /&gt;
     while(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R0, =0x40010000&lt;br /&gt;
     LDR     R2, [warmboot_bin_header_addr]&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatch 8 ====&lt;br /&gt;
This patch is a bugfix.&lt;br /&gt;
&lt;br /&gt;
It sets the correct warmboot binary entrypoint address for RSA signature verification, which would be done in DRAM instead of IRAM without this patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 warmboot_addr_ptr = 0x40010238;&lt;br /&gt;
 u32 warmboot_entry_addr_ptr = 0x40004C28;&lt;br /&gt;
&lt;br /&gt;
 *(u32 *)warmboot_entry_addr_ptr = *(u32 *)warmboot_addr_ptr;&lt;br /&gt;
&lt;br /&gt;
 /*&lt;br /&gt;
     Untranslated instructions:&lt;br /&gt;
 &lt;br /&gt;
     LDR     R2, [warmboot_addr_ptr]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ipatches 9 and 10 ====&lt;br /&gt;
These patches modify the 256-bit Secure Provisioning AES key with index 0x3A.&lt;br /&gt;
&lt;br /&gt;
==== ipatch 11 ====&lt;br /&gt;
This patch pertains to the [[Security_Engine|Security Engine]] context restore process and forces SE_OPERATION_UNK1 to be 0x01.&lt;br /&gt;
&lt;br /&gt;
== Anti-downgrade ==&lt;br /&gt;
The first bootloader verifies [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]] to prevent downgrading.&lt;br /&gt;
How many fuses are expected to be burnt depends the device&#039;s unit type as below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1-3.0.2&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0-4.1.0&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0-5.1.0&lt;br /&gt;
| 6&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If too many fuses are burnt the bootloader will panic immediately.&lt;br /&gt;
&lt;br /&gt;
If too few are burnt, the bootloader will enable fuse programming and write the expected value to fuse indexes 0x3A and 0x3C. Afterwards, fuse programming is disabled and the panic value 0x21 is written to PMC_SCRATCH200 register (0x7000EC40). Finally, the watchdog timer is initialized and programmed to force a reset.&lt;br /&gt;
&lt;br /&gt;
On a subsequent boot, after the anti-downgrade fuses are checked again, the PMC_RST_STATUS register (0x7000E5B4) is checked and if set to 0x01 (watchdog reset) the PMC_SCRATCH200 register (0x7000EC40) will be checked for the panic value 0x21.&lt;br /&gt;
PMC_RST_STATUS will only be set back to 0 (power on reset) if the fuse count matches the new expected value, otherwise the system will panic.&lt;/div&gt;</summary>
		<author><name>Lacius</name></author>
	</entry>
</feed>