<?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=Qlutoo</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=Qlutoo"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Qlutoo"/>
	<updated>2026-04-04T00:13:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=11115</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=11115"/>
		<updated>2021-09-15T00:25:24Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* IAudioDevice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioOutManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ListAudioOuts|ListAudioOuts]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut|OpenAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [3.0.0+] [[#ListAudioOutsAuto|ListAudioOutsAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] [[#OpenAudioOutAuto|OpenAudioOutAuto]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ListAudioOuts ==&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of [[#AudioOutInfo]]. Returns an u32 &#039;&#039;&#039;Count&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes a PID-descriptor, a type-0x5 input buffer &#039;&#039;&#039;NameIn&#039;&#039;&#039;, a type-0x6 output buffer &#039;&#039;&#039;NameOut&#039;&#039;&#039;, an input [[#AudioOutParameter]], an input Process handle and an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an [[#IAudioOut]] and an output [[#AudioOutParameterInternal]].&lt;br /&gt;
&lt;br /&gt;
== ListAudioOutsAuto ==&lt;br /&gt;
Same as [[#ListAudioOuts]], but takes a type-0x22 output buffer instead.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOutAuto ==&lt;br /&gt;
Same as [[#OpenAudioOut]], but takes a type-0x21 input buffer and a type-0x22 output buffer instead.&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioOut&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetAudioOutState|GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Start|Start]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Stop|Stop]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioOutBuffer|AppendAudioOutBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent|RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioOutBuffers|GetReleasedAudioOutBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#ContainsAudioOutBuffer|ContainsAudioOutBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [3.0.0+] [[#AppendAudioOutBufferAuto|AppendAudioOutBufferAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [3.0.0+] [[#GetReleasedAudioOutBuffersAuto|GetReleasedAudioOutBuffersAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [4.0.0+] [[#GetAudioOutBufferCount|GetAudioOutBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [4.0.0+] [[#GetAudioOutPlayedSampleCount|GetAudioOutPlayedSampleCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [4.0.0+] [[#FlushAudioOutBuffers|FlushAudioOutBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [6.0.0+] [[#SetAudioOutVolume|SetAudioOutVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [6.0.0+] [[#GetAudioOutVolume|GetAudioOutVolume]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
No input. Returns an output [[#AudioOutState]].&lt;br /&gt;
&lt;br /&gt;
=== Start ===&lt;br /&gt;
No input/output. &lt;br /&gt;
&lt;br /&gt;
Starts audio playback using data from appended buffers.&lt;br /&gt;
&lt;br /&gt;
=== Stop ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Stops audio playback. This waits for audio playback to finish before returning.&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBuffer ===&lt;br /&gt;
Takes a type-0x5 input buffer containing an [[#AudioOutBuffer]] and an input u64 &#039;&#039;&#039;BufferClientPtr&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
No input. Returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
The event is signalled when a buffer is released.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffers ===&lt;br /&gt;
Takes a type-0x6 output buffer &#039;&#039;&#039;AudioBuffer&#039;&#039;&#039;. Returns an output u32 &#039;&#039;&#039;Count&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AudioBuffer&#039;&#039;&#039; will be filled with the identifiers from [[#AppendAudioOutBuffer]] of audio buffers that have been released.&lt;br /&gt;
&lt;br /&gt;
=== ContainsAudioOutBuffer ===&lt;br /&gt;
Takes an input u64 &#039;&#039;&#039;AudioBufferPointer&#039;&#039;&#039;. Returns an output bool &#039;&#039;&#039;Contains&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBufferAuto ===&lt;br /&gt;
Same as [[#AppendAudioOutBuffer]], but takes a type-0x21 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffersAuto ===&lt;br /&gt;
Same as [[#GetReleasedAudioOutBuffer]], but takes a type-0x22 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutBufferCount ===&lt;br /&gt;
No input. Returns an output u32 &#039;&#039;&#039;AudioOutBufferCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutPlayedSampleCount ===&lt;br /&gt;
No input. Returns an output u64 &#039;&#039;&#039;AudioOutPlayedSampleCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== FlushAudioOutBuffers ===&lt;br /&gt;
No input. Returns an output bool &#039;&#039;&#039;Pending&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== SetAudioOutVolume ===&lt;br /&gt;
Takes an input float &#039;&#039;&#039;AudioOutVolume&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutVolume ===&lt;br /&gt;
No input. Returns an output float &#039;&#039;&#039;AudioOutVolume&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= audin:u =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioInManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ListAudioIns|ListAudioIns]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioIn|OpenAudioIn]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [3.0.0+] [[#ListAudioInsAuto|ListAudioInsAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] [[#OpenAudioInAuto|OpenAudioInAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [3.0.0+] [[#ListAudioInsAutoFiltered|ListAudioInsAutoFiltered]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [5.0.0+] [[#OpenAudioInProtocolSpecified|OpenAudioInProtocolSpecified]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ListAudioIns ==&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of [[#AudioInInfo]]. Returns an u32 &#039;&#039;&#039;Count&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioIn ==&lt;br /&gt;
Takes a PID-descriptor, a type-0x5 input buffer &#039;&#039;&#039;NameIn&#039;&#039;&#039;, a type-0x6 output buffer &#039;&#039;&#039;NameOut&#039;&#039;&#039;, an input [[#AudioInParameter]], an input Process handle and an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an [[#IAudioIn]] and an an output [[#AudioInParameterInternal]].&lt;br /&gt;
&lt;br /&gt;
== ListAudioInsAuto ==&lt;br /&gt;
Same as [[#ListAudioIns]], but takes a type-0x22 output buffer instead.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioInAuto ==&lt;br /&gt;
Same as [[#OpenAudioIn]], but takes a type-0x21 input buffer and a type-0x22 output buffer instead.&lt;br /&gt;
&lt;br /&gt;
== ListAudioInsAutoFiltered ==&lt;br /&gt;
Same as [[#ListAudioInsAuto]].&lt;br /&gt;
&lt;br /&gt;
== OpenAudioInProtocolSpecified ==&lt;br /&gt;
Same as [[#OpenAudioIn]], but takes an additional input u64 &#039;&#039;&#039;Protocol&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioIn&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetAudioInState|GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Start_2|Start]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Stop_2|Stop]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioInBuffer|AppendAudioInBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent_2|RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioInBuffers|GetReleasedAudioInBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#ContainsAudioInBuffer|ContainsAudioInBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [3.0.0+] [[#AppendUacInBuffer|AppendUacInBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [3.0.0+] [[#AppendAudioInBufferAuto|AppendAudioInBufferAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [3.0.0+] [[#GetReleasedAudioInBuffersAuto|GetReleasedAudioInBuffersAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [3.0.0+] [[#AppendUacInBufferAuto|AppendUacInBufferAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [4.0.0+] [[#GetAudioInBufferCount|GetAudioInBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [4.0.0+] [[#SetDeviceGain|SetDeviceGain]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [4.0.0+] [[#GetDeviceGain|GetDeviceGain]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [6.0.0+] [[#FlushAudioInBuffers|FlushAudioInBuffers]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
No input. Returns an output [[#AudioInState]].&lt;br /&gt;
&lt;br /&gt;
=== Start ===&lt;br /&gt;
No input/output. &lt;br /&gt;
&lt;br /&gt;
=== Stop ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioInBuffer ===&lt;br /&gt;
Takes a type-0x5 input buffer containing an [[#AudioInBuffer]] and an input u64 &#039;&#039;&#039;BufferClientPtr&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
No input. Returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
The event is signalled when a buffer is released.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioInBuffers ===&lt;br /&gt;
Takes a type-0x6 output buffer &#039;&#039;&#039;AudioBuffer&#039;&#039;&#039;. Returns an output u32 &#039;&#039;&#039;Count&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AudioBuffer&#039;&#039;&#039; will be filled with the identifiers from [[#AppendAudioInBuffer]] of audio buffers that have been released.&lt;br /&gt;
&lt;br /&gt;
=== ContainsAudioInBuffer ===&lt;br /&gt;
Takes an input u64 &#039;&#039;&#039;AudioBufferPointer&#039;&#039;&#039;. Returns an output bool &#039;&#039;&#039;Contains&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== AppendUacInBuffer ===&lt;br /&gt;
Takes a type-0x5 input buffer containing an &#039;&#039;&#039;UacInBuffer&#039;&#039;&#039;, an input u64 &#039;&#039;&#039;BufferClientPtr&#039;&#039;&#039; and an input Event handle. No output.&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioInBufferAuto ===&lt;br /&gt;
Same as [[#AppendAudioInBuffer]], but takes a type-0x21 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioInBuffersAuto ===&lt;br /&gt;
Same as [[#GetReleasedAudioInBuffer]], but takes a type-0x22 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== AppendUacInBufferAuto ===&lt;br /&gt;
Same as [[#AppendUacInBuffer]], but takes a type-0x21 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInBufferCount ===&lt;br /&gt;
No input. Returns an output u32 &#039;&#039;&#039;AudioInBufferCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== SetDeviceGain ===&lt;br /&gt;
Takes an input float &#039;&#039;&#039;DeviceGain&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceGain ===&lt;br /&gt;
No input. Returns an output float &#039;&#039;&#039;DeviceGain&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== FlushAudioInBuffers ===&lt;br /&gt;
No input. Returns an output bool &#039;&#039;&#039;Pending&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IFinalOutputRecorderManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenFinalOutputRecorder]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenFinalOutputRecorder ==&lt;br /&gt;
Takes an input [[#FinalOutputRecorderParameter]], an input Process handle and an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an [[#IFinalOutputRecorder]] and an output [[#FinalOutputRecorderParameterInternal]]. &lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IFinalOutputRecorder&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetFinalOutputRecorderState|GetFinalOutputRecorderState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Start_3|Start]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Stop_3|Stop]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendFinalOutputRecorderBuffer|AppendFinalOutputRecorderBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent_3|RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedFinalOutputRecorderBuffers|GetReleasedFinalOutputRecorderBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#ContainsFinalOutputRecorderBuffer|ContainsFinalOutputRecorderBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetFinalOutputRecorderBufferEndTime|GetFinalOutputRecorderBufferEndTime]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [3.0.0+] [[#AppendFinalOutputRecorderBufferAuto|AppendFinalOutputRecorderBufferAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [3.0.0+] [[#GetReleasedFinalOutputRecorderBuffersAuto|GetReleasedFinalOutputRecorderBuffersAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [6.0.0+] [[#FlushFinalOutputRecorderBuffers|FlushFinalOutputRecorderBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [9.0.0+] [[#AttachWorkBuffer|AttachWorkBuffer]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetFinalOutputRecorderState ===&lt;br /&gt;
No input. Returns an output [[#FinalOutputRecorderState]].&lt;br /&gt;
&lt;br /&gt;
=== Start ===&lt;br /&gt;
No input/output. &lt;br /&gt;
&lt;br /&gt;
=== Stop ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
=== AppendFinalOutputRecorderBuffer ===&lt;br /&gt;
Takes a type-0x5 input buffer containing an [[#FinalOutputRecorderBuffer]] and an input u64 &#039;&#039;&#039;BufferClientPtr&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
No input. Returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
The event is signalled when a buffer is released.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedFinalOutputRecorderBuffers ===&lt;br /&gt;
Takes a type-0x6 output buffer &#039;&#039;&#039;FinalOutputRecorderBuffer&#039;&#039;&#039;. Returns two output u64s &#039;&#039;&#039;Count&#039;&#039;&#039; and &#039;&#039;&#039;Released&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FinalOutputRecorderBuffer&#039;&#039;&#039; will be filled with the identifiers from [[#AppendFinalOutputRecorderBuffer]] of recorder buffers that have been released.&lt;br /&gt;
&lt;br /&gt;
=== ContainsFinalOutputRecorderBuffer ===&lt;br /&gt;
Takes an input u64 &#039;&#039;&#039;FinalOutputRecorderBufferPointer&#039;&#039;&#039;. Returns an output bool &#039;&#039;&#039;Contains&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetFinalOutputRecorderBufferEndTime ===&lt;br /&gt;
Takes an input u64 &#039;&#039;&#039;FinalOutputRecorderBufferPointer&#039;&#039;&#039;. Returns an output u64 &#039;&#039;&#039;Released&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== AppendFinalOutputRecorderBufferAuto ===&lt;br /&gt;
Same as [[#AppendFinalOutputRecorderBuffer]], but takes a type-0x21 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedFinalOutputRecorderBuffersAuto ===&lt;br /&gt;
Same as [[#GetReleasedFinalOutputRecorderBuffers]], but takes a type-0x22 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== FlushFinalOutputRecorderBuffers ===&lt;br /&gt;
No input. Returns an output bool &#039;&#039;&#039;Pending&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== AttachWorkBuffer ===&lt;br /&gt;
Takes an input [[#FinalOutputRecorderWorkBufferParameterInternal]]. No output.&lt;br /&gt;
&lt;br /&gt;
= auddev =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioSnoopManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [6.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || EnableDspUsageMeasurement&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DisableDspUsageMeasurement&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetDspUsage&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioRendererManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetAudioDeviceService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] OpenAudioRendererForManualExecution&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [4.0.0+] GetAudioDeviceServiceWithRevisionInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioDeviceService ===&lt;br /&gt;
Takes an input u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]], returns an output [[#IAudioDevice]].&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioRenderer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetSampleRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetSampleCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetMixBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Start&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Stop&lt;br /&gt;
|-&lt;br /&gt;
| 7 || QuerySystemEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#SetRenderingTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#GetRenderingTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [3.0.0+] RequestUpdateAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [3.0.0+] ExecuteAudioRendererRendering&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetSampleRate ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;SampleRate&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetSampleCount ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;SampleCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetMixBufferCount ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;MixBufferCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;State&#039;&#039;&#039; (0=Started, 1=Stopped).&lt;br /&gt;
&lt;br /&gt;
=== SetRenderingTimeLimit ===&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;RenderingTimeLimit&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetRenderingTimeLimit ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;RenderingTimeLimit&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IAudioDevice ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioDevice&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ListAudioDeviceName]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#SetAudioDeviceOutputVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetAudioDeviceOutputVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetActiveAudioDeviceName&lt;br /&gt;
|-&lt;br /&gt;
| 4 || QueryAudioDeviceSystemEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetActiveChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [3.0.0+] [[#ListAudioDeviceNameAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [3.0.0+] [[#SetAudioDeviceOutputVolumeAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [3.0.0+] [[#GetAudioDeviceOutputVolumeAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [3.0.0+] GetActiveAudioDeviceNameAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [3.0.0+] QueryAudioDeviceInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [3.0.0+] QueryAudioDeviceOutputEvent&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [5.0.0+] GetAudioSystemMasterVolumeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [13.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ListAudioDeviceName ===&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of &#039;&#039;&#039;DeviceName&#039;&#039;&#039;. Returns an output s32 for total number of output entries.&lt;br /&gt;
&lt;br /&gt;
=== SetAudioDeviceOutputVolume ===&lt;br /&gt;
Takes a type-0x5 input buffer containing the &#039;&#039;&#039;DeviceName&#039;&#039;&#039; and a float. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioDeviceOutputVolume ===&lt;br /&gt;
Takes a type-0x5 input buffer containing the &#039;&#039;&#039;DeviceName&#039;&#039;&#039;. Returns an output float.&lt;br /&gt;
&lt;br /&gt;
=== ListAudioDeviceNameAuto ===&lt;br /&gt;
Takes a type-0x22 output buffer containing an array of &#039;&#039;&#039;DeviceName&#039;&#039;&#039;. Returns an output s32 for total number of output entries.&lt;br /&gt;
&lt;br /&gt;
=== SetAudioDeviceOutputVolumeAuto ===&lt;br /&gt;
Takes a type-0x21 input buffer containing the &#039;&#039;&#039;DeviceName&#039;&#039;&#039; and a float. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioDeviceOutputVolumeAuto ===&lt;br /&gt;
Takes a type-0x21 input buffer containing the &#039;&#039;&#039;DeviceName&#039;&#039;&#039;. Returns an output float.&lt;br /&gt;
&lt;br /&gt;
= audout:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioOutManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was removed with [11.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [4.0.0+] GetProcessRecordVolume&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [4.0.0+] SetProcessRecordVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.&lt;br /&gt;
&lt;br /&gt;
= audin:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioInManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was removed with [11.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.&lt;br /&gt;
&lt;br /&gt;
= audrec:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IFinalOutputRecorderManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.&lt;br /&gt;
&lt;br /&gt;
= audren:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioRendererManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was removed with [11.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 5 || UnregisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [4.0.0+] GetProcessRecordVolume&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [4.0.0+] SetProcessRecordVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.&lt;br /&gt;
&lt;br /&gt;
= audout:d, audin:d, audrec:d, audren:d =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioOutManagerForDebugger&amp;quot;, &amp;quot;nn::audio::detail::IAudioInManagerForDebugger&amp;quot;, &amp;quot;nn::audio::detail::IFinalOutputRecorderManagerForDebugger&amp;quot;, &amp;quot;nn::audio::detail::IAudioRendererManagerForDebugger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
These were removed with [11.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#RequestSuspend]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResume]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspend ==&lt;br /&gt;
Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]].&lt;br /&gt;
&lt;br /&gt;
== RequestResume ==&lt;br /&gt;
Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]].&lt;br /&gt;
&lt;br /&gt;
= audctl =&lt;br /&gt;
This is &amp;quot;nn::audioctrl::detail::IAudioController&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetTargetVolume&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetTargetVolume&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTargetVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetTargetVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsTargetMute&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetTargetMute&lt;br /&gt;
|-&lt;br /&gt;
| 6 || IsTargetConnected&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetDefaultTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || GetDefaultTarget&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetAudioOutputMode&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SetAudioOutputMode&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SetForceMutePolicy&lt;br /&gt;
|-&lt;br /&gt;
| 12 || GetForceMutePolicy&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetOutputModeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetOutputModeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 15 || SetOutputTarget&lt;br /&gt;
|-&lt;br /&gt;
| 16 || SetInputTargetForceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [3.0.0+] SetHeadphoneOutputLevelMode&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [3.0.0+] GetHeadphoneOutputLevelMode&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [3.0.0+] AcquireAudioVolumeUpdateEventForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [3.0.0+] AcquireAudioOutputDeviceUpdateEventForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [3.0.0+] GetAudioOutputTargetForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [3.0.0+] NotifyHeadphoneVolumeWarningDisplayedEvent&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [4.0.0+] SetSystemOutputMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [4.0.0+] GetSystemOutputMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] [[#GetAudioVolumeDataForPlayReport]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [4.0.0+] [[#UpdateHeadphoneSettings]]&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [7.0.0+] SetVolumeMappingTableForDev&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [10.0.0+] GetAudioOutputChannelCountForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 29 || [10.0.0+] BindAudioOutputChannelCountUpdateEventForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 34 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 10001 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 10002 || [13.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetAudioVolumeDataForPlayReport ==&lt;br /&gt;
[13.0.0] Updated.&lt;br /&gt;
&lt;br /&gt;
=== UpdateHeadphoneSettings ===&lt;br /&gt;
Takes one input bool. No output.&lt;br /&gt;
NS calls this with the result of IParentalControlService::IsRestrictionEnabled[https://switchbrew.org/wiki/Parental_Control_services#IParentalControlService].&lt;br /&gt;
&lt;br /&gt;
= codecctl =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::ICodecController&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service no longer exists in [3.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Sleep]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#Wake]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetVolumeMax]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetVolumeMin]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#SetActiveTarget]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetActiveTarget]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#BindHeadphoneMicJackInterrupt]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#IsHeadphoneMicJackInserted]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#ClearHeadphoneMicJackInterrupt]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#IsRequested]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== Finalize ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== Sleep ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== Wake ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetVolume ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;Volume&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== GetVolumeMax ==&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;VolumeMax&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== GetVolumeMin ==&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;VolumeMin&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== SetActiveTarget ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;Target&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== GetActiveTarget ==&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;Target&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== BindHeadphoneMicJackInterrupt ==&lt;br /&gt;
No input. Returns an event handle.&lt;br /&gt;
&lt;br /&gt;
== IsHeadphoneMicJackInserted ==&lt;br /&gt;
No input. Returns a bool.&lt;br /&gt;
&lt;br /&gt;
== ClearHeadphoneMicJackInterrupt ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== IsRequested ==&lt;br /&gt;
No input. Returns a bool.&lt;br /&gt;
&lt;br /&gt;
= hwopus =&lt;br /&gt;
This is &amp;quot;nn::codec::detail::IHardwareOpusDecoderManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenHardwareOpusDecoder]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetWorkBufferSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [3.0.0+] [[#OpenHardwareOpusDecoderForMultiStream]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] [[#GetWorkBufferSizeForMultiStream]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [12.0.0+] OpenHardwareOpusDecoderEx&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [12.0.0+] GetWorkBufferSizeEx&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [12.0.0+] OpenHardwareOpusDecoderForMultiStreamEx&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [12.0.0+] GetWorkBufferSizeForMultiStreamEx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official sw can use either software libopus, or hwopus (libopus running on the ADSP) via &amp;quot;nn::codec::HardwareOpus*&amp;quot; (separate from the former).&lt;br /&gt;
&lt;br /&gt;
== OpenHardwareOpusDecoder ==&lt;br /&gt;
Takes two s32s &#039;&#039;&#039;SampleRate&#039;&#039;&#039; and &#039;&#039;&#039;ChannelCount&#039;&#039;&#039; packed as an u64, an u32 &#039;&#039;&#039;WorkBufferSize&#039;&#039;&#039; and a TransferMemory handle for &#039;&#039;&#039;WorkBuffer&#039;&#039;&#039;. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0.&lt;br /&gt;
&lt;br /&gt;
== GetWorkBufferSize ==&lt;br /&gt;
Takes two s32s &#039;&#039;&#039;SampleRate&#039;&#039;&#039; and &#039;&#039;&#039;ChannelCount&#039;&#039;&#039; packed as an u64. Returns the u32 required size for the decoder&#039;s work buffer. Official user-processes align the output size to page-alignment.&lt;br /&gt;
&lt;br /&gt;
== OpenHardwareOpusDecoderForMultiStream ==&lt;br /&gt;
Takes a type-0x19 input buffer, an u32 &#039;&#039;&#039;WorkBufferSize&#039;&#039;&#039; and a TransferMemory handle for &#039;&#039;&#039;WorkBuffer&#039;&#039;&#039;. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0.&lt;br /&gt;
&lt;br /&gt;
The input buffer is a [[#OpusMultiStreamParameters]] struct. The user-process initializes this struct the same way as [[#GetWorkBufferSizeForMultiStream]], except that an u8-array specified by the user is copied to +0x10 with size &#039;&#039;&#039;ChannelCount&#039;&#039;&#039;, when &#039;&#039;&#039;ChannelCount&#039;&#039;&#039; above 0.&lt;br /&gt;
&lt;br /&gt;
== GetWorkBufferSizeForMultiStream ==&lt;br /&gt;
Takes a type-0x19 input buffer. Returns the u32 required size for the decoder&#039;s work buffer. Official user-processes align the output size to page-alignment.&lt;br /&gt;
&lt;br /&gt;
The input buffer is a [[#OpusMultiStreamParameters]] struct.&lt;br /&gt;
&lt;br /&gt;
== OpenHardwareOpusDecoderEx ==&lt;br /&gt;
Takes a struct [[#OpusParametersEx]] and a u32 &#039;&#039;&#039;WorkBufferSize&#039;&#039;&#039; and a TransferMemory handle for &#039;&#039;&#039;WorkBuffer&#039;&#039;&#039;. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0.&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;UseLargeFrameSize&#039;&#039; in the parameter struct is 1 a larger output buffer that can store 120ms opus frames is used vs the default of 40ms.&lt;br /&gt;
&lt;br /&gt;
== GetWorkBufferSizeEx ==&lt;br /&gt;
Takes a struct [[#OpusParametersEx]]. Returns the u32 required size for the decoder&#039;s work buffer. Official user-processes align the output size to page-alignment.&lt;br /&gt;
&lt;br /&gt;
== OpenHardwareOpusDecoderForMultiStreamEx ==&lt;br /&gt;
Takes a type-0x19 input buffer, an u32 &#039;&#039;&#039;WorkBufferSize&#039;&#039;&#039; and a TransferMemory handle for &#039;&#039;&#039;WorkBuffer&#039;&#039;&#039;. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0.&lt;br /&gt;
&lt;br /&gt;
The input buffer is a [[#OpusMultiStreamParametersEx]] struct. When &#039;&#039;UseLargeFrameSize&#039;&#039; is 1 a larger output buffer that can store 120ms opus frames is used vs the default of 40ms.&lt;br /&gt;
&lt;br /&gt;
== GetWorkBufferSizeForMultiStreamEx ==&lt;br /&gt;
Takes a type-0x19 input buffer. Returns the u32 required size for the decoder&#039;s work buffer. Official user-processes align the output size to page-alignment.&lt;br /&gt;
&lt;br /&gt;
The input buffer is a [[#OpusMultiStreamParametersEx]] struct.&lt;br /&gt;
&lt;br /&gt;
== IHardwareOpusDecoder ==&lt;br /&gt;
This is &amp;quot;nn::codec::detail::IHardwareOpusDecoder&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [4.0.0+] [[#DecodeInterleavedOld]] ([1.0.0-3.0.2] DecodeInterleaved)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#SetContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [4.0.0+] [[#DecodeInterleavedForMultiStreamOld]] ([3.0.0-3.0.2] DecodeInterleavedForMultiStream)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] [[#SetContextForMultiStream]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [6.0.0+] [[#DecodeInterleavedWithPerfOld]] ([4.0.0-5.1.0] DecodeInterleavedWithPerf)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [6.0.0+] [[#DecodeInterleavedForMultiStreamWithPerfOld]] ([4.0.0-5.1.0] DecodeInterleavedForMultiStreamWithPerf)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [6.0.0+] DecodeInterleavedWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleaved)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [6.0.0+] DecodeInterleavedForMultiStreamWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleavedForMultiStream)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [7.0.0+] [[#DecodeInterleaved]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [7.0.0+] [[#DecodeInterleavedForMultiStream]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedOld ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x6 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039; and s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Calls the same func as [[#DecodeInterleaved]] internally with flag=0 and out_u64_ptr=NULL.&lt;br /&gt;
&lt;br /&gt;
=== SetContext ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;DecoderContextIn&#039;&#039;&#039;). Sends the unknown context data to the hardware decoder. The input buffer is unused.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedForMultiStreamOld ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x6 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039; and s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Calls the same func as [[#DecodeInterleavedForMultiStream]] internally with flag=0 and out_u64_ptr=NULL.&lt;br /&gt;
&lt;br /&gt;
=== SetContextForMultiStream ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;DecoderContextIn&#039;&#039;&#039;). Sends the unknown context data to the hardware decoder.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedWithPerfOld ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x46 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039;, s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;, and an u64.&lt;br /&gt;
&lt;br /&gt;
The output u64 is ignored by official user-processes.&lt;br /&gt;
&lt;br /&gt;
Calls the same func as [[#DecodeInterleaved]] internally with flag=0.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedForMultiStreamWithPerfOld ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x46 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039;, s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;, and an u64.&lt;br /&gt;
&lt;br /&gt;
The output u64 is ignored by official user-processes.&lt;br /&gt;
&lt;br /&gt;
Calls the same func as [[#DecodeInterleavedForMultiStream]] internally with flag=0.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleaved ===&lt;br /&gt;
Takes an input u8 bool flag, a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x46 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039;, s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;, and an u64.&lt;br /&gt;
&lt;br /&gt;
The bool flag indicates whether or not a reset of the decoder context is being requested.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedForMultiStream ===&lt;br /&gt;
Takes an input u8 bool flag, a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x46 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039;, s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;, and an u64.&lt;br /&gt;
&lt;br /&gt;
The bool flag indicates whether or not a reset of the decoder context is being requested.&lt;br /&gt;
&lt;br /&gt;
= auddebug =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service doesn&#039;t exist in retail units.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProfilerStart&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProfilerStop&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CpuProfilerStart&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CpuProfilerStop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= aud:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioSystemManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [11.0.0+]. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RegisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UnregisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || RequestSuspendAudio&lt;br /&gt;
|-&lt;br /&gt;
| 3 || RequestResumeAudio&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetAudioOutputProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetAudioOutputProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetAudioInputProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetAudioInputProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 8 || GetAudioOutputProcessRecordVolume&lt;br /&gt;
|-&lt;br /&gt;
| 9 || SetAudioOutputProcessRecordVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= aud:d =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioSystemManagerForDebugger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [11.0.0+]. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspendAudioForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResumeAudioForDebug&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SampleFormat =&lt;br /&gt;
This is &amp;quot;nn::audio::SampleFormat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PcmInt8&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PcmInt16&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PcmInt24&lt;br /&gt;
|-&lt;br /&gt;
| 4 || PcmInt32&lt;br /&gt;
|-&lt;br /&gt;
| 5 || PcmFloat&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Adpcm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutState =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioOutState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Started&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Stopped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInState =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioInState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Started&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Stopped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderState =&lt;br /&gt;
This is &amp;quot;nn::audio::FinalOutputRecorderState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Started&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Stopped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutInfo =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioOutInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInInfo =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioInInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutParameter =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioOutParameter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInParameter =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioInParameter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutParameterInternal =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::AudioOutParameterInternal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInParameterInternal =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::AudioInParameterInternal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutBuffer =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioOutBuffer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to next buffer (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of data in the sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of data in the sample buffer (unused/ignored?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInBuffer =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioInBuffer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to next buffer (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of data in the sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of data in the sample buffer (unused/ignored?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderBuffer =&lt;br /&gt;
This is &amp;quot;nn::audio::FinalOutputRecorderBuffer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to next buffer (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of data in the sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of data in the sample buffer (unused/ignored?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderParameter =&lt;br /&gt;
This is &amp;quot;nn::audio::FinalOutputRecorderParameter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderParameterInternal =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::FinalOutputRecorderParameterInternal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderWorkBufferParameterInternal =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::FinalOutputRecorderWorkBufferParameterInternal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= OpusParametersEx =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| UseLargeFrameSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= OpusMultiStreamParameters =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of streams&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of stereo streams&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x100&lt;br /&gt;
| u8 array of channel mappings&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= OpusMultiStreamParametersEx =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of streams&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of stereo streams&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| UseLargeFrameSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x100&lt;br /&gt;
| u8 array of channel mappings&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=11114</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=11114"/>
		<updated>2021-09-15T00:23:48Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* audctl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioOutManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ListAudioOuts|ListAudioOuts]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut|OpenAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [3.0.0+] [[#ListAudioOutsAuto|ListAudioOutsAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] [[#OpenAudioOutAuto|OpenAudioOutAuto]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ListAudioOuts ==&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of [[#AudioOutInfo]]. Returns an u32 &#039;&#039;&#039;Count&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes a PID-descriptor, a type-0x5 input buffer &#039;&#039;&#039;NameIn&#039;&#039;&#039;, a type-0x6 output buffer &#039;&#039;&#039;NameOut&#039;&#039;&#039;, an input [[#AudioOutParameter]], an input Process handle and an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an [[#IAudioOut]] and an output [[#AudioOutParameterInternal]].&lt;br /&gt;
&lt;br /&gt;
== ListAudioOutsAuto ==&lt;br /&gt;
Same as [[#ListAudioOuts]], but takes a type-0x22 output buffer instead.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOutAuto ==&lt;br /&gt;
Same as [[#OpenAudioOut]], but takes a type-0x21 input buffer and a type-0x22 output buffer instead.&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioOut&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetAudioOutState|GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Start|Start]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Stop|Stop]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioOutBuffer|AppendAudioOutBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent|RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioOutBuffers|GetReleasedAudioOutBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#ContainsAudioOutBuffer|ContainsAudioOutBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [3.0.0+] [[#AppendAudioOutBufferAuto|AppendAudioOutBufferAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [3.0.0+] [[#GetReleasedAudioOutBuffersAuto|GetReleasedAudioOutBuffersAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [4.0.0+] [[#GetAudioOutBufferCount|GetAudioOutBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [4.0.0+] [[#GetAudioOutPlayedSampleCount|GetAudioOutPlayedSampleCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [4.0.0+] [[#FlushAudioOutBuffers|FlushAudioOutBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [6.0.0+] [[#SetAudioOutVolume|SetAudioOutVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [6.0.0+] [[#GetAudioOutVolume|GetAudioOutVolume]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
No input. Returns an output [[#AudioOutState]].&lt;br /&gt;
&lt;br /&gt;
=== Start ===&lt;br /&gt;
No input/output. &lt;br /&gt;
&lt;br /&gt;
Starts audio playback using data from appended buffers.&lt;br /&gt;
&lt;br /&gt;
=== Stop ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Stops audio playback. This waits for audio playback to finish before returning.&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBuffer ===&lt;br /&gt;
Takes a type-0x5 input buffer containing an [[#AudioOutBuffer]] and an input u64 &#039;&#039;&#039;BufferClientPtr&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
No input. Returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
The event is signalled when a buffer is released.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffers ===&lt;br /&gt;
Takes a type-0x6 output buffer &#039;&#039;&#039;AudioBuffer&#039;&#039;&#039;. Returns an output u32 &#039;&#039;&#039;Count&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AudioBuffer&#039;&#039;&#039; will be filled with the identifiers from [[#AppendAudioOutBuffer]] of audio buffers that have been released.&lt;br /&gt;
&lt;br /&gt;
=== ContainsAudioOutBuffer ===&lt;br /&gt;
Takes an input u64 &#039;&#039;&#039;AudioBufferPointer&#039;&#039;&#039;. Returns an output bool &#039;&#039;&#039;Contains&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBufferAuto ===&lt;br /&gt;
Same as [[#AppendAudioOutBuffer]], but takes a type-0x21 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffersAuto ===&lt;br /&gt;
Same as [[#GetReleasedAudioOutBuffer]], but takes a type-0x22 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutBufferCount ===&lt;br /&gt;
No input. Returns an output u32 &#039;&#039;&#039;AudioOutBufferCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutPlayedSampleCount ===&lt;br /&gt;
No input. Returns an output u64 &#039;&#039;&#039;AudioOutPlayedSampleCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== FlushAudioOutBuffers ===&lt;br /&gt;
No input. Returns an output bool &#039;&#039;&#039;Pending&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== SetAudioOutVolume ===&lt;br /&gt;
Takes an input float &#039;&#039;&#039;AudioOutVolume&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutVolume ===&lt;br /&gt;
No input. Returns an output float &#039;&#039;&#039;AudioOutVolume&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= audin:u =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioInManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ListAudioIns|ListAudioIns]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioIn|OpenAudioIn]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [3.0.0+] [[#ListAudioInsAuto|ListAudioInsAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] [[#OpenAudioInAuto|OpenAudioInAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [3.0.0+] [[#ListAudioInsAutoFiltered|ListAudioInsAutoFiltered]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [5.0.0+] [[#OpenAudioInProtocolSpecified|OpenAudioInProtocolSpecified]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ListAudioIns ==&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of [[#AudioInInfo]]. Returns an u32 &#039;&#039;&#039;Count&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioIn ==&lt;br /&gt;
Takes a PID-descriptor, a type-0x5 input buffer &#039;&#039;&#039;NameIn&#039;&#039;&#039;, a type-0x6 output buffer &#039;&#039;&#039;NameOut&#039;&#039;&#039;, an input [[#AudioInParameter]], an input Process handle and an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an [[#IAudioIn]] and an an output [[#AudioInParameterInternal]].&lt;br /&gt;
&lt;br /&gt;
== ListAudioInsAuto ==&lt;br /&gt;
Same as [[#ListAudioIns]], but takes a type-0x22 output buffer instead.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioInAuto ==&lt;br /&gt;
Same as [[#OpenAudioIn]], but takes a type-0x21 input buffer and a type-0x22 output buffer instead.&lt;br /&gt;
&lt;br /&gt;
== ListAudioInsAutoFiltered ==&lt;br /&gt;
Same as [[#ListAudioInsAuto]].&lt;br /&gt;
&lt;br /&gt;
== OpenAudioInProtocolSpecified ==&lt;br /&gt;
Same as [[#OpenAudioIn]], but takes an additional input u64 &#039;&#039;&#039;Protocol&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioIn&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetAudioInState|GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Start_2|Start]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Stop_2|Stop]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioInBuffer|AppendAudioInBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent_2|RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioInBuffers|GetReleasedAudioInBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#ContainsAudioInBuffer|ContainsAudioInBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [3.0.0+] [[#AppendUacInBuffer|AppendUacInBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [3.0.0+] [[#AppendAudioInBufferAuto|AppendAudioInBufferAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [3.0.0+] [[#GetReleasedAudioInBuffersAuto|GetReleasedAudioInBuffersAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [3.0.0+] [[#AppendUacInBufferAuto|AppendUacInBufferAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [4.0.0+] [[#GetAudioInBufferCount|GetAudioInBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [4.0.0+] [[#SetDeviceGain|SetDeviceGain]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [4.0.0+] [[#GetDeviceGain|GetDeviceGain]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [6.0.0+] [[#FlushAudioInBuffers|FlushAudioInBuffers]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
No input. Returns an output [[#AudioInState]].&lt;br /&gt;
&lt;br /&gt;
=== Start ===&lt;br /&gt;
No input/output. &lt;br /&gt;
&lt;br /&gt;
=== Stop ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioInBuffer ===&lt;br /&gt;
Takes a type-0x5 input buffer containing an [[#AudioInBuffer]] and an input u64 &#039;&#039;&#039;BufferClientPtr&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
No input. Returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
The event is signalled when a buffer is released.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioInBuffers ===&lt;br /&gt;
Takes a type-0x6 output buffer &#039;&#039;&#039;AudioBuffer&#039;&#039;&#039;. Returns an output u32 &#039;&#039;&#039;Count&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AudioBuffer&#039;&#039;&#039; will be filled with the identifiers from [[#AppendAudioInBuffer]] of audio buffers that have been released.&lt;br /&gt;
&lt;br /&gt;
=== ContainsAudioInBuffer ===&lt;br /&gt;
Takes an input u64 &#039;&#039;&#039;AudioBufferPointer&#039;&#039;&#039;. Returns an output bool &#039;&#039;&#039;Contains&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== AppendUacInBuffer ===&lt;br /&gt;
Takes a type-0x5 input buffer containing an &#039;&#039;&#039;UacInBuffer&#039;&#039;&#039;, an input u64 &#039;&#039;&#039;BufferClientPtr&#039;&#039;&#039; and an input Event handle. No output.&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioInBufferAuto ===&lt;br /&gt;
Same as [[#AppendAudioInBuffer]], but takes a type-0x21 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioInBuffersAuto ===&lt;br /&gt;
Same as [[#GetReleasedAudioInBuffer]], but takes a type-0x22 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== AppendUacInBufferAuto ===&lt;br /&gt;
Same as [[#AppendUacInBuffer]], but takes a type-0x21 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInBufferCount ===&lt;br /&gt;
No input. Returns an output u32 &#039;&#039;&#039;AudioInBufferCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== SetDeviceGain ===&lt;br /&gt;
Takes an input float &#039;&#039;&#039;DeviceGain&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceGain ===&lt;br /&gt;
No input. Returns an output float &#039;&#039;&#039;DeviceGain&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== FlushAudioInBuffers ===&lt;br /&gt;
No input. Returns an output bool &#039;&#039;&#039;Pending&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IFinalOutputRecorderManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenFinalOutputRecorder]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenFinalOutputRecorder ==&lt;br /&gt;
Takes an input [[#FinalOutputRecorderParameter]], an input Process handle and an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an [[#IFinalOutputRecorder]] and an output [[#FinalOutputRecorderParameterInternal]]. &lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IFinalOutputRecorder&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetFinalOutputRecorderState|GetFinalOutputRecorderState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Start_3|Start]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Stop_3|Stop]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendFinalOutputRecorderBuffer|AppendFinalOutputRecorderBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent_3|RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedFinalOutputRecorderBuffers|GetReleasedFinalOutputRecorderBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#ContainsFinalOutputRecorderBuffer|ContainsFinalOutputRecorderBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetFinalOutputRecorderBufferEndTime|GetFinalOutputRecorderBufferEndTime]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [3.0.0+] [[#AppendFinalOutputRecorderBufferAuto|AppendFinalOutputRecorderBufferAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [3.0.0+] [[#GetReleasedFinalOutputRecorderBuffersAuto|GetReleasedFinalOutputRecorderBuffersAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [6.0.0+] [[#FlushFinalOutputRecorderBuffers|FlushFinalOutputRecorderBuffers]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [9.0.0+] [[#AttachWorkBuffer|AttachWorkBuffer]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetFinalOutputRecorderState ===&lt;br /&gt;
No input. Returns an output [[#FinalOutputRecorderState]].&lt;br /&gt;
&lt;br /&gt;
=== Start ===&lt;br /&gt;
No input/output. &lt;br /&gt;
&lt;br /&gt;
=== Stop ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
=== AppendFinalOutputRecorderBuffer ===&lt;br /&gt;
Takes a type-0x5 input buffer containing an [[#FinalOutputRecorderBuffer]] and an input u64 &#039;&#039;&#039;BufferClientPtr&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
No input. Returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
The event is signalled when a buffer is released.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedFinalOutputRecorderBuffers ===&lt;br /&gt;
Takes a type-0x6 output buffer &#039;&#039;&#039;FinalOutputRecorderBuffer&#039;&#039;&#039;. Returns two output u64s &#039;&#039;&#039;Count&#039;&#039;&#039; and &#039;&#039;&#039;Released&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FinalOutputRecorderBuffer&#039;&#039;&#039; will be filled with the identifiers from [[#AppendFinalOutputRecorderBuffer]] of recorder buffers that have been released.&lt;br /&gt;
&lt;br /&gt;
=== ContainsFinalOutputRecorderBuffer ===&lt;br /&gt;
Takes an input u64 &#039;&#039;&#039;FinalOutputRecorderBufferPointer&#039;&#039;&#039;. Returns an output bool &#039;&#039;&#039;Contains&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetFinalOutputRecorderBufferEndTime ===&lt;br /&gt;
Takes an input u64 &#039;&#039;&#039;FinalOutputRecorderBufferPointer&#039;&#039;&#039;. Returns an output u64 &#039;&#039;&#039;Released&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== AppendFinalOutputRecorderBufferAuto ===&lt;br /&gt;
Same as [[#AppendFinalOutputRecorderBuffer]], but takes a type-0x21 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedFinalOutputRecorderBuffersAuto ===&lt;br /&gt;
Same as [[#GetReleasedFinalOutputRecorderBuffers]], but takes a type-0x22 buffer instead.&lt;br /&gt;
&lt;br /&gt;
=== FlushFinalOutputRecorderBuffers ===&lt;br /&gt;
No input. Returns an output bool &#039;&#039;&#039;Pending&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== AttachWorkBuffer ===&lt;br /&gt;
Takes an input [[#FinalOutputRecorderWorkBufferParameterInternal]]. No output.&lt;br /&gt;
&lt;br /&gt;
= auddev =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioSnoopManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [6.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || EnableDspUsageMeasurement&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DisableDspUsageMeasurement&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetDspUsage&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioRendererManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetAudioDeviceService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] OpenAudioRendererForManualExecution&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [4.0.0+] GetAudioDeviceServiceWithRevisionInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioDeviceService ===&lt;br /&gt;
Takes an input u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]], returns an output [[#IAudioDevice]].&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioRenderer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetSampleRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetSampleCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetMixBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Start&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Stop&lt;br /&gt;
|-&lt;br /&gt;
| 7 || QuerySystemEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#SetRenderingTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#GetRenderingTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [3.0.0+] RequestUpdateAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [3.0.0+] ExecuteAudioRendererRendering&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetSampleRate ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;SampleRate&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetSampleCount ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;SampleCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetMixBufferCount ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;MixBufferCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;State&#039;&#039;&#039; (0=Started, 1=Stopped).&lt;br /&gt;
&lt;br /&gt;
=== SetRenderingTimeLimit ===&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;RenderingTimeLimit&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetRenderingTimeLimit ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;RenderingTimeLimit&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IAudioDevice ==&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioDevice&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ListAudioDeviceName]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#SetAudioDeviceOutputVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetAudioDeviceOutputVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetActiveAudioDeviceName&lt;br /&gt;
|-&lt;br /&gt;
| 4 || QueryAudioDeviceSystemEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetActiveChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [3.0.0+] [[#ListAudioDeviceNameAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [3.0.0+] [[#SetAudioDeviceOutputVolumeAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [3.0.0+] [[#GetAudioDeviceOutputVolumeAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [3.0.0+] GetActiveAudioDeviceNameAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [3.0.0+] QueryAudioDeviceInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [3.0.0+] QueryAudioDeviceOutputEvent&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [5.0.0+] GetAudioSystemMasterVolumeSetting&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ListAudioDeviceName ===&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of &#039;&#039;&#039;DeviceName&#039;&#039;&#039;. Returns an output s32 for total number of output entries.&lt;br /&gt;
&lt;br /&gt;
=== SetAudioDeviceOutputVolume ===&lt;br /&gt;
Takes a type-0x5 input buffer containing the &#039;&#039;&#039;DeviceName&#039;&#039;&#039; and a float. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioDeviceOutputVolume ===&lt;br /&gt;
Takes a type-0x5 input buffer containing the &#039;&#039;&#039;DeviceName&#039;&#039;&#039;. Returns an output float.&lt;br /&gt;
&lt;br /&gt;
=== ListAudioDeviceNameAuto ===&lt;br /&gt;
Takes a type-0x22 output buffer containing an array of &#039;&#039;&#039;DeviceName&#039;&#039;&#039;. Returns an output s32 for total number of output entries.&lt;br /&gt;
&lt;br /&gt;
=== SetAudioDeviceOutputVolumeAuto ===&lt;br /&gt;
Takes a type-0x21 input buffer containing the &#039;&#039;&#039;DeviceName&#039;&#039;&#039; and a float. No output.&lt;br /&gt;
&lt;br /&gt;
=== GetAudioDeviceOutputVolumeAuto ===&lt;br /&gt;
Takes a type-0x21 input buffer containing the &#039;&#039;&#039;DeviceName&#039;&#039;&#039;. Returns an output float.&lt;br /&gt;
&lt;br /&gt;
= audout:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioOutManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was removed with [11.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [4.0.0+] GetProcessRecordVolume&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [4.0.0+] SetProcessRecordVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.&lt;br /&gt;
&lt;br /&gt;
= audin:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioInManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was removed with [11.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.&lt;br /&gt;
&lt;br /&gt;
= audrec:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IFinalOutputRecorderManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.&lt;br /&gt;
&lt;br /&gt;
= audren:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioRendererManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was removed with [11.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 5 || UnregisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [4.0.0+] GetProcessRecordVolume&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [4.0.0+] SetProcessRecordVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.&lt;br /&gt;
&lt;br /&gt;
= audout:d, audin:d, audrec:d, audren:d =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioOutManagerForDebugger&amp;quot;, &amp;quot;nn::audio::detail::IAudioInManagerForDebugger&amp;quot;, &amp;quot;nn::audio::detail::IFinalOutputRecorderManagerForDebugger&amp;quot;, &amp;quot;nn::audio::detail::IAudioRendererManagerForDebugger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
These were removed with [11.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#RequestSuspend]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResume]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspend ==&lt;br /&gt;
Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]].&lt;br /&gt;
&lt;br /&gt;
== RequestResume ==&lt;br /&gt;
Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]].&lt;br /&gt;
&lt;br /&gt;
= audctl =&lt;br /&gt;
This is &amp;quot;nn::audioctrl::detail::IAudioController&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetTargetVolume&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetTargetVolume&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTargetVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetTargetVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsTargetMute&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetTargetMute&lt;br /&gt;
|-&lt;br /&gt;
| 6 || IsTargetConnected&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetDefaultTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || GetDefaultTarget&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetAudioOutputMode&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SetAudioOutputMode&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SetForceMutePolicy&lt;br /&gt;
|-&lt;br /&gt;
| 12 || GetForceMutePolicy&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetOutputModeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetOutputModeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 15 || SetOutputTarget&lt;br /&gt;
|-&lt;br /&gt;
| 16 || SetInputTargetForceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [3.0.0+] SetHeadphoneOutputLevelMode&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [3.0.0+] GetHeadphoneOutputLevelMode&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [3.0.0+] AcquireAudioVolumeUpdateEventForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [3.0.0+] AcquireAudioOutputDeviceUpdateEventForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [3.0.0+] GetAudioOutputTargetForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [3.0.0+] NotifyHeadphoneVolumeWarningDisplayedEvent&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [4.0.0+] SetSystemOutputMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [4.0.0+] GetSystemOutputMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] [[#GetAudioVolumeDataForPlayReport]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [4.0.0+] [[#UpdateHeadphoneSettings]]&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [7.0.0+] SetVolumeMappingTableForDev&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [10.0.0+] GetAudioOutputChannelCountForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 29 || [10.0.0+] BindAudioOutputChannelCountUpdateEventForPlayReport&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 34 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 10001 || [13.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 10002 || [13.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetAudioVolumeDataForPlayReport ==&lt;br /&gt;
[13.0.0] Updated.&lt;br /&gt;
&lt;br /&gt;
=== UpdateHeadphoneSettings ===&lt;br /&gt;
Takes one input bool. No output.&lt;br /&gt;
NS calls this with the result of IParentalControlService::IsRestrictionEnabled[https://switchbrew.org/wiki/Parental_Control_services#IParentalControlService].&lt;br /&gt;
&lt;br /&gt;
= codecctl =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::ICodecController&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service no longer exists in [3.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Sleep]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#Wake]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetVolumeMax]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetVolumeMin]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#SetActiveTarget]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetActiveTarget]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#BindHeadphoneMicJackInterrupt]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#IsHeadphoneMicJackInserted]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#ClearHeadphoneMicJackInterrupt]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#IsRequested]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== Finalize ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== Sleep ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== Wake ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetVolume ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;Volume&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== GetVolumeMax ==&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;VolumeMax&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== GetVolumeMin ==&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;VolumeMin&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== SetActiveTarget ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;Target&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== GetActiveTarget ==&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;Target&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== BindHeadphoneMicJackInterrupt ==&lt;br /&gt;
No input. Returns an event handle.&lt;br /&gt;
&lt;br /&gt;
== IsHeadphoneMicJackInserted ==&lt;br /&gt;
No input. Returns a bool.&lt;br /&gt;
&lt;br /&gt;
== ClearHeadphoneMicJackInterrupt ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== IsRequested ==&lt;br /&gt;
No input. Returns a bool.&lt;br /&gt;
&lt;br /&gt;
= hwopus =&lt;br /&gt;
This is &amp;quot;nn::codec::detail::IHardwareOpusDecoderManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenHardwareOpusDecoder]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetWorkBufferSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [3.0.0+] [[#OpenHardwareOpusDecoderForMultiStream]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] [[#GetWorkBufferSizeForMultiStream]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [12.0.0+] OpenHardwareOpusDecoderEx&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [12.0.0+] GetWorkBufferSizeEx&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [12.0.0+] OpenHardwareOpusDecoderForMultiStreamEx&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [12.0.0+] GetWorkBufferSizeForMultiStreamEx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official sw can use either software libopus, or hwopus (libopus running on the ADSP) via &amp;quot;nn::codec::HardwareOpus*&amp;quot; (separate from the former).&lt;br /&gt;
&lt;br /&gt;
== OpenHardwareOpusDecoder ==&lt;br /&gt;
Takes two s32s &#039;&#039;&#039;SampleRate&#039;&#039;&#039; and &#039;&#039;&#039;ChannelCount&#039;&#039;&#039; packed as an u64, an u32 &#039;&#039;&#039;WorkBufferSize&#039;&#039;&#039; and a TransferMemory handle for &#039;&#039;&#039;WorkBuffer&#039;&#039;&#039;. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0.&lt;br /&gt;
&lt;br /&gt;
== GetWorkBufferSize ==&lt;br /&gt;
Takes two s32s &#039;&#039;&#039;SampleRate&#039;&#039;&#039; and &#039;&#039;&#039;ChannelCount&#039;&#039;&#039; packed as an u64. Returns the u32 required size for the decoder&#039;s work buffer. Official user-processes align the output size to page-alignment.&lt;br /&gt;
&lt;br /&gt;
== OpenHardwareOpusDecoderForMultiStream ==&lt;br /&gt;
Takes a type-0x19 input buffer, an u32 &#039;&#039;&#039;WorkBufferSize&#039;&#039;&#039; and a TransferMemory handle for &#039;&#039;&#039;WorkBuffer&#039;&#039;&#039;. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0.&lt;br /&gt;
&lt;br /&gt;
The input buffer is a [[#OpusMultiStreamParameters]] struct. The user-process initializes this struct the same way as [[#GetWorkBufferSizeForMultiStream]], except that an u8-array specified by the user is copied to +0x10 with size &#039;&#039;&#039;ChannelCount&#039;&#039;&#039;, when &#039;&#039;&#039;ChannelCount&#039;&#039;&#039; above 0.&lt;br /&gt;
&lt;br /&gt;
== GetWorkBufferSizeForMultiStream ==&lt;br /&gt;
Takes a type-0x19 input buffer. Returns the u32 required size for the decoder&#039;s work buffer. Official user-processes align the output size to page-alignment.&lt;br /&gt;
&lt;br /&gt;
The input buffer is a [[#OpusMultiStreamParameters]] struct.&lt;br /&gt;
&lt;br /&gt;
== OpenHardwareOpusDecoderEx ==&lt;br /&gt;
Takes a struct [[#OpusParametersEx]] and a u32 &#039;&#039;&#039;WorkBufferSize&#039;&#039;&#039; and a TransferMemory handle for &#039;&#039;&#039;WorkBuffer&#039;&#039;&#039;. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0.&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;UseLargeFrameSize&#039;&#039; in the parameter struct is 1 a larger output buffer that can store 120ms opus frames is used vs the default of 40ms.&lt;br /&gt;
&lt;br /&gt;
== GetWorkBufferSizeEx ==&lt;br /&gt;
Takes a struct [[#OpusParametersEx]]. Returns the u32 required size for the decoder&#039;s work buffer. Official user-processes align the output size to page-alignment.&lt;br /&gt;
&lt;br /&gt;
== OpenHardwareOpusDecoderForMultiStreamEx ==&lt;br /&gt;
Takes a type-0x19 input buffer, an u32 &#039;&#039;&#039;WorkBufferSize&#039;&#039;&#039; and a TransferMemory handle for &#039;&#039;&#039;WorkBuffer&#039;&#039;&#039;. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0.&lt;br /&gt;
&lt;br /&gt;
The input buffer is a [[#OpusMultiStreamParametersEx]] struct. When &#039;&#039;UseLargeFrameSize&#039;&#039; is 1 a larger output buffer that can store 120ms opus frames is used vs the default of 40ms.&lt;br /&gt;
&lt;br /&gt;
== GetWorkBufferSizeForMultiStreamEx ==&lt;br /&gt;
Takes a type-0x19 input buffer. Returns the u32 required size for the decoder&#039;s work buffer. Official user-processes align the output size to page-alignment.&lt;br /&gt;
&lt;br /&gt;
The input buffer is a [[#OpusMultiStreamParametersEx]] struct.&lt;br /&gt;
&lt;br /&gt;
== IHardwareOpusDecoder ==&lt;br /&gt;
This is &amp;quot;nn::codec::detail::IHardwareOpusDecoder&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [4.0.0+] [[#DecodeInterleavedOld]] ([1.0.0-3.0.2] DecodeInterleaved)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#SetContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [4.0.0+] [[#DecodeInterleavedForMultiStreamOld]] ([3.0.0-3.0.2] DecodeInterleavedForMultiStream)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] [[#SetContextForMultiStream]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [6.0.0+] [[#DecodeInterleavedWithPerfOld]] ([4.0.0-5.1.0] DecodeInterleavedWithPerf)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [6.0.0+] [[#DecodeInterleavedForMultiStreamWithPerfOld]] ([4.0.0-5.1.0] DecodeInterleavedForMultiStreamWithPerf)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [6.0.0+] DecodeInterleavedWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleaved)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [6.0.0+] DecodeInterleavedForMultiStreamWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleavedForMultiStream)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [7.0.0+] [[#DecodeInterleaved]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [7.0.0+] [[#DecodeInterleavedForMultiStream]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedOld ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x6 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039; and s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Calls the same func as [[#DecodeInterleaved]] internally with flag=0 and out_u64_ptr=NULL.&lt;br /&gt;
&lt;br /&gt;
=== SetContext ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;DecoderContextIn&#039;&#039;&#039;). Sends the unknown context data to the hardware decoder. The input buffer is unused.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedForMultiStreamOld ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x6 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039; and s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Calls the same func as [[#DecodeInterleavedForMultiStream]] internally with flag=0 and out_u64_ptr=NULL.&lt;br /&gt;
&lt;br /&gt;
=== SetContextForMultiStream ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;DecoderContextIn&#039;&#039;&#039;). Sends the unknown context data to the hardware decoder.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedWithPerfOld ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x46 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039;, s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;, and an u64.&lt;br /&gt;
&lt;br /&gt;
The output u64 is ignored by official user-processes.&lt;br /&gt;
&lt;br /&gt;
Calls the same func as [[#DecodeInterleaved]] internally with flag=0.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedForMultiStreamWithPerfOld ===&lt;br /&gt;
Takes a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x46 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039;, s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;, and an u64.&lt;br /&gt;
&lt;br /&gt;
The output u64 is ignored by official user-processes.&lt;br /&gt;
&lt;br /&gt;
Calls the same func as [[#DecodeInterleavedForMultiStream]] internally with flag=0.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleaved ===&lt;br /&gt;
Takes an input u8 bool flag, a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x46 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039;, s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;, and an u64.&lt;br /&gt;
&lt;br /&gt;
The bool flag indicates whether or not a reset of the decoder context is being requested.&lt;br /&gt;
&lt;br /&gt;
=== DecodeInterleavedForMultiStream ===&lt;br /&gt;
Takes an input u8 bool flag, a type-0x5 input buffer (&#039;&#039;&#039;OpusDataIn&#039;&#039;&#039;) and a type-0x46 output buffer (&#039;&#039;&#039;PcmDataOut&#039;&#039;&#039;). Decodes the Opus source data to PCM and returns output s32 &#039;&#039;&#039;DecodedDataSize&#039;&#039;&#039;, s32 &#039;&#039;&#039;DecodedSampleCount&#039;&#039;&#039;, and an u64.&lt;br /&gt;
&lt;br /&gt;
The bool flag indicates whether or not a reset of the decoder context is being requested.&lt;br /&gt;
&lt;br /&gt;
= auddebug =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service doesn&#039;t exist in retail units.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProfilerStart&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProfilerStop&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CpuProfilerStart&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CpuProfilerStop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= aud:a =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioSystemManagerForApplet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [11.0.0+]. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RegisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UnregisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || RequestSuspendAudio&lt;br /&gt;
|-&lt;br /&gt;
| 3 || RequestResumeAudio&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetAudioOutputProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetAudioOutputProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetAudioInputProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetAudioInputProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 8 || GetAudioOutputProcessRecordVolume&lt;br /&gt;
|-&lt;br /&gt;
| 9 || SetAudioOutputProcessRecordVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= aud:d =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::IAudioSystemManagerForDebugger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [11.0.0+]. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspendAudioForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResumeAudioForDebug&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SampleFormat =&lt;br /&gt;
This is &amp;quot;nn::audio::SampleFormat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PcmInt8&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PcmInt16&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PcmInt24&lt;br /&gt;
|-&lt;br /&gt;
| 4 || PcmInt32&lt;br /&gt;
|-&lt;br /&gt;
| 5 || PcmFloat&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Adpcm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutState =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioOutState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Started&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Stopped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInState =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioInState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Started&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Stopped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderState =&lt;br /&gt;
This is &amp;quot;nn::audio::FinalOutputRecorderState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Started&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Stopped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutInfo =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioOutInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInInfo =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioInInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutParameter =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioOutParameter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInParameter =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioInParameter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutParameterInternal =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::AudioOutParameterInternal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInParameterInternal =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::AudioInParameterInternal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutBuffer =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioOutBuffer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to next buffer (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of data in the sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of data in the sample buffer (unused/ignored?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioInBuffer =&lt;br /&gt;
This is &amp;quot;nn::audio::AudioInBuffer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to next buffer (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of data in the sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of data in the sample buffer (unused/ignored?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderBuffer =&lt;br /&gt;
This is &amp;quot;nn::audio::FinalOutputRecorderBuffer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to next buffer (unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Pointer to sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of data in the sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of data in the sample buffer (unused/ignored?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderParameter =&lt;br /&gt;
This is &amp;quot;nn::audio::FinalOutputRecorderParameter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderParameterInternal =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::FinalOutputRecorderParameterInternal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FinalOutputRecorderWorkBufferParameterInternal =&lt;br /&gt;
This is &amp;quot;nn::audio::detail::FinalOutputRecorderWorkBufferParameterInternal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= OpusParametersEx =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| UseLargeFrameSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= OpusMultiStreamParameters =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of streams&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of stereo streams&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x100&lt;br /&gt;
| u8 array of channel mappings&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= OpusMultiStreamParametersEx =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| SampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| ChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of streams&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of stereo streams&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| UseLargeFrameSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x100&lt;br /&gt;
| u8 array of channel mappings&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bluetooth_Driver_services&amp;diff=10912</id>
		<title>Bluetooth Driver services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bluetooth_Driver_services&amp;diff=10912"/>
		<updated>2021-05-04T21:01:49Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: Reverted edits by Qlutoo (talk) to last revision by Yellows8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= btdrv =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::IBluetoothDriver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Support for &amp;quot;nn::bluetooth::*&amp;quot; was added to sdknso with 6.x.&lt;br /&gt;
&lt;br /&gt;
btdrv appears to be designed to only be used by the two sysmodules which use it, [[HID_services|hid]] and [[BTM_services|btm]]. This service uses global state, nothing service-session-specific.&lt;br /&gt;
&lt;br /&gt;
This has max_sessions 30. IPC handling is done by the main-thread.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] sdknso moved various functions/etc from &amp;quot;nn::bluetooth::&amp;quot; into &amp;quot;nn::bluetooth::hal::&amp;quot;. This includes all functions exposing btdrv. These btdrv functions now automatically initialize the service if needed, the dedicated initialization function is now a stub since calling it is no longer needed. The internal &amp;quot;nn::bluetooth::user::&amp;quot; functions implementing [[#bt]] were moved to &amp;quot;nn::bluetooth::hal::user::&amp;quot;, these are called by the the user-facing &amp;quot;nn::bluetooth::&amp;quot; functions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#InitializeBluetoothDriver]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#InitializeBluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#EnableBluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#DisableBluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#FinalizeBluetooth]] ([?-8.1.1] [[#FinalizeBluetooth|CleanupBluetooth]])&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetAdapterProperties]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetAdapterProperty]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#SetAdapterProperty]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#StartInquiry]] ([?-8.1.1] [[#StartInquiry|StartDiscovery]])&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#StopInquiry]] ([?-8.1.1] [[#StopInquiry|CancelDiscovery]])&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#CreateBond]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#RemoveBond]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CancelBond]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#RespondToPinRequest]] ([?-8.1.1] [[#RespondToPinRequest|PinReply]])&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#RespondToSspRequest]] ([?-8.1.1] [[#RespondToSspRequest|SspReply]])&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetEventInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#InitializeHid]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#OpenHidConnection]] ([?-8.1.1] [[#OpenHidConnection|HidConnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#CloseHidConnection]] ([?-8.1.1] [[#CloseHidConnection|HidDisconnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#WriteHidData]] ([?-8.1.1] [[#WriteHidData|HidSendData]])&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#WriteHidData2]] ([?-8.1.1] [[#WriteHidData2|HidSendData2]])&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#SetHidReport]] ([?-8.1.1] [[#HidSetReport]])&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetHidReport]] ([?-8.1.1] [[#GetHidReport|HidGetReport]])&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#TriggerConnection]] ([?-8.1.1] [[#HidWakeController]])&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#AddPairedDeviceInfo]] ([?-8.1.1] [[#AddPairedDeviceInfo|HidAddPairedDevice]])&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [[#GetPairedDeviceInfo]] ([?-8.1.1] [[#GetPairedDeviceInfo|HidGetPairedDevice]])&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [[#FinalizeHid]] ([?-8.1.1] [[#FinalizeHid|CleanupHid]])&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [[#GetHidEventInfo]] ([?-8.1.1] [[#GetHidEventInfo|HidGetEventInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [[#SetTsi]] ([?-8.1.1]] [[#SetTsi|ExtSetTsi]])&lt;br /&gt;
|-&lt;br /&gt;
| 29 || [[#EnableBurstMode]] ([?-8.1.1] [[#EnableBurstMode|ExtSetBurstMode]])&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [[#SetZeroRetransmission]] ([?-8.1.1] [[#SetZeroRetransmission|ExtSetZeroRetran]])&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [[#EnableMcMode]] ([?-8.1.1] [[#EnableMcMode|ExtSetMcMode]])&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [[#EnableLlrScan]] ([?-8.1.1] [[#EnableLlrScan|ExtStartLlrMode]])&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [[#DisableLlrScan]] ([?-8.1.1] [[#DisableLlrScan|ExtExitLlrMode]])&lt;br /&gt;
|-&lt;br /&gt;
| 34 || [[#EnableRadio]] ([?-8.1.1] [[#EnableRadio|ExtSetRadio]])&lt;br /&gt;
|-&lt;br /&gt;
| 35 || [[#SetVisibility]] ([?-8.1.1] [[#SetVisibility|ExtSetVisibility]])&lt;br /&gt;
|-&lt;br /&gt;
| 36 || [4.0.0+] [[#EnableTbfcScan]] ([4.0.0-8.1.1] [[#EnableTbfcScan|ExtSetTbfcScan]])&lt;br /&gt;
|-&lt;br /&gt;
| 37 ([1.0.0-3.0.2] 36) || [[#RegisterHidReportEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 38 ([1.0.0-3.0.2] 37) || [[#GetHidReportEventInfo]] ([?-8.1.1] [[#GetHidReportEventInfo|HidGetReportEventInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 39 ([1.0.0-3.0.2] 38) || [[#GetLatestPlr]]&lt;br /&gt;
|-&lt;br /&gt;
| 40 ([3.0.0-3.0.2] 39) || [3.0.0+] [[#GetPendingConnections]] ([?-8.1.1] [[#GetPendingConnections|ExtGetPendingConnections]])&lt;br /&gt;
|-&lt;br /&gt;
| 41 ([3.0.0-3.0.2] 40) || [3.0.0+] [[#GetChannelMap]]&lt;br /&gt;
|-&lt;br /&gt;
| 42 ([3.0.0-3.0.2] 41) || [3.0.0+] [[#EnableTxPowerBoostSetting]] ([?-8.1.1] [[#EnableTxPowerBoostSetting|EnableBluetoothBoostSetting]])&lt;br /&gt;
|-&lt;br /&gt;
| 43 ([3.0.0-3.0.2] 42) || [3.0.0+] [[#IsTxPowerBoostSettingEnabled]] ([?-8.1.1] [[#IsTxPowerBoostSettingEnabled|IsBluetoothBoostSettingEnabled]])&lt;br /&gt;
|-&lt;br /&gt;
| 44 ([3.0.0-3.0.2] 43) || [3.0.0+] [[#EnableAfhSetting]] ([?-8.1.1] [[#EnableAfhSetting|EnableBluetoothAfhSetting]])&lt;br /&gt;
|-&lt;br /&gt;
| 45 ([3.0.0-3.0.2] 44) || [3.0.0+] [[#IsAfhSettingEnabled]] ([?-8.1.1] [[#IsAfhSettingEnabled|IsBluetoothAfhSettingEnabled]])&lt;br /&gt;
|-&lt;br /&gt;
| 46 || [5.0.0+] [[#InitializeBle]] ([5.0.0-8.1.1] [[#InitializeBle|InitializeBluetoothLe]])&lt;br /&gt;
|-&lt;br /&gt;
| 47 || [5.0.0+] [[#EnableBle]] ([5.0.0-8.1.1] [[#EnableBle|EnableBluetoothLe]])&lt;br /&gt;
|-&lt;br /&gt;
| 48 || [5.0.0+] [[#DisableBle]] ([5.0.0-8.1.1] [[#DisableBle|DisableBluetoothLe]])&lt;br /&gt;
|-&lt;br /&gt;
| 49 || [5.0.0+] [[#FinalizeBle]] ([5.0.0-8.1.1] [[#FinalizeBle|CleanupBluetoothLe]])&lt;br /&gt;
|-&lt;br /&gt;
| 50 || [5.0.0+] [[#SetBleVisibility]] ([5.0.0-8.1.1] [[#SetBleVisibility|SetLeVisibility]])&lt;br /&gt;
|-&lt;br /&gt;
| 51 || [5.0.0+] [[#SetBleConnectionParameter]] ([5.0.0-8.1.1] [[#SetLeConnectionParameter]])&lt;br /&gt;
|-&lt;br /&gt;
| 52 || [5.0.0+] [[#SetBleDefaultConnectionParameter]] ([5.0.0-8.1.1] [[#SetLeDefaultConnectionParameter]])&lt;br /&gt;
|-&lt;br /&gt;
| 53 || [5.0.0+] [[#SetBleAdvertiseData]] ([5.0.0-8.1.1] [[#SetBleAdvertiseData|SetLeAdvertiseData]])&lt;br /&gt;
|-&lt;br /&gt;
| 54 || [5.0.0+] [[#SetBleAdvertiseParameter]] ([5.0.0-8.1.1] [[#SetBleAdvertiseParameter|SetLeAdvertiseParameter]])&lt;br /&gt;
|-&lt;br /&gt;
| 55 || [5.0.0+] [[#StartBleScan]] ([5.0.0-8.1.1] [[#StartBleScan|StartLeScan]])&lt;br /&gt;
|-&lt;br /&gt;
| 56 || [5.0.0+] [[#StopBleScan]] ([5.0.0-8.1.1] [[#StopBleScan|StopLeScan]])&lt;br /&gt;
|-&lt;br /&gt;
| 57 || [5.0.0+] [[#AddBleScanFilterCondition]] ([5.0.0-8.1.1] [[#AddBleScanFilterCondition|AddLeScanFilterCondition]])&lt;br /&gt;
|-&lt;br /&gt;
| 58 || [5.0.0+] [[#DeleteBleScanFilterCondition]] ([5.0.0-8.1.1] [[#DeleteBleScanFilterCondition|DeleteLeScanFilterCondition]])&lt;br /&gt;
|-&lt;br /&gt;
| 59 || [5.0.0+] [[#DeleteBleScanFilter]] ([5.0.0-8.1.1] [[#DeleteBleScanFilter|DeleteLeScanFilter]])&lt;br /&gt;
|-&lt;br /&gt;
| 60 || [5.0.0+] [[#ClearBleScanFilters]] ([5.0.0-8.1.1] [[#ClearBleScanFilters|ClearLeScanFilters]])&lt;br /&gt;
|-&lt;br /&gt;
| 61 || [5.0.0+] [[#EnableBleScanFilter]] ([5.0.0-8.1.1] [[#EnableBleScanFilter|EnableLeScanFilter]])&lt;br /&gt;
|-&lt;br /&gt;
| 62 || [5.0.0+] [[#RegisterGattClient]] ([5.0.0-8.1.1] [[#RegisterGattClient|RegisterLeClient]])&lt;br /&gt;
|-&lt;br /&gt;
| 63 || [5.0.0+] [[#UnregisterGattClient]] ([5.0.0-8.1.1] [[#UnregisterGattClient|UnregisterLeClient]])&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [5.0.0+] [[#UnregisterAllGattClients]] ([5.0.0-8.1.1] [[#UnregisterAllGattClients|UnregisterLeClientAll]])&lt;br /&gt;
|-&lt;br /&gt;
| 65 || [5.0.0+] [[#ConnectGattServer]] ([5.0.0-8.1.1] [[#ConnectGattServer|LeClientConnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 66 || [5.1.0+] [[#CancelConnectGattServer]] ([5.1.0-8.1.1] [[#CancelConnectGattServer|LeClientCancelConnection]])&lt;br /&gt;
|-&lt;br /&gt;
| 67 ([5.0.0-5.0.2] 66) || [5.0.0+] [[#DisconnectGattServer]] ([?-8.1.1] [[#DisconnectGattServer|LeClientCancelConnection]])&lt;br /&gt;
|-&lt;br /&gt;
| 68 ([5.0.0-5.0.2] 67) || [5.0.0+] [[#GetGattAttribute]] ([5.0.0-8.1.1] [[#GetGattAttribute|LeClientGetAttributes]])&lt;br /&gt;
|-&lt;br /&gt;
| 69 ([5.0.0-5.0.2] 68) || [5.0.0+] [[#GetGattService]] ([5.0.0-8.1.1] [[#GetGattService|LeClientDiscoverService]])&lt;br /&gt;
|-&lt;br /&gt;
| 70 ([5.0.0-5.0.2] 69) || [5.0.0+] [[#ConfigureAttMtu]] ([5.0.0-8.1.1] [[#ConfigureAttMtu|LeClientConfigureMtu]])&lt;br /&gt;
|-&lt;br /&gt;
| 71 ([5.0.0-5.0.2] 70) || [5.0.0+] [[#RegisterGattServer]] ([5.0.0-8.1.1] [[#RegisterGattServer|RegisterLeServer]])&lt;br /&gt;
|-&lt;br /&gt;
| 72 ([5.0.0-5.0.2] 71) || [5.0.0+] [[#UnregisterGattServer]] ([5.0.0-8.1.1] [[#UnregisterGattServer|UnregisterLeServer]])&lt;br /&gt;
|-&lt;br /&gt;
| 73 ([5.0.0-5.0.2] 72) || [5.0.0+] [[#ConnectGattClient]] ([5.0.0-8.1.1] [[#ConnectGattClient|LeServerConnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 74 ([5.0.0-5.0.2] 73) || [5.0.0+] [[#DisconnectGattClient]] ([5.0.0-8.1.1] [[#LeServerDisconnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 75 || [5.0.0+] [[#AddGattService]] ([5.0.0-8.1.1] [[#AddGattService|CreateLeService]])&lt;br /&gt;
|-&lt;br /&gt;
| 76 ([5.0.0-5.0.2] 74) || [5.0.0+] [[#EnableGattService]] ([5.0.0-8.1.1] [[#EnableGattService|StartLeService]])&lt;br /&gt;
|-&lt;br /&gt;
| 77 || [5.0.0+] [[#AddGattCharacteristic]] ([5.0.0-8.1.1] [[#AddGattCharacteristic|AddLeCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 78 ([5.0.0-5.0.2] 76) || [5.0.0+] [[#AddGattDescriptor]] ([5.0.0-8.1.1] [[#AddGattDescriptor|AddLeDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 79 ([5.0.0-5.0.2] 78) || [5.0.0+] [[#GetBleManagedEventInfo]] ([5.0.0-8.1.1] [[#GetBleManagedEventInfo|GetLeCoreEventInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 80 ([5.0.0-5.0.2] 79) || [5.0.0+] [[#GetGattFirstCharacteristic]] ([5.0.0-8.1.1] [[#GetGattFirstCharacteristic|LeGetFirstCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 81 ([5.0.0-5.0.2] 80) || [5.0.0+] [[#GetGattNextCharacteristic]] ([5.0.0-8.1.1] [[#GetGattNextCharacteristic|LeGetNextCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 82 ([5.0.0-5.0.2] 81) || [5.0.0+] [[#GetGattFirstDescriptor]] ([5.0.0-8.1.1] [[#GetGattFirstDescriptor|LeGetFirstDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 83 ([5.0.0-5.0.2] 82) || [5.0.0+] [[#GetGattNextDescriptor]] ([5.0.0-8.1.1] [[#GetGattNextDescriptor|LeGetNextDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 84 || [5.0.0+] [[#RegisterGattManagedDataPath]] ([5.0.0-8.1.1] [[#RegisterGattManagedDataPath|RegisterLeCoreDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 85 || [5.0.0+] [[#UnregisterGattManagedDataPath]] ([5.0.0-8.1.1] [[#UnregisterGattManagedDataPath|UnregisterLeCoreDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 86 || [5.0.0+] [[#RegisterGattHidDataPath]] ([5.0.0-8.1.1] [[#RegisterGattHidDataPath|RegisterLeHidDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 87 || [5.0.0+] [[#UnregisterGattHidDataPath]] ([5.0.0-8.1.1] [[#UnregisterGattHidDataPath|UnregisterLeHidDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 88 || [5.0.0+] [[#RegisterGattDataPath]] ([5.0.0-8.1.1] [[#RegisterGattDataPath|RegisterLeDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 89 ([5.0.0-5.0.2] 83) || [5.0.0+] [[#UnregisterGattDataPath]] ([5.0.0-8.1.1] [[#UnregisterGattDataPath|UnregisterLeDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 90 ([5.0.0-5.0.2] 89) || [5.0.0+] [[#ReadGattCharacteristic]] ([5.0.0-8.1.1] [[#ReadGattCharacteristic|LeClientReadCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 91 ([5.0.0-5.0.2] 90) || [5.0.0+] [[#ReadGattDescriptor]] ([5.0.0-8.1.1] [[#ReadGattDescriptor|LeClientReadDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 92 ([5.0.0-5.0.2] 91) || [5.0.0+] [[#WriteGattCharacteristic]] ([5.0.0-8.1.1] [[#WriteGattCharacteristic|LeClientWriteCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 93 ([5.0.0-5.0.2] 92) || [5.0.0+] [[#WriteGattDescriptor]] ([5.0.0-8.1.1] [[#WriteGattDescriptor|LeClientWriteDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 94 || [5.0.0+] [[#RegisterGattNotification]] ([5.0.0-8.1.1] [[#RegisterGattNotification|LeClientRegisterNotification]])&lt;br /&gt;
|-&lt;br /&gt;
| 95 ([5.0.0-5.0.2] 93) || [5.0.0+] [[#UnregisterGattNotification]] ([5.0.0-8.1.1] [[#UnregisterGattNotification|LeClientDeregisterNotification]])&lt;br /&gt;
|-&lt;br /&gt;
| 96 ([5.0.0-5.0.2] 95) || [5.0.0+] [[#GetLeHidEventInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 97 ([5.0.0-5.0.2] 96) || [5.0.0+] [[#RegisterBleHidEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 98 || [5.1.0+] [[#SetBleScanParameter]] ([5.1.0-8.1.1] [[#SetBleScanParameter|SetLeScanParameter]])&lt;br /&gt;
|-&lt;br /&gt;
| 99 || [10.0.0+] [[#MoveToSecondaryPiconet]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [12.0.0+] [[#IsBluetoothEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 128 || [12.0.0+] [[#AcquireAudioEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 129 || [12.0.0+] [[#GetAudioEventInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 130 || [12.0.0+] [[#OpenAudioConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 131 || [12.0.0+] [[#CloseAudioConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 132 || [12.0.0+] [[#OpenAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 133 || [12.0.0+] [[#CloseAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 134 || [12.0.0+] [[#AcquireAudioOutStateChangedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 135 || [12.0.0+] [[#StartAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 136 || [12.0.0+] [[#StopAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 137 || [12.0.0+] [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 138 || [12.0.0+] [[#GetAudioOutFeedingCodec]]&lt;br /&gt;
|-&lt;br /&gt;
| 139 || [12.0.0+] [[#GetAudioOutFeedingParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 140 || [12.0.0+] [[#AcquireAudioOutBufferAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 141 || [12.0.0+] [[#SendAudioData]]&lt;br /&gt;
|-&lt;br /&gt;
| 142 || [12.0.0+] [[#AcquireAudioControlInputStateChangedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 143 || [12.0.0+] [[#GetAudioControlInputState]]&lt;br /&gt;
|-&lt;br /&gt;
| 144 || [12.0.0+] [[#AcquireAudioConnectionStateChangedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 145 || [12.0.0+] [[#GetConnectedAudioDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 256 || [5.0.0+] [[#IsManufacturingMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 257 || [7.0.0+] [[#EmulateBluetoothCrash]]&lt;br /&gt;
|-&lt;br /&gt;
| 258 || [9.0.0+] [[#GetBleChannelMap]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cmds 46-83 were added with [4.0.0+].&lt;br /&gt;
&lt;br /&gt;
Various cmds were moved/etc starting with [[#InitializeBle]] with [5.0.0+].&lt;br /&gt;
&lt;br /&gt;
== InitializeBluetoothDriver ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
[1.0.0-10.2.0] This is the first cmd used during service init.&lt;br /&gt;
&lt;br /&gt;
This just returns 0.&lt;br /&gt;
&lt;br /&gt;
== InitializeBluetooth ==&lt;br /&gt;
No input, returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]], this should not be used by other processes.&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] This first initializes the funcptr table interfaces to the defaults (same as [[#DisableBluetooth]]). [[Settings_services#GetConfigurationId1|GetConfigurationId1]] is used, an error is thrown if the output string is empty, or if it matches &amp;quot;SDEV_00_01_00&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If the flag for [[#IsManufacturingMode]] is 0, or if this cmd was already used where that flag was 1, an interface funcptr is called. This is passed a ptr to a table of funcptrs. The ret is converted to a Result and returned if needed. [12.0.0+] A normal func is called instead, with no params/ret. This cmd always returns 0.&lt;br /&gt;
&lt;br /&gt;
The above called func does the following:&lt;br /&gt;
* [1.0.0-11.0.1] A func is called, which copies the input funcptr table into global state. These are used for writing events into [[#EventInfo]].&lt;br /&gt;
* A func is called 5 times with input param = [1-5]. This initializes the specified nn::bluetooth::CircularBuffer (sharedmem and internal). [12.0.0+] This functionality is now inlined.&lt;br /&gt;
* A func is called for creating the &amp;quot;nn.bluetooth.HidMessageHandler&amp;quot; thread. [12.0.0+] This functionality is now inlined.&lt;br /&gt;
&lt;br /&gt;
Lastly, the Event is ([1.0.0-11.0.1] created and) returned (which global state the Event is stored in depends on whether the code-path which calls the above funcptr was used).&lt;br /&gt;
&lt;br /&gt;
== EnableBluetooth ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] This first calls an interface funcptr, on failure 0xCA71 is returned.&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] A global fixed [[#Address]] is copied to stack, this stack data is then overwritten with the output from [[Settings_services|GetBluetoothBdAddress]]. If GetBluetoothBdAddress fails, this will Abort. Then the same funcptr used by [[#SetAdapterProperty]] is called with this stack data, with [[#BluetoothPropertyType|type2]]. A converted error is returned if needed.&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] The last two bytes of the stack [[#Address]] are inverted (byteval = ~byteval), then the above funcptr is called with this for [[#BluetoothPropertyType|type3]]. Error conversion is handled if needed, then this returns 0.&lt;br /&gt;
&lt;br /&gt;
The first funcptr called above does the following ([12.0.0+] this code is now inlined):&lt;br /&gt;
* Calls a GPIO func with param=0, [[SVC|sleeps]] for 10000000 nanoseconds, then calls the GPIO func again with param=1.&lt;br /&gt;
* [12.0.0+] Calls a func to update an interface object ptr to use the enabled-object. A vfunc for various interface objects are called, with Result 0xCA71 being returned if the ret is non-zero (failure after the first interface object will trigger an Abort).&lt;br /&gt;
* [12.0.0+] [[Settings_services|GetBluetoothBdAddress]] is used, on failure this will Abort. Then the same vfunc used by [[#SetAdapterProperty]] is called with the output from GetBluetoothBdAddress, with [[#AdapterPropertyType|type0]]. This will Abort on failure.&lt;br /&gt;
* [12.0.0+] The last two bytes of the stack [[#Address]] are inverted (byteval = ~byteval), then the above vfunc is called with this for [[#AdapterPropertyType|type3]]. This will Abort on failure, otherwise 0 is returned.&lt;br /&gt;
* [12.0.0+] Various code described below was moved into the above vfunc(s), etc.&lt;br /&gt;
* Calls a func for initializing the paired-devices table (empty).&lt;br /&gt;
* Calls a modified version of BSA_Boot, which handles BSA server initialization.&lt;br /&gt;
* Calls a func which uses &amp;lt;code&amp;gt;nn::os::InitializeEvent&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;nn::os::InitializeMutex&amp;lt;/code&amp;gt; with global state.&lt;br /&gt;
* Calls a func which handles BSA client initialization. This also sends a message to the &amp;quot;nn.bluetooth.HidMessageHandler&amp;quot; thread for enabling bluetooth (which updates the interface funcptr tables, etc).&lt;br /&gt;
* Calls a func which enables HID-Host with BSA, and opens the UIPC channel where the registered funcptr is used for writing HID DATA [[#GetHidReportEventInfo|reports]] which were received.&lt;br /&gt;
* Calls a func which initializes global state and uses BSA for initializing Security.&lt;br /&gt;
* If the output flag from [[Settings_services#GetBluetoothBoostEnableFlag|GetBluetoothBoostEnableFlag]] is set, a func is called.&lt;br /&gt;
* If the output flag from [[Settings_services#GetBluetoothAfhEnableFlag|GetBluetoothAfhEnableFlag]] is not set, a func is called.&lt;br /&gt;
&lt;br /&gt;
The GPIO func does the following:&lt;br /&gt;
* Initializes the [[Bus_services|gpio]] service.&lt;br /&gt;
* Uses [[Bus_services#OpenSession|OpenSession]] with value 0x03 (BtRst).&lt;br /&gt;
* Uses SetDirection with value 0x1.&lt;br /&gt;
* Uses SetValue with the param which was passed to this func.&lt;br /&gt;
* Does cleanup for the session object and exits the service.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] The Enable vfunc called above for Audio does the following:&lt;br /&gt;
* Calls a func which does the following:&lt;br /&gt;
** Uses BSA to enable AV. Besides the callback, the only field in the passed struct which is set is &amp;lt;code&amp;gt;features&amp;lt;/code&amp;gt;. This is set for &amp;quot;remote control target&amp;quot;.&lt;br /&gt;
** Error handling + state setup is done.&lt;br /&gt;
** Uses BSA to register AV twice, with the default input struct.&lt;br /&gt;
** Error handling + state setup is done.&lt;br /&gt;
* If an error occurred in a certain range, a [[#FatalReason|fatal]] is triggered and 0 is returned.&lt;br /&gt;
* Otherwise when successful, state init is done then 0 is returned.&lt;br /&gt;
&lt;br /&gt;
== DisableBluetooth ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] This calls an interface funcptr. On success, the funcs for updating the interface funcptr tables are called (same as [[#InitializeBluetooth]]). Then the converted ret is returned as needed.&lt;br /&gt;
&lt;br /&gt;
* [12.0.0+] Vfuncs for various interface objects are called, with failure triggering an Abort in some cases.&lt;br /&gt;
* [12.0.0+] Calls funcs to update interfaces object ptrs to use the disabled-object.&lt;br /&gt;
* [12.0.0+] Calls the same GPIO func as [[#EnableBluetooth]] with param=0, then 0 is returned.&lt;br /&gt;
* [12.0.0+] Various code described below was moved into the above vfunc(s), etc.&lt;br /&gt;
&lt;br /&gt;
When bluetooth is already disabled, that funcptr just returns 0. Otherwise when it&#039;s already enabled, it does the following:&lt;br /&gt;
* Calls a func which closes the HID-Host UIPC channel, and uses BSA for disabling HID-Host.&lt;br /&gt;
* Calls a func which uses &amp;lt;code&amp;gt;nn::os::FinalizeMutex&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;nn::os::FinalizeEvent&amp;lt;/code&amp;gt; with global state.&lt;br /&gt;
* Uses &amp;lt;code&amp;gt;nn::os::InitializeEvent&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;nn::os::InitializeTimerEvent&amp;lt;/code&amp;gt;, with a ptr for the former Event being written into global state.&lt;br /&gt;
* Uses BTA_DisableBluetooth.&lt;br /&gt;
* Uses &amp;lt;code&amp;gt;nn::os::StartOneShotTimerEvent&amp;lt;/code&amp;gt; with a value of 5 seconds.&lt;br /&gt;
* Waits for either of the above to trigger using &amp;lt;code&amp;gt;nn::os::TryWaitEvent&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;nn::os::TryWaitTimerEvent&amp;lt;/code&amp;gt;, with each loop iteration [[SVC|sleeping]] for 5000000 nanoseconds.&lt;br /&gt;
** The Event is signaled when disabling bluetooth finishes.&lt;br /&gt;
* Cleanup for the above Event/TimerEvent is done.&lt;br /&gt;
* Calls a func which handles BSA client cleanup.&lt;br /&gt;
* Calls a func which does the following:&lt;br /&gt;
** Calls a func which tells the &amp;quot;nn.bluetooth.TimerThread&amp;quot; to exit, then destroys that thread (GKI timer thread).&lt;br /&gt;
** Calls a func which just returns.&lt;br /&gt;
** Calls a func which handles GKI cleanup (including destroying the task threads).&lt;br /&gt;
** Calls a func which waits for the UIPC threads to exit + destroys the threads and handles cleanup.&lt;br /&gt;
* Calls the same GPIO func as [[#EnableBluetooth]] with param=0.&lt;br /&gt;
* Sends a message to the &amp;quot;nn.bluetooth.HidMessageHandler&amp;quot; thread for disabling bluetooth (which updates the interface funcptr tables, etc).&lt;br /&gt;
&lt;br /&gt;
== FinalizeBluetooth ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Not used by [[BTM_services|btm]], other processes should not use this.&lt;br /&gt;
&lt;br /&gt;
Calls an interface funcptr, the ret is ignored. The Event setup by [[#InitializeBluetooth]] is closed. Lastly, the same funcs used by [[#InitializeBluetooth]] are called for initializing the interface funcptr tables to the defaults, then 0 is returned.&lt;br /&gt;
&lt;br /&gt;
The above interface funcptr does the following (regardless of whether bluetooth is disabled/enabled):&lt;br /&gt;
* Calls a func which: uses &amp;lt;code&amp;gt;nn::os::SignalLightEvent&amp;lt;/code&amp;gt; to tell the &amp;quot;nn.bluetooth.HidMessageHandler&amp;quot; thread to exit, then waits for the thread to exit and destroys the thread.&lt;br /&gt;
* Calls the same func as [[#InitializeBluetooth]] for setting event funcptrs in global state, except in this case the content of the input table is all NULL.&lt;br /&gt;
* Calls a func 5 times with param=[1-5]. This is the cleanup version of the nn::bluetooth::CircularBuffer setup func used by [[#InitializeBluetooth]].&lt;br /&gt;
&lt;br /&gt;
== GetAdapterProperties ==&lt;br /&gt;
Takes a type-0x1A output buffer containing an [[#AdapterProperty]].&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes a type-0x1A output buffer containing an [[#AdapterPropertySet]].&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== GetAdapterProperty ==&lt;br /&gt;
Takes an input [[#BluetoothPropertyType]] and a type-0xA output buffer.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes an input [[#AdapterPropertyType]] and a type-0x1A output buffer containing an [[#AdapterProperty]].&lt;br /&gt;
&lt;br /&gt;
== SetAdapterProperty ==&lt;br /&gt;
Takes an input [[#BluetoothPropertyType]] and a type-0x9 input buffer.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes a type-0x19 input buffer containing an [[#AdapterProperty]], no output.&lt;br /&gt;
&lt;br /&gt;
== StartInquiry ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes an input BitFlagSet 32bit [[#ServiceFlag|services]] and s64 nanoseconds_duration, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This starts Inquiry, the output data will be available via [[#GetEventInfo]]. Inquiry will automatically stop in 10.24 seconds ([12.0.0+] calculated from the input duration instead).&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] When services is -1 the original defaults from pre-12.0.0 are used (besides duration). Otherwise, services is written into the parameter struct (masked with the all-allowed-BSA-services value), and the EventInfo for discovered devices are triggered when inquiry finishes instead of immediately.&lt;br /&gt;
&lt;br /&gt;
== StopInquiry ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This stops Inquiry which was started by [[#StartInquiry]], if it&#039;s still active.&lt;br /&gt;
&lt;br /&gt;
== CreateBond ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x19 input buffer containing a [[#TransportType]], no output.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now only takes an [[#Address]] and a [[#TransportType]] without a buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The [[#TransportType]] is unused.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RemoveBond ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== CancelBond ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RespondToPinRequest ==&lt;br /&gt;
Takes an input [[#Address]], a bool, an u8, a [[#BluetoothPinCode]], no output.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes an input [[#Address]], a [[#PinCode]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified s32 for the u8.&lt;br /&gt;
&lt;br /&gt;
The sysmodule impl for the funcptr used with this cmd only uses the [[#Address]] - this and hard-coded PIN &amp;quot;0000&amp;quot; are written into the parameter struct (and a size field for the PIN).&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] The input [[#PinCode]] is now actually used and passed to BSA, instead of hard-coding the PIN.&lt;br /&gt;
&lt;br /&gt;
== RespondToSspRequest ==&lt;br /&gt;
Takes an input [[#Address]], a [[#BluetoothSspVariant]], a bool, an u32, no output.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes an input [[#Address]], a bool, a [[#BluetoothSspVariant]], an u32, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The sysmodule impl for the funcptr/vfunc used with this cmd only uses the [[#Address]] and bool - the parameter struct size is only 0x7-bytes. The bool indicates whether the request is accepted.&lt;br /&gt;
&lt;br /&gt;
== GetEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer and returns an output [[#EventType]].&lt;br /&gt;
&lt;br /&gt;
This copies 0x400-bytes from state to the output buffer, copies the [[#EventType]] from state to output, and signals an event.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Mutex locking is now used, with the code prior to the event-signal. If a size field in state is 0, writing the output [[#EventType]]/buffer is skipped. Otherwise, the size field is reset to 0, the [[#EventType]] from state is copied to output, and the original size field is used to memcpy to the output buffer from state.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
See [[#EventInfo]].&lt;br /&gt;
&lt;br /&gt;
== InitializeHid ==&lt;br /&gt;
Takes an input u16, returns an output Event with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
Originally sdknso used an user-specified value for the u16, however with [9.0.0+] it uses hard-coded value 0x1 instead.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]], this should not be used by other processes.&lt;br /&gt;
&lt;br /&gt;
== OpenHidConnection ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This just returns 0.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== CloseHidConnection ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== HidSendData ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x19 input buffer containing a [[#HidData]], no output.&lt;br /&gt;
&lt;br /&gt;
== WriteHidData ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x19 input buffer containing a [[#HidReport]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
This sends a HID DATA transaction packet with report-type Output.&lt;br /&gt;
&lt;br /&gt;
== WriteHidData2 ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x9 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
This is internally the same as [[#WriteHidData]], with the input buffer being directly passed to the funcptr instead of a tmp copy of the input [[#HidReport]].&lt;br /&gt;
&lt;br /&gt;
== HidSetReport ==&lt;br /&gt;
Takes an input [[#Address]], a [[#BluetoothHhReportType]], a type-0x19 input buffer containing a [[#HidData]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetHidReport ==&lt;br /&gt;
Takes an input [[#Address]], a [[#BluetoothHhReportType]], a type-0x19 input buffer containing a [[#HidReport]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
This sends a HID SET_REPORT transaction packet.&lt;br /&gt;
&lt;br /&gt;
== GetHidReport ==&lt;br /&gt;
Takes an input [[#Address]], an u8 report_id, a [[#BluetoothHhReportType]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
This sends a HID GET_REPORT transaction packet. The report_id is sent in the packet for the Report Id, when non-zero.&lt;br /&gt;
&lt;br /&gt;
== HidWakeController ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
== TriggerConnection ==&lt;br /&gt;
Takes an input [[#Address]] and an u16, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This calls an interface funcptr, then returns the converted ret as needed.&lt;br /&gt;
&lt;br /&gt;
The funcptr does the following:&lt;br /&gt;
* Calls a func, returning the ret on failure. This uses a BSA extension (message 0x8CE), with the input u16 being used with this.&lt;br /&gt;
* Then another func is called, with the input [[#Address]], with the ret from here being returned. This throws an error if the device isn&#039;t paired. This opens a HID-Host connection to the specified [[#Address]]. The passed sec_mask is 0x12 (Inbound/outbound authentication required), and brcm_mask is set for enabling TBFC Page.&lt;br /&gt;
&lt;br /&gt;
The handler for the above message with the used bit flag does the following:&lt;br /&gt;
* Uses HCI vendor command 0xFCC2 with param_len=0xE. Param data: u32 +0 = 0x14E18, u16 +4 = 0x20, u8 +6 = 0x2, u16 +7 = {input u16 message param value} (written via u8 writes), u32 +9 = 0x30200, u8 +0xD = 0.&lt;br /&gt;
&lt;br /&gt;
== AddPairedDeviceInfo ==&lt;br /&gt;
Takes a type-0x19 input buffer containing [[Settings_services#BluetoothDevicesSettings|BluetoothDevicesSettings]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] If [[Settings_services#BluetoothDevicesSettings|TrustedServices]] is 0, value 0x100000 is used. When bit20 is set, HID is initialized for this device, otherwise when bitmask 0xC0000 is set (&amp;lt;code&amp;gt;if((TrustedServices &amp;amp; 0xC0000) != 0)&amp;lt;/code&amp;gt;) [[#OpenAudioConnection|audio]] is initialized for this device.&lt;br /&gt;
&lt;br /&gt;
== GetPairedDeviceInfo ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x1A output buffer containing [[Settings_services#BluetoothDevicesSettings|BluetoothDevicesSettings]].&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== FinalizeHid ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Not used by [[BTM_services|btm]], other processes should not use this.&lt;br /&gt;
&lt;br /&gt;
== GetHidEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer, returns an output [[#HidEventType]].&lt;br /&gt;
&lt;br /&gt;
This copies 0x480-bytes from state to the output buffer. [[#HidEventType]] is set to: stateval!=0 ? 7 : 0. Once finished, this signals an event.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Mutex locking is now used, with the code prior to the event-signal. If a size field in state is 0, writing the output [[#HidEventType]]/buffer is skipped. Otherwise, the size field is reset to 0, the [[#HidEventType]] from state is copied to output, and the original size field is used to memcpy to the output buffer from state.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
See [[#HidEventInfo]].&lt;br /&gt;
&lt;br /&gt;
== SetTsi ==&lt;br /&gt;
Takes an input [[#Address]] and an u8 Tsi, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The response will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension.&lt;br /&gt;
&lt;br /&gt;
Tsi: non-value-0xFF to Set (BSA message 0x8CA), value 0xFF to Exit (BSA message 0x8CB).&lt;br /&gt;
&lt;br /&gt;
Set: this uses command HCI_Set_MWS_Signaling with data determined using the input u8. Then this uses Broadcom HCI vendor command 0xFD95 with param_len=0x2: param +0x0 = 0x1, +0x1 = {Tsi value}. When this vendor command is successful, it then uses command HCI_Sniff_Mode with data selected using the Tsi value as the array-index. If the remote device doesn&#039;t support this (status indicating error with Mode Change Event for the response to HCI_Sniff_Mode), an error will be thrown via the [[#GetHidEventInfo|EventInfo]]. That error can be resolved if the remote device uses the HCI_Sniff_Mode command prior to the Switch doing so.&lt;br /&gt;
&lt;br /&gt;
Exit: this uses command HCI_Exit_Sniff_Mode.&lt;br /&gt;
&lt;br /&gt;
== EnableBurstMode ==&lt;br /&gt;
Takes an input [[#Address]] and a bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The response will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension.&lt;br /&gt;
&lt;br /&gt;
bool flag: true = Set (BSA message 0x8CC), false = Exit (BSA message 0x8CD).&lt;br /&gt;
&lt;br /&gt;
== SetZeroRetransmission ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x9 input buffer containing an array of u8s, no output.&lt;br /&gt;
&lt;br /&gt;
The entry-count is clamped to a maximum of 5, the count can be 0. This buffer contains ReportIds.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The response will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CF).&lt;br /&gt;
&lt;br /&gt;
== EnableMcMode ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CE).&lt;br /&gt;
&lt;br /&gt;
== EnableLlrScan ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CE).&lt;br /&gt;
&lt;br /&gt;
== DisableLlrScan ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CE).&lt;br /&gt;
&lt;br /&gt;
== EnableRadio ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CE).&lt;br /&gt;
&lt;br /&gt;
The message is handled by using HCI vendor command 0xFC34 with param_len=0x1: param +0 = {input bool}.&lt;br /&gt;
&lt;br /&gt;
== SetVisibility ==&lt;br /&gt;
Takes two input bools, no output.&lt;br /&gt;
&lt;br /&gt;
The first bool controls Inquiry Scan, whether the device can be discovered during Inquiry. The second bool controls Page Scan, whether the device accepts connections.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== EnableTbfcScan ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterHidReportEvent ==&lt;br /&gt;
No input, returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This gets the Event handle for a previously created Event.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
The Event is signaled when data is available with [[#GetHidReportEventInfo]].&lt;br /&gt;
&lt;br /&gt;
== GetHidReportEventInfo ==&lt;br /&gt;
No input, takes a type-0xA output buffer and returns a [[#HidEventType]].&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] No longer takes a buffer or returns output, now returns an output sharedmem handle. sdknso maps this with size=0x3000 and permissions=RW-.&lt;br /&gt;
&lt;br /&gt;
Originally this was used in a dedicated sdknso func, with [7.0.0+] this is now used at the start of the sdknso impl for [[#RegisterHidReportEvent]] if the above sharedmem was not mapped yet.&lt;br /&gt;
&lt;br /&gt;
The [7.0.0+] GetHidReportEventInfo sdknso func loads data using the above sharedmem.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
== GetLatestPlr ==&lt;br /&gt;
Takes a type-0x16 output buffer containing a [[#PlrList]] ([1.0.0-8.1.1] [[#PlrStatistics]]).&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes a type-0xA output buffer containing an array of [[#PacketLostRate]], returns an output s32.&lt;br /&gt;
&lt;br /&gt;
This calls an interface funcptr then returns 0.&lt;br /&gt;
&lt;br /&gt;
The interface funcptr impl will Abort if the output struct ptr is NULL. Then data is copied from global state to output, doing double-&amp;gt;u32 conversion as needed.&lt;br /&gt;
&lt;br /&gt;
== GetPendingConnections ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The output data will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
== GetChannelMap ==&lt;br /&gt;
Takes a type-0x16 output buffer containing a [[#ChannelMapList]].&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes two type-0xA output buffers, returns an output s32. The first buffer contains an array of [[#Address]], the second buffer contains an array of BitFlagSet with [[#Channel]] and bit-count=79.&lt;br /&gt;
&lt;br /&gt;
This calls an interface funcptr then returns 0.&lt;br /&gt;
&lt;br /&gt;
== EnableTxPowerBoostSetting ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
sdknso ignores errors from this. sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== IsTxPowerBoostSettingEnabled ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
sdknso sets the tmpout_bool to 1, and uses that with the cmd. The sdknso func directly returns tmpout_bool, errors from the cmd are ignored.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== EnableAfhSetting ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
sdknso ignores errors from this. sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== IsAfhSettingEnabled ==&lt;br /&gt;
sdknso sets the tmpout_bool to 1, and uses that with the cmd. The sdknso func directly returns tmpout_bool, errors from the cmd are ignored.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== InitializeBle ==&lt;br /&gt;
No input, returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== EnableBle ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== DisableBle ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== FinalizeBle ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetBleVisibility ==&lt;br /&gt;
Takes two input bools, no output.&lt;br /&gt;
&lt;br /&gt;
First bool: whether the BLE device is discoverable. Second bool: whether the BLE device is connectable.&lt;br /&gt;
&lt;br /&gt;
== SetLeConnectionParameter ==&lt;br /&gt;
Takes a [[#LeConnectionParams]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetBleConnectionParameter ==&lt;br /&gt;
Takes an input [[#Address]], a bool, a [[#BleConnectionParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== SetLeDefaultConnectionParameter ==&lt;br /&gt;
Takes a [[#LeConnectionParams]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetBleDefaultConnectionParameter ==&lt;br /&gt;
Takes a [[#BleConnectionParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== SetBleAdvertiseData ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#BleAdvertisePacketData]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetBleAdvertiseParameter ==&lt;br /&gt;
Takes an input [[#Address]], two u16s, no output.&lt;br /&gt;
&lt;br /&gt;
== StartBleScan ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== StopBleScan ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== AddBleScanFilterCondition ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#BleAdvertiseFilter]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== DeleteBleScanFilterCondition ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#BleAdvertiseFilter]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== DeleteBleScanFilter ==&lt;br /&gt;
Takes an input u8, no output.&lt;br /&gt;
&lt;br /&gt;
Originally the sdknso func used an u8 for the user-specified param, with [9.0.0+] it&#039;s a s32.&lt;br /&gt;
&lt;br /&gt;
== ClearBleScanFilters ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== EnableBleScanFilter ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattClient ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattClient ==&lt;br /&gt;
Takes an input u8, no output.&lt;br /&gt;
&lt;br /&gt;
== UnregisterAllGattClients ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== ConnectGattServer ==&lt;br /&gt;
Takes an input u8, an [[#Address]], a bool, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== CancelConnectGattServer ==&lt;br /&gt;
Takes an input u8, an [[#Address]], a bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== DisconnectGattServer ==&lt;br /&gt;
Takes an input u32, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== GetGattAttribute ==&lt;br /&gt;
Takes an [[#Address]] and an u32, no output.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes an input u32, no output.&lt;br /&gt;
&lt;br /&gt;
== GetGattService ==&lt;br /&gt;
Takes an input u32 and a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== ConfigureAttMtu ==&lt;br /&gt;
Takes an input u16 and u32, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattServer ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattServer ==&lt;br /&gt;
Takes an input u8, no output.&lt;br /&gt;
&lt;br /&gt;
== ConnectGattClient ==&lt;br /&gt;
Takes an input u8, an [[#Address]], a bool, no output.&lt;br /&gt;
&lt;br /&gt;
== LeServerDisconnect ==&lt;br /&gt;
Takes an input u8, an [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
== DisconnectGattClient ==&lt;br /&gt;
Takes an input u8, no output.&lt;br /&gt;
&lt;br /&gt;
== AddGattService ==&lt;br /&gt;
Takes an input u8, an u8, a bool, a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
Originally sdknso used an user-specified u8 for the second u8, with [9.0.0+] that func param is now a s32.&lt;br /&gt;
&lt;br /&gt;
== EnableGattService ==&lt;br /&gt;
Takes an input u8, a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== AddGattCharacteristic ==&lt;br /&gt;
Takes an input u8, an u8, an u16, a [[#GattAttributeUuid]], a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== AddGattDescriptor ==&lt;br /&gt;
Takes an input u8, an u16, a [[#GattAttributeUuid]], a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetBleManagedEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer, returns an output [[#BleEventType]].&lt;br /&gt;
&lt;br /&gt;
This copies 0x400-bytes from state to the output buffer, and copies the [[#BleEventType]] from state to output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== GetGattFirstCharacteristic ==&lt;br /&gt;
Takes an input bool, an u32, a [[#GattId]], a [[#GattAttributeUuid]], returns an output u8 Property and [[#GattId|CharacteristicId]].&lt;br /&gt;
&lt;br /&gt;
== GetGattNextCharacteristic ==&lt;br /&gt;
Takes an input bool, an u32, a [[#GattId]], a [[#GattId]], a [[#GattAttributeUuid]], returns an output u8 Property and [[#GattId|CharacteristicId]].&lt;br /&gt;
&lt;br /&gt;
== GetGattFirstDescriptor ==&lt;br /&gt;
Takes an input bool, an u32, a [[#GattId]], a [[#GattId]], a [[#GattAttributeUuid]], returns an output [[#GattId|DescriptorId]].&lt;br /&gt;
&lt;br /&gt;
== GetGattNextDescriptor ==&lt;br /&gt;
Takes an input bool, an u32, a [[#GattId]], a [[#GattId]], a [[#GattId]], a [[#GattAttributeUuid]], returns an output [[#GattId|DescriptorId]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattManagedDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattManagedDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== RegisterGattHidDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattHidDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== ReadGattCharacteristic ==&lt;br /&gt;
Takes an input bool PrimaryService, an u8, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]] and [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== ReadGattDescriptor ==&lt;br /&gt;
Takes an input bool PrimaryService, an u8, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
== WriteGattCharacteristic ==&lt;br /&gt;
Takes a type-0x9 input buffer, a bool PrimaryService, an u8, a bool, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
The buffer size must be &amp;lt;=0x258.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]] and [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== WriteGattDescriptor ==&lt;br /&gt;
Takes a type-0x9 input buffer, a bool PrimaryService, an u8, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
The buffer size must be &amp;lt;=0x258.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]] and [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattNotification ==&lt;br /&gt;
Takes an input bool, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]] and [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattNotification ==&lt;br /&gt;
Takes an input bool, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
== GetLeHidEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer, returns an output [[#BleEventType]].&lt;br /&gt;
&lt;br /&gt;
This copies 0x400-bytes from state to the output buffer, and copies the [[#BleEventType]] from state to output. This also resets the state which was used for the outbuf-copy. Once finished, this signals an event.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
See [[#LeEventInfo]] for the output buffer.&lt;br /&gt;
&lt;br /&gt;
== RegisterBleHidEvent ==&lt;br /&gt;
No input, returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
== SetBleScanParameter ==&lt;br /&gt;
Takes two input u16s, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== MoveToSecondaryPiconet ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
The response will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8D0).&lt;br /&gt;
&lt;br /&gt;
== IsBluetoothEnabled ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioEvent ==&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
This just gets a previously-initialized Event from global state, [[#IsManufacturingMode]] is used to select which Event to use.&lt;br /&gt;
&lt;br /&gt;
== GetAudioEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer, returns an output [[#AudioEventType]].&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as the other [12.0.0+] Get*EventInfo cmds, however in this case the output type is set to value 0 when no event is available.&lt;br /&gt;
&lt;br /&gt;
See [[#AudioEventInfo]].&lt;br /&gt;
&lt;br /&gt;
== OpenAudioConnection ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This goes through state and eventually uses BSA to open an AV connection. The input struct has the RC flag set to true. sec_mask is set to require authentication and encryption.&lt;br /&gt;
&lt;br /&gt;
== CloseAudioConnection ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This goes through state and eventually uses BSA to close an AV connection.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes an input [[#Address]], returns an output u32 audio_handle.&lt;br /&gt;
&lt;br /&gt;
== CloseAudioOut ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], no output.&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioOutStateChangedEvent ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
== StartAudioOut ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], a [[#PcmParameter]], a nn::TimeSpan latency, returns an output nn::TimeSpan latency and u64.&lt;br /&gt;
&lt;br /&gt;
This eventually uses BSA to start an AV stream. The codec is &amp;quot;Raw PCM&amp;quot;. Synchronous feeding mode is used.&lt;br /&gt;
&lt;br /&gt;
== StopAudioOut ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], no output.&lt;br /&gt;
&lt;br /&gt;
This eventually uses BSA to stop an AV stream. The pause flag is set to false.&lt;br /&gt;
&lt;br /&gt;
== GetAudioOutState ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output [[#AudioOutState]].&lt;br /&gt;
&lt;br /&gt;
== GetAudioOutFeedingCodec ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output [[#AudioCodec]].&lt;br /&gt;
&lt;br /&gt;
== GetAudioOutFeedingParameter ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output [[#PcmParameter]].&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioOutBufferAvailableEvent ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
This gets an Event which was previously initialized.&lt;br /&gt;
&lt;br /&gt;
== SendAudioData ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], a type-0x9 input buffer, returns an output u64 transferred_size.&lt;br /&gt;
&lt;br /&gt;
This eventually uses BSA to send the specified buffer to the required UIPC channel. If transferred_size doesn&#039;t match the buffer size, error 0x177A71 is returned. transferred_size is always either 0 (error occured) or the buffer size.&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioControlInputStateChangedEvent ==&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
This gets an Event which was previously initialized.&lt;br /&gt;
&lt;br /&gt;
== GetAudioControlInputState ==&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#AudioControlButtonState]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
A maximum of 0xF entries can be returned.&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioConnectionStateChangedEvent ==&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
This gets an Event which was previously initialized.&lt;br /&gt;
&lt;br /&gt;
== GetConnectedAudioDevice ==&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#Address]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
A maximum of 0x8 entries can be returned.&lt;br /&gt;
&lt;br /&gt;
== IsManufacturingMode ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
sdknso will Abort if this fails, the bool is returned instead of a Result. sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This calls the same two funcs as various other cmds etc. This writes the bool returned by the second func to output, then returns 0. The second func loads the bool from [[System_Settings|system-setting]] &amp;quot;bluetooth_debug!skip_boot&amp;quot;. The first func is the same as the second one, except it writes the bool into global state. [12.0.0+] These two funcs now additionally load [[System_Settings|system-setting]] &amp;quot;bluetooth_config!skip_boot&amp;quot;, which is ORRed with the first setting, then that&#039;s used for storing in state / returning the value.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== EmulateBluetoothCrash ==&lt;br /&gt;
Takes an input [[#FatalReason]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso masks the FatalReason with an u16-mask before passing it to the cmd. sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This writes data into a CircularBuffer (seperate from sharedmem) with type=0x29, where the data is an u16 determined using the input [[#FatalReason]]. This is only done if a state field is value 0x3, after calling the func for this the field is set to value 0. The thread handling that sent message then converts the u16 back into a [[#FatalReason]] for writing into [[#EventInfo]].&lt;br /&gt;
&lt;br /&gt;
== GetBleChannelMap ==&lt;br /&gt;
Takes a type-0x16 output buffer containing a [[#ChannelMapList]].&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes two type-0xA output buffers, returns an output s32. The first buffer contains an array of [[#Address]], the second buffer contains an array of BitFlagSet with [[#LeChannel]] and bit-count=40.&lt;br /&gt;
&lt;br /&gt;
= bt =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::IBluetoothUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This has max_sessions 30. IPC handling is done by the main-thread.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#LeClientReadCharacteristic]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#LeClientReadDescriptor]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#LeClientWriteCharacteristic]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LeClientWriteDescriptor]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#LeClientRegisterNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#LeClientDeregisterNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#SetLeResponse]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#LeSendIndication]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetLeEventInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#RegisterBleEvent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LeClientReadCharacteristic ==&lt;br /&gt;
Takes a PID, a bool, an u8, an u32, a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#ReadGattCharacteristic]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientReadDescriptor ==&lt;br /&gt;
Takes a PID, a bool, an u8, an u32, a [[#GattId]], a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#ReadGattDescriptor]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientWriteCharacteristic ==&lt;br /&gt;
Takes a PID, a type-0x9 input buffer, a bool, an u8, a bool, an u32, a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#WriteGattCharacteristic]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientWriteDescriptor ==&lt;br /&gt;
Takes a PID, a type-0x9 input buffer, a bool, an u8, an u32, a [[#GattId]], a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#WriteGattDescriptor]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientRegisterNotification ==&lt;br /&gt;
Takes a PID, an input bool, an u32, a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#RegisterGattNotification]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientDeregisterNotification ==&lt;br /&gt;
Takes a PID, an input bool, an u32, a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#UnregisterGattNotification]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== SetLeResponse ==&lt;br /&gt;
Takes a PID, a type-0x9 input buffer, an u8, a [[#GattAttributeUuid]], a [[#GattAttributeUuid]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
The AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
The buffer size must be &amp;lt;=0x258.&lt;br /&gt;
&lt;br /&gt;
== LeSendIndication ==&lt;br /&gt;
Takes a PID, a type-0x9 input buffer, an u8, a bool, a [[#GattAttributeUuid]], a [[#GattAttributeUuid]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
The AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
The buffer size used internally is clamped to max size 0x258.&lt;br /&gt;
&lt;br /&gt;
== GetLeEventInfo ==&lt;br /&gt;
Takes a PID, a type-0xA output buffer, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output [[#BleEventType]].&lt;br /&gt;
&lt;br /&gt;
This is identical to [[#GetLeHidEventInfo]] except different state is used. The AppletResourceUserId is unused. See [[#LeEventInfo]] for the output buffer.&lt;br /&gt;
&lt;br /&gt;
== RegisterBleEvent ==&lt;br /&gt;
Takes a PID, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This is identical to [[#RegisterBleHidEvent]] except different Event state is used. The AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
= BluetoothPropertyType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::BluetoothPropertyType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The sysmodule will Abort if the input type is unavailable / not recognized.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
!  Buffer contents&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Name || String, max length 0xF8 excluding NUL-terminator.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Address || [[#Address]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Only available with [[#SetAdapterProperty]]. Unknown, [[#Address]]. The default is the same as type2, with the last two bytes inverted.&lt;br /&gt;
This uses a BSA extension (message 0x8CE), the message handler which is used here uses HCI vendor command 0xFD98 with param_len=0x7: u8 param+0 = {whether the [[#Address]] is non-zero}, +1 6-bytes = {[[#Address]] with byte-order swapped}.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || 3-bytes, Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || 1-byte, FeatureSet. The default is value 0x68.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AdapterPropertyType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::hal::AdapterPropertyType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The sysmodule will Abort if the input type is unavailable / not recognized.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
!  Data contents&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Address || [[#Address]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Name || String, max length 0xF8 excluding NUL-terminator.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || 3-bytes, Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Only available with [[#SetAdapterProperty]]. Same as [[#BluetoothPropertyType]] type3.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TransportType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::TransportType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= BluetoothSspVariant =&lt;br /&gt;
This is u8 enum &amp;quot;nn::bluetooth::BluetoothSspVariant&amp;quot;. [12.0.0+] This is u32 enum &amp;quot;nn::bluetooth::hal::BluetoothSspVariant&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= EventType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::EventType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-11.0.1] 0 || || The funcptr which writes the data into state for this event is not called (only checked on [10.0.0]).&lt;br /&gt;
|-&lt;br /&gt;
| 0 ([1.0.0-11.0.1] 3) || || New device found during Inquiry.&lt;br /&gt;
|-&lt;br /&gt;
| 1 ([1.0.0-11.0.1] 4) || || Inquiry status changed.&lt;br /&gt;
|-&lt;br /&gt;
| 2 ([1.0.0-11.0.1] 5) || || Triggered by BSA_SEC_PIN_REQ_EVT: PIN code request for pairing.&lt;br /&gt;
|-&lt;br /&gt;
| 3 ([1.0.0-11.0.1] 6) || || Triggered by BSA_SEC_SP_CFM_REQ_EVT/BSA_SEC_SP_KEY_NOTIF_EVT: SSP confirm request / SSP passkey notification.&lt;br /&gt;
|-&lt;br /&gt;
| 4 ([1.0.0-11.0.1] 7) || || Connection&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || [12.0.0+] [[#SetTsi|Tsi]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || [12.0.0+] [[#EnableBurstMode|BurstMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || || [12.0.0+] [[#SetZeroRetransmission]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || || [12.0.0+] [[#GetPendingConnections]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || || [12.0.0+] [[#MoveToSecondaryPiconet]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 ([1.0.0-11.0.1] 13) || || BluetoothCrash. Triggered by [[#EmulateBluetoothCrash]] and BSA_MGT_DISCONNECT_EVT.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ConnectionEventType =&lt;br /&gt;
This is the event value in [[#EventInfo]] when [[#EventType]] is type4 ([1.0.0-11.0.1] type7).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || [1.0.0-11.0.1] Connection status.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || [1.0.0-11.0.1] Triggered by BSA_SEC_SP_CFM_REQ_EVT: SSP confirm request.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || [12.0.0+] Triggered by BSA_SEC_RESUMED_EVT: ACL Link is now Resumed.&lt;br /&gt;
|-&lt;br /&gt;
| 3 ([1.0.0-11.0.1] 2) || || Triggered by BSA_SEC_SUSPENDED_EVT: ACL Link is now Suspended.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BluetoothHhReportType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::BluetoothHhReportType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bit0-1 directly control the HID bluetooth transaction report-type value. Bit2-3: these directly control the Parameter Reserved field for SetReport, for GetReport these control the Parameter Reserved and Size bits.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Other&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Input&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Output&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Feature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HidEventType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::HidEventType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Connection. Only used with [[#GetHidEventInfo]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 ([1.0.0-11.0.1] 4) || || DATA report on the Interrupt channel.&lt;br /&gt;
|-&lt;br /&gt;
| 2 ([1.0.0-11.0.1] 8) || || Response to SET_REPORT.&lt;br /&gt;
|-&lt;br /&gt;
| 3 ([1.0.0-11.0.1] 9) || || Response to GET_REPORT.&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-11.0.1] 7 || || Response for extensions. Only used with [[#GetHidEventInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BleEventType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::BleEventType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= FatalReason =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::FatalReason&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This determines the u16 data to write into the CircularBuffer. [[#EmulateBluetoothCrash]] handles values outside of 1-2 the same as value 3.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Only for [[#EventInfo]]: invalid.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || u16 data = 0x850. Can only be triggered by [[#EmulateBluetoothCrash]], not triggered by the sysmodule otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u16 data = 0x851. HCI command timeout.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || u16 data = 0x852. HCI event HCI_Hardware_Error occurred.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Only for [[#EventInfo]]: triggered after enabling bluetooth, when a global state field is value 4 or 2.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [12.0.0+] Only for [[#EventInfo]]: triggered when bluetooth errors occur in a certain range, with various Audio interface vfuncs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AdapterProperty =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::AdapterProperty&amp;quot; ([12.0.0+] &amp;quot;nn::bluetooth::hal::AdapterProperty&amp;quot;). This is a 0x103-byte ([12.0.0+] 0x102-byte) struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Same as the data for [[#BluetoothPropertyType]] type2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x3 || Same as the data for [[#BluetoothPropertyType]] type5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0xF9 || Same as the data for [[#BluetoothPropertyType]] type1 (last byte is not initialized).&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || Set to hard-coded value 0x68 (same as the data for [[#BluetoothPropertyType]] type6).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#AdapterPropertyType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Data size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || {Above size} || Data, as specified by the type.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AdapterPropertySet =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::AdapterPropertySet&amp;quot;. This is a 0x102-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Same as the data for [[#AdapterPropertyType]] type0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x3 || Same as the data for [[#AdapterPropertyType]] type2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0xF9 || Same as the data for [[#AdapterPropertyType]] type1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Address =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::Address&amp;quot;. This is a 0x6-byte struct with 1-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= EventInfo =&lt;br /&gt;
This is the output buffer for [[#GetEventInfo]]. The data stored here depends on the [[#EventType]].&lt;br /&gt;
&lt;br /&gt;
[[#EventType|Type0]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type0]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x3 || Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x6 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type1]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Status: 0 = stopped, 1 = started.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || services value from [[#StartInquiry]] when starting, otherwise this is value 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] [[#EventType|Type3]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF9 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x10 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10F || 0x3 || Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 0x112 || 0x4 || Set to fixed value u32 0x1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x116 || 0xFA || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x210 || 0x5C || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x26C || 0xF9 || Device name, NUL-terminated string. Same as name above, except starting at index 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x365 || 0x4 || s32 RSSI&lt;br /&gt;
|-&lt;br /&gt;
| 0x369 || 0x4 || Two bytes which are the same as name[11-12].&lt;br /&gt;
|-&lt;br /&gt;
| 0x36D || 0x10 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] [[#EventType|Type4]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Status: 0 = stopped, 1 = started.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#EventType|Type2]] ([1.0.0-11.0.1] type5):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x3 || Class of Device.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] [[#EventType|Type6]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x3 || Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || 0 = SSP confirm request, 3 = SSP passkey notification.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || 0x4 || s32 Passkey, only set when the above field is value 3.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type3]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x3 || Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || bool flag for Just Works. With SSP passkey notification this is always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || s32 Passkey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] [[#EventType|Type7]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Status, always 0 except with [[#ConnectionEventType|event0]]: 2 = ACL Link is now Resumed (BSA_SEC_RESUMED_EVT), 9 = connection failed (pairing/authentication failed, or opening the hid connection failed).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || [[#ConnectionEventType]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type4]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#ConnectionEventType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0xFE || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type5]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Status flag: 1 = success, 0 = failure.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Tsi value, when the above indicates success.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type6]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Status flag: 1 = success, 0 = failure.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Input bool value from [[#EnableBurstMode]], when the above indicates success.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type7]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Status flag: 1 = success, 0 = failure.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Bool flag, when the above indicates success.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type8]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Status flag: 0 = failure, 1 = success.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Count value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type9]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Status flag: 1 = success, 0 = failure.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#EventType|Type10]] ([1.0.0-11.0.1] type13):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || [[#FatalReason]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HidEventInfo =&lt;br /&gt;
This is the output buffer for [[#GetHidEventInfo]] / events in sharedmem. The data stored here depends on the [[#HidEventType]].&lt;br /&gt;
&lt;br /&gt;
[[#HidEventType|Type0]], for [[#GetHidEventInfo]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Status:&lt;br /&gt;
[1.0.0-11.0.1] 0 = hid connection opened, 2 = hid connection closed, 8 = failed to open hid connection.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] 0 = hid connection closed, 1 = hid connection opened, 2 = failed to open hid connection.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BluetoothPinCode =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BluetoothPinCode&amp;quot;. This is a 0x10-byte struct with 1-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= PinCode =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::PinCode&amp;quot;. This is a 0x11-byte struct with 1-byte alignment.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xF || PinCode&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || PinCode length, must be 0x1-0xF otherwise the sysmodule will Abort.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ServiceFlag =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::ServiceFlag&amp;quot;. This is the same as the BSA service-mask.&lt;br /&gt;
&lt;br /&gt;
= HidData =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::HidData&amp;quot;. This is a 0x282-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Size of the following data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x280 || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HidReport =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::HidReport&amp;quot;. This is a 0x2BE-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Size of the following data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2BC || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PlrStatistics =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::PlrStatistics&amp;quot;. This is a 0x84-byte struct.&lt;br /&gt;
&lt;br /&gt;
= PlrList =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::PlrList&amp;quot;. This is a 0xA4-byte struct.&lt;br /&gt;
&lt;br /&gt;
= PacketLostRate =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::PacketLostRate&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= ChannelMapList =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::ChannelMapList&amp;quot;. This is a 0x88-byte struct.&lt;br /&gt;
&lt;br /&gt;
= Channel =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::Channel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= LeChannel =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::LeChannel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= LeConnectionParams =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::LeConnectionParams&amp;quot;. This is a 0x14-byte struct with 2-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= BleConnectionParameter =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleConnectionParameter&amp;quot;. This is a 0xC-byte struct with 2-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= BleAdvertisePacketData =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleAdvertisePacketData&amp;quot; ([5.0.0-8.1.1] &amp;quot;nn::bluetooth::LeAdvertiseData&amp;quot;). This is a 0xCC-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x1 || Size of the data at +0x6.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1F || &lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x1 || Total array entries for the below array, can be 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || count*0x14 || Array entries, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || 0x1 || Size of the data at +0xA8.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA6 || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || 0x1F || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC7 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC9 || 0x3 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Array entry:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x12 || Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BleAdvertiseFilter =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleAdvertiseFilter&amp;quot;. This is a 0x3E-byte struct.&lt;br /&gt;
&lt;br /&gt;
= BleAdvertisePacketParameter =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleAdvertisePacketParameter&amp;quot;. This is a 8-byte struct with 1-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= BleScanResult =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleScanResult&amp;quot;. This is a 0x148-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x6 || [[#Address]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x139 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || 0x4 || s32&lt;br /&gt;
|-&lt;br /&gt;
| 0x144 || 0x4 || s32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BleConnectionInfo =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleConnectionInfo&amp;quot;. This is a 0xC-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || ConnectionHandle, 0xFFFFFFFF ([5.0.0-5.0.2] 0xFFFF) is invalid.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x6 || [[#Address]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GattAttributeUuid =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::GattAttributeUuid&amp;quot;. This is a 0x14-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || UUID size, must be 0x2, 0x4, or 0x10.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x10 || UUID with the above size.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GattId =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::GattId&amp;quot;. This is a 0x18-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || InstanceId&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x14 || [[#GattAttributeUuid]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LeEventInfo =&lt;br /&gt;
This is a 0x400-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 || [[#GattAttributeUuid]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x14 || [[#GattAttributeUuid]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x14 || [[#GattAttributeUuid]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x2 || Size of the below data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || {above size} || Data.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BleClientGattOperationInfo =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleClientGattOperationInfo&amp;quot;. This is converted from [[#LeEventInfo]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Converted from [[#LeEventInfo]]+0x0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Same as [[#LeEventInfo]]+0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || Same as [[#LeEventInfo]]+0x8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 || Same as [[#LeEventInfo]]+0xC.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x14 || Same as [[#LeEventInfo]]+0x20.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x14 || Same as [[#LeEventInfo]]+0x34.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || Same as [[#LeEventInfo]]+0x48.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || {above size} || Same as [[#LeEventInfo]]+0x4A.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioEventType =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::AudioEventType&amp;quot;. This is an u32 enum.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Connection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioEventInfo =&lt;br /&gt;
This is the output buffer for [[#GetAudioEventInfo]]. The data stored here depends on the [[#AudioEventType]].&lt;br /&gt;
&lt;br /&gt;
[[#AudioEventType|Type1]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Status: 0 = AV connection closed, 1 = AV connection opened, 2 = failed to open AV connection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PcmParameter =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::system::PcmParameter&amp;quot;. This is a 0xC-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
The sysmodule will Abort if any of these fields are invalid.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Must be 0-3. Controls number of channels: 0 = mono, non-zero = stereo.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || s32 SampleRate. Must be one of the following: 16000, 32000, 44100, 48000.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Bits per sample. Must be 8 or 16.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutState =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::system::AudioOutState&amp;quot;. This is an u32 enum.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Stopped&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Started&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioCodec =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::system::AudioCodec&amp;quot;. This is an u32 enum.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Raw PCM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioControlButtonState =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::system::AudioControlButtonState&amp;quot;. This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
The output from &amp;lt;code&amp;gt;sudo hcitool info {BDADDR}&amp;lt;/code&amp;gt; is identical for [1.0.0-11.0.0]:&lt;br /&gt;
&lt;br /&gt;
  BD Address:  {BDADDR}&lt;br /&gt;
  OUI Company: Nintendo Co.,Ltd (98-B6-E9)&lt;br /&gt;
  Device Name: Nintendo Switch&lt;br /&gt;
  LMP Version: 4.2 (0x8) LMP Subversion: 0x2409&lt;br /&gt;
  Manufacturer: Broadcom Corporation (15)&lt;br /&gt;
  Features page 0: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87&lt;br /&gt;
    &amp;lt;3-slot packets&amp;gt; &amp;lt;5-slot packets&amp;gt; &amp;lt;encryption&amp;gt; &amp;lt;slot offset&amp;gt; &lt;br /&gt;
    &amp;lt;timing accuracy&amp;gt; &amp;lt;role switch&amp;gt; &amp;lt;sniff mode&amp;gt; &amp;lt;RSSI&amp;gt; &lt;br /&gt;
    &amp;lt;channel quality&amp;gt; &amp;lt;SCO link&amp;gt; &amp;lt;HV2 packets&amp;gt; &amp;lt;HV3 packets&amp;gt; &lt;br /&gt;
    &amp;lt;u-law log&amp;gt; &amp;lt;A-law log&amp;gt; &amp;lt;CVSD&amp;gt; &amp;lt;paging scheme&amp;gt; &amp;lt;power control&amp;gt; &lt;br /&gt;
    &amp;lt;transparent SCO&amp;gt; &amp;lt;broadcast encrypt&amp;gt; &amp;lt;EDR ACL 2 Mbps&amp;gt; &lt;br /&gt;
    &amp;lt;EDR ACL 3 Mbps&amp;gt; &amp;lt;enhanced iscan&amp;gt; &amp;lt;interlaced iscan&amp;gt; &lt;br /&gt;
    &amp;lt;interlaced pscan&amp;gt; &amp;lt;inquiry with RSSI&amp;gt; &amp;lt;extended SCO&amp;gt; &lt;br /&gt;
    &amp;lt;EV4 packets&amp;gt; &amp;lt;EV5 packets&amp;gt; &amp;lt;AFH cap. slave&amp;gt; &lt;br /&gt;
    &amp;lt;AFH class. slave&amp;gt; &amp;lt;LE support&amp;gt; &amp;lt;3-slot EDR ACL&amp;gt; &lt;br /&gt;
    &amp;lt;5-slot EDR ACL&amp;gt; &amp;lt;sniff subrating&amp;gt; &amp;lt;pause encryption&amp;gt; &lt;br /&gt;
    &amp;lt;AFH cap. master&amp;gt; &amp;lt;AFH class. master&amp;gt; &amp;lt;EDR eSCO 2 Mbps&amp;gt; &lt;br /&gt;
    &amp;lt;EDR eSCO 3 Mbps&amp;gt; &amp;lt;3-slot EDR eSCO&amp;gt; &amp;lt;extended inquiry&amp;gt; &lt;br /&gt;
    &amp;lt;LE and BR/EDR&amp;gt; &amp;lt;simple pairing&amp;gt; &amp;lt;encapsulated PDU&amp;gt; &lt;br /&gt;
    &amp;lt;err. data report&amp;gt; &amp;lt;non-flush flag&amp;gt; &amp;lt;LSTO&amp;gt; &amp;lt;inquiry TX power&amp;gt; &lt;br /&gt;
    &amp;lt;EPC&amp;gt; &amp;lt;extended features&amp;gt; &lt;br /&gt;
  Features page 1: 0x0f 0x00 0x00 0x00 0x00 0x00 0x00 0x00&lt;br /&gt;
  Features page 2: 0x7f 0x0b 0x00 0x00 0x00 0x00 0x00 0x00&lt;br /&gt;
&lt;br /&gt;
The bluetooth driver implements the bluetooth protocol over h4/uart. It interfaces with the [[Bus_services#uart|uart]] service to actually talk with the bluetooth hardware.&lt;br /&gt;
&lt;br /&gt;
The bluetooth stack is Broadcom/Cypress brcm BSA (for example, see [https://github.com/hardkernel/buildroot_linux_amlogic_brcm-bsa here]).&lt;br /&gt;
&lt;br /&gt;
Various btdrv service commands use a custom BSA extension (message-ids based at 0x8CA/2250), this is referred to as &amp;quot;robson&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The following L2CAP services are registered (dynamic channels): SDP, ATT (GATT), RFCOMM, HID (PSMs: 0x11, 0x13, 0x8001, 0x8003).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l2cu_send_peer_echo_rsp&amp;lt;/code&amp;gt; is called with p_data=NULL and data_len=0, therefore no data is returned in the L2CAP ECHO response.&lt;br /&gt;
&lt;br /&gt;
The following HID transaction types are supported (by &amp;lt;code&amp;gt;hidh_l2cif_data_ind&amp;lt;/code&amp;gt;): HANDSHAKE, CONTROL (only param VIRTUAL_CABLE_UNPLUG is supported), DATA, DATAC.&lt;br /&gt;
* DATAC is not actually supported, since the callback function (&amp;lt;code&amp;gt;bta_hh_cback&amp;lt;/code&amp;gt;) just frees the message and returns.&lt;br /&gt;
&lt;br /&gt;
== Versions ==&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;
! bsa_version_string&lt;br /&gt;
! bsa_version_info_string&lt;br /&gt;
! Config string&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_J3_Patch_20161118&lt;br /&gt;
| BCM4356A3_001.004.009.0045.0000&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_J5_RC_20161227&lt;br /&gt;
| BCM4356A3_001.004.009.0047.0049&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0-3.0.1]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_K4_RC_20170504&lt;br /&gt;
| BCM4356A3_001.004.009.0054.0056&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_L4_RC_20170815&lt;br /&gt;
| CYW4356A3_001.004.009.0057.0059&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_M2_RC_20180109&lt;br /&gt;
| CYW4356A3_001.004.009.0059.0061&lt;br /&gt;
|-&lt;br /&gt;
| [5.1.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_N1_RC_20180226&lt;br /&gt;
| CYW4356A3_001.004.009.0062.0064&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0-6.2.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_N3_RC_20180612&lt;br /&gt;
| CYW4356A3_001.004.009.0062.0064&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_O1_RC_20180829&lt;br /&gt;
| CYW4356A3_001.004.009.0076.0077&lt;br /&gt;
|-&lt;br /&gt;
| [8.0.0-9.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_P1_RC_20190121&lt;br /&gt;
| CYW4356A3_001.004.009.0076.0077&lt;br /&gt;
|-&lt;br /&gt;
| [10.0.0-11.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_R2_RC_20191119&lt;br /&gt;
| CYW4356A3_001.004.009.0092.0095&lt;br /&gt;
|-&lt;br /&gt;
| [12.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_T3_RC_20210224&lt;br /&gt;
| CYW4356A3_001.004.009.0092.0095&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;bsa_sv_tm_read_version_excback&amp;lt;/code&amp;gt; copies bsa_version_string and concats with bsa_version_info_string to generate &amp;lt;code&amp;gt;tBSA_TM_READ_VERSION.bsa_server_version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bluetooth_Driver_services&amp;diff=10888</id>
		<title>Bluetooth Driver services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bluetooth_Driver_services&amp;diff=10888"/>
		<updated>2021-04-19T00:45:03Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= btdrv =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::IBluetoothDriver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Support for &amp;quot;nn::bluetooth::*&amp;quot; was added to sdknso with 6.x.&lt;br /&gt;
&lt;br /&gt;
btdrv appears to be designed to only be used by the two sysmodules which use it, [[HID_services|hid]] and [[BTM_services|btm]]. This service uses global state, nothing service-session-specific.&lt;br /&gt;
&lt;br /&gt;
This has max_sessions 30. IPC handling is done by the main-thread.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] sdknso moved various functions/etc from &amp;quot;nn::bluetooth::&amp;quot; into &amp;quot;nn::bluetooth::hal::&amp;quot;. This includes all functions exposing btdrv. These btdrv functions now automatically initialize the service if needed, the dedicated initialization function is now a stub since calling it is no longer needed. The internal &amp;quot;nn::bluetooth::user::&amp;quot; functions implementing [[#bt]] were moved to &amp;quot;nn::bluetooth::hal::user::&amp;quot;, these are called by the the user-facing &amp;quot;nn::bluetooth::&amp;quot; functions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#InitializeBluetoothDriver]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#InitializeBluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#EnableBluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#DisableBluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#FinalizeBluetooth]] ([?-8.1.1] [[#FinalizeBluetooth|CleanupBluetooth]])&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetAdapterProperties]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetAdapterProperty]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#SetAdapterProperty]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#StartInquiry]] ([?-8.1.1] [[#StartInquiry|StartDiscovery]])&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#StopInquiry]] ([?-8.1.1] [[#StopInquiry|CancelDiscovery]])&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#CreateBond]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#RemoveBond]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CancelBond]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#RespondToPinRequest]] ([?-8.1.1] [[#RespondToPinRequest|PinReply]])&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#RespondToSspRequest]] ([?-8.1.1] [[#RespondToSspRequest|SspReply]])&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetEventInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#InitializeHid]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#OpenHidConnection]] ([?-8.1.1] [[#OpenHidConnection|HidConnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#CloseHidConnection]] ([?-8.1.1] [[#CloseHidConnection|HidDisconnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#WriteHidData]] ([?-8.1.1] [[#WriteHidData|HidSendData]])&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#WriteHidData2]] ([?-8.1.1] [[#WriteHidData2|HidSendData2]])&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#SetHidReport]] ([?-8.1.1] [[#HidSetReport]])&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetHidReport]] ([?-8.1.1] [[#GetHidReport|HidGetReport]])&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#TriggerConnection]] ([?-8.1.1] [[#HidWakeController]])&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#AddPairedDeviceInfo]] ([?-8.1.1] [[#AddPairedDeviceInfo|HidAddPairedDevice]])&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [[#GetPairedDeviceInfo]] ([?-8.1.1] [[#GetPairedDeviceInfo|HidGetPairedDevice]])&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [[#FinalizeHid]] ([?-8.1.1] [[#FinalizeHid|CleanupHid]])&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [[#GetHidEventInfo]] ([?-8.1.1] [[#GetHidEventInfo|HidGetEventInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [[#SetTsi]] ([?-8.1.1]] [[#SetTsi|ExtSetTsi]])&lt;br /&gt;
|-&lt;br /&gt;
| 29 || [[#EnableBurstMode]] ([?-8.1.1] [[#EnableBurstMode|ExtSetBurstMode]])&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [[#SetZeroRetransmission]] ([?-8.1.1] [[#SetZeroRetransmission|ExtSetZeroRetran]])&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [[#EnableMcMode]] ([?-8.1.1] [[#EnableMcMode|ExtSetMcMode]])&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [[#EnableLlrScan]] ([?-8.1.1] [[#EnableLlrScan|ExtStartLlrMode]])&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [[#DisableLlrScan]] ([?-8.1.1] [[#DisableLlrScan|ExtExitLlrMode]])&lt;br /&gt;
|-&lt;br /&gt;
| 34 || [[#EnableRadio]] ([?-8.1.1] [[#EnableRadio|ExtSetRadio]])&lt;br /&gt;
|-&lt;br /&gt;
| 35 || [[#SetVisibility]] ([?-8.1.1] [[#SetVisibility|ExtSetVisibility]])&lt;br /&gt;
|-&lt;br /&gt;
| 36 || [4.0.0+] [[#EnableTbfcScan]] ([4.0.0-8.1.1] [[#EnableTbfcScan|ExtSetTbfcScan]])&lt;br /&gt;
|-&lt;br /&gt;
| 37 ([1.0.0-3.0.2] 36) || [[#RegisterHidReportEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 38 ([1.0.0-3.0.2] 37) || [[#GetHidReportEventInfo]] ([?-8.1.1] [[#GetHidReportEventInfo|HidGetReportEventInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 39 ([1.0.0-3.0.2] 38) || [[#GetLatestPlr]]&lt;br /&gt;
|-&lt;br /&gt;
| 40 ([3.0.0-3.0.2] 39) || [3.0.0+] [[#GetPendingConnections]] ([?-8.1.1] [[#GetPendingConnections|ExtGetPendingConnections]])&lt;br /&gt;
|-&lt;br /&gt;
| 41 ([3.0.0-3.0.2] 40) || [3.0.0+] [[#GetChannelMap]]&lt;br /&gt;
|-&lt;br /&gt;
| 42 ([3.0.0-3.0.2] 41) || [3.0.0+] [[#EnableTxPowerBoostSetting]] ([?-8.1.1] [[#EnableTxPowerBoostSetting|EnableBluetoothBoostSetting]])&lt;br /&gt;
|-&lt;br /&gt;
| 43 ([3.0.0-3.0.2] 42) || [3.0.0+] [[#IsTxPowerBoostSettingEnabled]] ([?-8.1.1] [[#IsTxPowerBoostSettingEnabled|IsBluetoothBoostSettingEnabled]])&lt;br /&gt;
|-&lt;br /&gt;
| 44 ([3.0.0-3.0.2] 43) || [3.0.0+] [[#EnableAfhSetting]] ([?-8.1.1] [[#EnableAfhSetting|EnableBluetoothAfhSetting]])&lt;br /&gt;
|-&lt;br /&gt;
| 45 ([3.0.0-3.0.2] 44) || [3.0.0+] [[#IsAfhSettingEnabled]] ([?-8.1.1] [[#IsAfhSettingEnabled|IsBluetoothAfhSettingEnabled]])&lt;br /&gt;
|-&lt;br /&gt;
| 46 || [5.0.0+] [[#InitializeBle]] ([5.0.0-8.1.1] [[#InitializeBle|InitializeBluetoothLe]])&lt;br /&gt;
|-&lt;br /&gt;
| 47 || [5.0.0+] [[#EnableBle]] ([5.0.0-8.1.1] [[#EnableBle|EnableBluetoothLe]])&lt;br /&gt;
|-&lt;br /&gt;
| 48 || [5.0.0+] [[#DisableBle]] ([5.0.0-8.1.1] [[#DisableBle|DisableBluetoothLe]])&lt;br /&gt;
|-&lt;br /&gt;
| 49 || [5.0.0+] [[#FinalizeBle]] ([5.0.0-8.1.1] [[#FinalizeBle|CleanupBluetoothLe]])&lt;br /&gt;
|-&lt;br /&gt;
| 50 || [5.0.0+] [[#SetBleVisibility]] ([5.0.0-8.1.1] [[#SetBleVisibility|SetLeVisibility]])&lt;br /&gt;
|-&lt;br /&gt;
| 51 || [5.0.0+] [[#SetBleConnectionParameter]] ([5.0.0-8.1.1] [[#SetLeConnectionParameter]])&lt;br /&gt;
|-&lt;br /&gt;
| 52 || [5.0.0+] [[#SetBleDefaultConnectionParameter]] ([5.0.0-8.1.1] [[#SetLeDefaultConnectionParameter]])&lt;br /&gt;
|-&lt;br /&gt;
| 53 || [5.0.0+] [[#SetBleAdvertiseData]] ([5.0.0-8.1.1] [[#SetBleAdvertiseData|SetLeAdvertiseData]])&lt;br /&gt;
|-&lt;br /&gt;
| 54 || [5.0.0+] [[#SetBleAdvertiseParameter]] ([5.0.0-8.1.1] [[#SetBleAdvertiseParameter|SetLeAdvertiseParameter]])&lt;br /&gt;
|-&lt;br /&gt;
| 55 || [5.0.0+] [[#StartBleScan]] ([5.0.0-8.1.1] [[#StartBleScan|StartLeScan]])&lt;br /&gt;
|-&lt;br /&gt;
| 56 || [5.0.0+] [[#StopBleScan]] ([5.0.0-8.1.1] [[#StopBleScan|StopLeScan]])&lt;br /&gt;
|-&lt;br /&gt;
| 57 || [5.0.0+] [[#AddBleScanFilterCondition]] ([5.0.0-8.1.1] [[#AddBleScanFilterCondition|AddLeScanFilterCondition]])&lt;br /&gt;
|-&lt;br /&gt;
| 58 || [5.0.0+] [[#DeleteBleScanFilterCondition]] ([5.0.0-8.1.1] [[#DeleteBleScanFilterCondition|DeleteLeScanFilterCondition]])&lt;br /&gt;
|-&lt;br /&gt;
| 59 || [5.0.0+] [[#DeleteBleScanFilter]] ([5.0.0-8.1.1] [[#DeleteBleScanFilter|DeleteLeScanFilter]])&lt;br /&gt;
|-&lt;br /&gt;
| 60 || [5.0.0+] [[#ClearBleScanFilters]] ([5.0.0-8.1.1] [[#ClearBleScanFilters|ClearLeScanFilters]])&lt;br /&gt;
|-&lt;br /&gt;
| 61 || [5.0.0+] [[#EnableBleScanFilter]] ([5.0.0-8.1.1] [[#EnableBleScanFilter|EnableLeScanFilter]])&lt;br /&gt;
|-&lt;br /&gt;
| 62 || [5.0.0+] [[#RegisterGattClient]] ([5.0.0-8.1.1] [[#RegisterGattClient|RegisterLeClient]])&lt;br /&gt;
|-&lt;br /&gt;
| 63 || [5.0.0+] [[#UnregisterGattClient]] ([5.0.0-8.1.1] [[#UnregisterGattClient|UnregisterLeClient]])&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [5.0.0+] [[#UnregisterAllGattClients]] ([5.0.0-8.1.1] [[#UnregisterAllGattClients|UnregisterLeClientAll]])&lt;br /&gt;
|-&lt;br /&gt;
| 65 || [5.0.0+] [[#ConnectGattServer]] ([5.0.0-8.1.1] [[#ConnectGattServer|LeClientConnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 66 || [5.1.0+] [[#CancelConnectGattServer]] ([5.1.0-8.1.1] [[#CancelConnectGattServer|LeClientCancelConnection]])&lt;br /&gt;
|-&lt;br /&gt;
| 67 ([5.0.0-5.0.2] 66) || [5.0.0+] [[#DisconnectGattServer]] ([?-8.1.1] [[#DisconnectGattServer|LeClientCancelConnection]])&lt;br /&gt;
|-&lt;br /&gt;
| 68 ([5.0.0-5.0.2] 67) || [5.0.0+] [[#GetGattAttribute]] ([5.0.0-8.1.1] [[#GetGattAttribute|LeClientGetAttributes]])&lt;br /&gt;
|-&lt;br /&gt;
| 69 ([5.0.0-5.0.2] 68) || [5.0.0+] [[#GetGattService]] ([5.0.0-8.1.1] [[#GetGattService|LeClientDiscoverService]])&lt;br /&gt;
|-&lt;br /&gt;
| 70 ([5.0.0-5.0.2] 69) || [5.0.0+] [[#ConfigureAttMtu]] ([5.0.0-8.1.1] [[#ConfigureAttMtu|LeClientConfigureMtu]])&lt;br /&gt;
|-&lt;br /&gt;
| 71 ([5.0.0-5.0.2] 70) || [5.0.0+] [[#RegisterGattServer]] ([5.0.0-8.1.1] [[#RegisterGattServer|RegisterLeServer]])&lt;br /&gt;
|-&lt;br /&gt;
| 72 ([5.0.0-5.0.2] 71) || [5.0.0+] [[#UnregisterGattServer]] ([5.0.0-8.1.1] [[#UnregisterGattServer|UnregisterLeServer]])&lt;br /&gt;
|-&lt;br /&gt;
| 73 ([5.0.0-5.0.2] 72) || [5.0.0+] [[#ConnectGattClient]] ([5.0.0-8.1.1] [[#ConnectGattClient|LeServerConnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 74 ([5.0.0-5.0.2] 73) || [5.0.0+] [[#DisconnectGattClient]] ([5.0.0-8.1.1] [[#LeServerDisconnect]])&lt;br /&gt;
|-&lt;br /&gt;
| 75 || [5.0.0+] [[#AddGattService]] ([5.0.0-8.1.1] [[#AddGattService|CreateLeService]])&lt;br /&gt;
|-&lt;br /&gt;
| 76 ([5.0.0-5.0.2] 74) || [5.0.0+] [[#EnableGattService]] ([5.0.0-8.1.1] [[#EnableGattService|StartLeService]])&lt;br /&gt;
|-&lt;br /&gt;
| 77 || [5.0.0+] [[#AddGattCharacteristic]] ([5.0.0-8.1.1] [[#AddGattCharacteristic|AddLeCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 78 ([5.0.0-5.0.2] 76) || [5.0.0+] [[#AddGattDescriptor]] ([5.0.0-8.1.1] [[#AddGattDescriptor|AddLeDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 79 ([5.0.0-5.0.2] 78) || [5.0.0+] [[#GetBleManagedEventInfo]] ([5.0.0-8.1.1] [[#GetBleManagedEventInfo|GetLeCoreEventInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 80 ([5.0.0-5.0.2] 79) || [5.0.0+] [[#GetGattFirstCharacteristic]] ([5.0.0-8.1.1] [[#GetGattFirstCharacteristic|LeGetFirstCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 81 ([5.0.0-5.0.2] 80) || [5.0.0+] [[#GetGattNextCharacteristic]] ([5.0.0-8.1.1] [[#GetGattNextCharacteristic|LeGetNextCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 82 ([5.0.0-5.0.2] 81) || [5.0.0+] [[#GetGattFirstDescriptor]] ([5.0.0-8.1.1] [[#GetGattFirstDescriptor|LeGetFirstDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 83 ([5.0.0-5.0.2] 82) || [5.0.0+] [[#GetGattNextDescriptor]] ([5.0.0-8.1.1] [[#GetGattNextDescriptor|LeGetNextDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 84 || [5.0.0+] [[#RegisterGattManagedDataPath]] ([5.0.0-8.1.1] [[#RegisterGattManagedDataPath|RegisterLeCoreDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 85 || [5.0.0+] [[#UnregisterGattManagedDataPath]] ([5.0.0-8.1.1] [[#UnregisterGattManagedDataPath|UnregisterLeCoreDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 86 || [5.0.0+] [[#RegisterGattHidDataPath]] ([5.0.0-8.1.1] [[#RegisterGattHidDataPath|RegisterLeHidDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 87 || [5.0.0+] [[#UnregisterGattHidDataPath]] ([5.0.0-8.1.1] [[#UnregisterGattHidDataPath|UnregisterLeHidDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 88 || [5.0.0+] [[#RegisterGattDataPath]] ([5.0.0-8.1.1] [[#RegisterGattDataPath|RegisterLeDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 89 ([5.0.0-5.0.2] 83) || [5.0.0+] [[#UnregisterGattDataPath]] ([5.0.0-8.1.1] [[#UnregisterGattDataPath|UnregisterLeDataPath]])&lt;br /&gt;
|-&lt;br /&gt;
| 90 ([5.0.0-5.0.2] 89) || [5.0.0+] [[#ReadGattCharacteristic]] ([5.0.0-8.1.1] [[#ReadGattCharacteristic|LeClientReadCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 91 ([5.0.0-5.0.2] 90) || [5.0.0+] [[#ReadGattDescriptor]] ([5.0.0-8.1.1] [[#ReadGattDescriptor|LeClientReadDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 92 ([5.0.0-5.0.2] 91) || [5.0.0+] [[#WriteGattCharacteristic]] ([5.0.0-8.1.1] [[#WriteGattCharacteristic|LeClientWriteCharacteristic]])&lt;br /&gt;
|-&lt;br /&gt;
| 93 ([5.0.0-5.0.2] 92) || [5.0.0+] [[#WriteGattDescriptor]] ([5.0.0-8.1.1] [[#WriteGattDescriptor|LeClientWriteDescriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 94 || [5.0.0+] [[#RegisterGattNotification]] ([5.0.0-8.1.1] [[#RegisterGattNotification|LeClientRegisterNotification]])&lt;br /&gt;
|-&lt;br /&gt;
| 95 ([5.0.0-5.0.2] 93) || [5.0.0+] [[#UnregisterGattNotification]] ([5.0.0-8.1.1] [[#UnregisterGattNotification|LeClientDeregisterNotification]])&lt;br /&gt;
|-&lt;br /&gt;
| 96 ([5.0.0-5.0.2] 95) || [5.0.0+] [[#GetLeHidEventInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 97 ([5.0.0-5.0.2] 96) || [5.0.0+] [[#RegisterBleHidEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 98 || [5.1.0+] [[#SetBleScanParameter]] ([5.1.0-8.1.1] [[#SetBleScanParameter|SetLeScanParameter]])&lt;br /&gt;
|-&lt;br /&gt;
| 99 || [10.0.0+] [[#MoveToSecondaryPiconet]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [12.0.0+] [[#IsBluetoothEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 128 || [12.0.0+] [[#AcquireAudioEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 129 || [12.0.0+] [[#GetAudioEventInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 130 || [12.0.0+] [[#OpenAudioConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 131 || [12.0.0+] [[#CloseAudioConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 132 || [12.0.0+] [[#OpenAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 133 || [12.0.0+] [[#CloseAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 134 || [12.0.0+] [[#AcquireAudioOutStateChangedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 135 || [12.0.0+] [[#StartAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 136 || [12.0.0+] [[#StopAudioOut]]&lt;br /&gt;
|-&lt;br /&gt;
| 137 || [12.0.0+] [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 138 || [12.0.0+] [[#GetAudioOutFeedingCodec]]&lt;br /&gt;
|-&lt;br /&gt;
| 139 || [12.0.0+] [[#GetAudioOutFeedingParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 140 || [12.0.0+] [[#AcquireAudioOutBufferAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 141 || [12.0.0+] [[#SendAudioData]]&lt;br /&gt;
|-&lt;br /&gt;
| 142 || [12.0.0+] [[#AcquireAudioControlInputStateChangedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 143 || [12.0.0+] [[#GetAudioControlInputState]]&lt;br /&gt;
|-&lt;br /&gt;
| 144 || [12.0.0+] [[#AcquireAudioConnectionStateChangedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 145 || [12.0.0+] [[#GetConnectedAudioDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 256 || [5.0.0+] [[#IsManufacturingMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 257 || [7.0.0+] [[#EmulateBluetoothCrash]]&lt;br /&gt;
|-&lt;br /&gt;
| 258 || [9.0.0+] [[#GetBleChannelMap]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cmds 46-83 were added with [4.0.0+].&lt;br /&gt;
&lt;br /&gt;
Various cmds were moved/etc starting with [[#InitializeBle]] with [5.0.0+].&lt;br /&gt;
&lt;br /&gt;
== InitializeBluetoothDriver ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
[1.0.0-10.2.0] This is the first cmd used during service init.&lt;br /&gt;
&lt;br /&gt;
This just returns 0.&lt;br /&gt;
&lt;br /&gt;
== InitializeBluetooth ==&lt;br /&gt;
No input, returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]], this should not be used by other processes.&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] This first initializes the funcptr table interfaces to the defaults (same as [[#DisableBluetooth]]). [[Settings_services#GetConfigurationId1|GetConfigurationId1]] is used, an error is thrown if the output string is empty, or if it matches &amp;quot;SDEV_00_01_00&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If the flag for [[#IsManufacturingMode]] is 0, or if this cmd was already used where that flag was 1, an interface funcptr is called. This is passed a ptr to a table of funcptrs. The ret is converted to a Result and returned if needed. [12.0.0+] A normal func is called instead, with no params/ret. This cmd always returns 0.&lt;br /&gt;
&lt;br /&gt;
The above called func does the following:&lt;br /&gt;
* [1.0.0-11.0.1] A func is called, which copies the input funcptr table into global state. These are used for writing events into [[#EventInfo]].&lt;br /&gt;
* A func is called 5 times with input param = [1-5]. This initializes the specified nn::bluetooth::CircularBuffer (sharedmem and internal). [12.0.0+] This functionality is now inlined.&lt;br /&gt;
* A func is called for creating the &amp;quot;nn.bluetooth.HidMessageHandler&amp;quot; thread. [12.0.0+] This functionality is now inlined.&lt;br /&gt;
&lt;br /&gt;
Lastly, the Event is ([1.0.0-11.0.1] created and) returned (which global state the Event is stored in depends on whether the code-path which calls the above funcptr was used).&lt;br /&gt;
&lt;br /&gt;
== EnableBluetooth ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] This first calls an interface funcptr, on failure 0xCA71 is returned.&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] A global fixed [[#Address]] is copied to stack, this stack data is then overwritten with the output from [[Settings_services|GetBluetoothBdAddress]]. If GetBluetoothBdAddress fails, this will Abort. Then the same funcptr used by [[#SetAdapterProperty]] is called with this stack data, with [[#BluetoothPropertyType|type2]]. A converted error is returned if needed.&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] The last two bytes of the stack [[#Address]] are inverted (byteval = ~byteval), then the above funcptr is called with this for [[#BluetoothPropertyType|type3]]. Error conversion is handled if needed, then this returns 0.&lt;br /&gt;
&lt;br /&gt;
The first funcptr called above does the following ([12.0.0+] this code is now inlined):&lt;br /&gt;
* Calls a GPIO func with param=0, [[SVC|sleeps]] for 10000000 nanoseconds, then calls the GPIO func again with param=1.&lt;br /&gt;
* [12.0.0+] Calls a func to update an interface object ptr to use the enabled-object. A vfunc for various interface objects are called, with Result 0xCA71 being returned if the ret is non-zero (failure after the first interface object will trigger an Abort).&lt;br /&gt;
* [12.0.0+] [[Settings_services|GetBluetoothBdAddress]] is used, on failure this will Abort. Then the same vfunc used by [[#SetAdapterProperty]] is called with the output from GetBluetoothBdAddress, with [[#AdapterPropertyType|type0]]. This will Abort on failure.&lt;br /&gt;
* [12.0.0+] The last two bytes of the stack [[#Address]] are inverted (byteval = ~byteval), then the above vfunc is called with this for [[#AdapterPropertyType|type3]]. This will Abort on failure, otherwise 0 is returned.&lt;br /&gt;
* [12.0.0+] Various code described below was moved into the above vfunc(s), etc.&lt;br /&gt;
* Calls a func for initializing the paired-devices table (empty).&lt;br /&gt;
* Calls a modified version of BSA_Boot, which handles BSA server initialization.&lt;br /&gt;
* Calls a func which uses &amp;lt;code&amp;gt;nn::os::InitializeEvent&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;nn::os::InitializeMutex&amp;lt;/code&amp;gt; with global state.&lt;br /&gt;
* Calls a func which handles BSA client initialization. This also sends a message to the &amp;quot;nn.bluetooth.HidMessageHandler&amp;quot; thread for enabling bluetooth (which updates the interface funcptr tables, etc).&lt;br /&gt;
* Calls a func which enables HID-Host with BSA, and opens the UIPC channel where the registered funcptr is used for writing HID DATA [[#GetHidReportEventInfo|reports]] which were received.&lt;br /&gt;
* Calls a func which initializes global state and uses BSA for initializing Security.&lt;br /&gt;
* If the output flag from [[Settings_services#GetBluetoothBoostEnableFlag|GetBluetoothBoostEnableFlag]] is set, a func is called.&lt;br /&gt;
* If the output flag from [[Settings_services#GetBluetoothAfhEnableFlag|GetBluetoothAfhEnableFlag]] is not set, a func is called.&lt;br /&gt;
&lt;br /&gt;
The GPIO func does the following:&lt;br /&gt;
* Initializes the [[Bus_services|gpio]] service.&lt;br /&gt;
* Uses [[Bus_services#OpenSession|OpenSession]] with value 0x03 (BtRst).&lt;br /&gt;
* Uses SetDirection with value 0x1.&lt;br /&gt;
* Uses SetValue with the param which was passed to this func.&lt;br /&gt;
* Does cleanup for the session object and exits the service.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] The Enable vfunc called above for Audio does the following:&lt;br /&gt;
* Calls a func which does the following:&lt;br /&gt;
** Uses BSA to enable AV. Besides the callback, the only field in the passed struct which is set is &amp;lt;code&amp;gt;features&amp;lt;/code&amp;gt;. This is set for &amp;quot;remote control target&amp;quot;.&lt;br /&gt;
** Error handling + state setup is done.&lt;br /&gt;
** Uses BSA to register AV twice, with the default input struct.&lt;br /&gt;
** Error handling + state setup is done.&lt;br /&gt;
* If an error occurred in a certain range, a [[#FatalReason|fatal]] is triggered and 0 is returned.&lt;br /&gt;
* Otherwise when successful, state init is done then 0 is returned.&lt;br /&gt;
&lt;br /&gt;
== DisableBluetooth ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] This calls an interface funcptr. On success, the funcs for updating the interface funcptr tables are called (same as [[#InitializeBluetooth]]). Then the converted ret is returned as needed.&lt;br /&gt;
&lt;br /&gt;
* [12.0.0+] Vfuncs for various interface objects are called, with failure triggering an Abort in some cases.&lt;br /&gt;
* [12.0.0+] Calls funcs to update interfaces object ptrs to use the disabled-object.&lt;br /&gt;
* [12.0.0+] Calls the same GPIO func as [[#EnableBluetooth]] with param=0, then 0 is returned.&lt;br /&gt;
* [12.0.0+] Various code described below was moved into the above vfunc(s), etc.&lt;br /&gt;
&lt;br /&gt;
When bluetooth is already disabled, that funcptr just returns 0. Otherwise when it&#039;s already enabled, it does the following:&lt;br /&gt;
* Calls a func which closes the HID-Host UIPC channel, and uses BSA for disabling HID-Host.&lt;br /&gt;
* Calls a func which uses &amp;lt;code&amp;gt;nn::os::FinalizeMutex&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;nn::os::FinalizeEvent&amp;lt;/code&amp;gt; with global state.&lt;br /&gt;
* Uses &amp;lt;code&amp;gt;nn::os::InitializeEvent&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;nn::os::InitializeTimerEvent&amp;lt;/code&amp;gt;, with a ptr for the former Event being written into global state.&lt;br /&gt;
* Uses BTA_DisableBluetooth.&lt;br /&gt;
* Uses &amp;lt;code&amp;gt;nn::os::StartOneShotTimerEvent&amp;lt;/code&amp;gt; with a value of 5 seconds.&lt;br /&gt;
* Waits for either of the above to trigger using &amp;lt;code&amp;gt;nn::os::TryWaitEvent&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;nn::os::TryWaitTimerEvent&amp;lt;/code&amp;gt;, with each loop iteration [[SVC|sleeping]] for 5000000 nanoseconds.&lt;br /&gt;
** The Event is signaled when disabling bluetooth finishes.&lt;br /&gt;
* Cleanup for the above Event/TimerEvent is done.&lt;br /&gt;
* Calls a func which handles BSA client cleanup.&lt;br /&gt;
* Calls a func which does the following:&lt;br /&gt;
** Calls a func which tells the &amp;quot;nn.bluetooth.TimerThread&amp;quot; to exit, then destroys that thread (GKI timer thread).&lt;br /&gt;
** Calls a func which just returns.&lt;br /&gt;
** Calls a func which handles GKI cleanup (including destroying the task threads).&lt;br /&gt;
** Calls a func which waits for the UIPC threads to exit + destroys the threads and handles cleanup.&lt;br /&gt;
* Calls the same GPIO func as [[#EnableBluetooth]] with param=0.&lt;br /&gt;
* Sends a message to the &amp;quot;nn.bluetooth.HidMessageHandler&amp;quot; thread for disabling bluetooth (which updates the interface funcptr tables, etc).&lt;br /&gt;
&lt;br /&gt;
== FinalizeBluetooth ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Not used by [[BTM_services|btm]], other processes should not use this.&lt;br /&gt;
&lt;br /&gt;
Calls an interface funcptr, the ret is ignored. The Event setup by [[#InitializeBluetooth]] is closed. Lastly, the same funcs used by [[#InitializeBluetooth]] are called for initializing the interface funcptr tables to the defaults, then 0 is returned.&lt;br /&gt;
&lt;br /&gt;
The above interface funcptr does the following (regardless of whether bluetooth is disabled/enabled):&lt;br /&gt;
* Calls a func which: uses &amp;lt;code&amp;gt;nn::os::SignalLightEvent&amp;lt;/code&amp;gt; to tell the &amp;quot;nn.bluetooth.HidMessageHandler&amp;quot; thread to exit, then waits for the thread to exit and destroys the thread.&lt;br /&gt;
* Calls the same func as [[#InitializeBluetooth]] for setting event funcptrs in global state, except in this case the content of the input table is all NULL.&lt;br /&gt;
* Calls a func 5 times with param=[1-5]. This is the cleanup version of the nn::bluetooth::CircularBuffer setup func used by [[#InitializeBluetooth]].&lt;br /&gt;
&lt;br /&gt;
== GetAdapterProperties ==&lt;br /&gt;
Takes a type-0x1A output buffer containing an [[#AdapterProperty]].&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes a type-0x1A output buffer containing an [[#AdapterPropertySet]].&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== GetAdapterProperty ==&lt;br /&gt;
Takes an input [[#BluetoothPropertyType]] and a type-0xA output buffer.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes an input [[#AdapterPropertyType]] and a type-0x1A output buffer containing an [[#AdapterProperty]].&lt;br /&gt;
&lt;br /&gt;
== SetAdapterProperty ==&lt;br /&gt;
Takes an input [[#BluetoothPropertyType]] and a type-0x9 input buffer.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes a type-0x19 input buffer containing an [[#AdapterProperty]], no output.&lt;br /&gt;
&lt;br /&gt;
== StartInquiry ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes an input BitFlagSet 32bit [[#ServiceFlag|services]] and s64 nanoseconds_duration, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This starts Inquiry, the output data will be available via [[#GetEventInfo]]. Inquiry will automatically stop in 10.24 seconds ([12.0.0+] calculated from the input duration instead).&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] When services is -1 the original defaults from pre-12.0.0 are used (besides duration). Otherwise, services is written into the parameter struct (masked with the all-allowed-BSA-services value), and the EventInfo for discovered devices are triggered when inquiry finishes instead of immediately.&lt;br /&gt;
&lt;br /&gt;
== StopInquiry ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This stops Inquiry which was started by [[#StartInquiry]], if it&#039;s still active.&lt;br /&gt;
&lt;br /&gt;
== CreateBond ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x19 input buffer containing a [[#TransportType]], no output.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now only takes an [[#Address]] and a [[#TransportType]] without a buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The [[#TransportType]] is unused.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RemoveBond ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== CancelBond ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RespondToPinRequest ==&lt;br /&gt;
Takes an input [[#Address]], a bool, an u8, a [[#BluetoothPinCode]], no output.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes an input [[#Address]], a [[#PinCode]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified s32 for the u8.&lt;br /&gt;
&lt;br /&gt;
The sysmodule impl for the funcptr used with this cmd only uses the [[#Address]] - this and hard-coded PIN &amp;quot;0000&amp;quot; are written into the parameter struct (and a size field for the PIN).&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] The input [[#PinCode]] is now actually used and passed to BSA, instead of hard-coding the PIN.&lt;br /&gt;
&lt;br /&gt;
== RespondToSspRequest ==&lt;br /&gt;
Takes an input [[#Address]], a [[#BluetoothSspVariant]], a bool, an u32, no output.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes an input [[#Address]], a bool, a [[#BluetoothSspVariant]], an u32, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The sysmodule impl for the funcptr/vfunc used with this cmd only uses the [[#Address]] and bool - the parameter struct size is only 0x7-bytes. The bool indicates whether the request is accepted.&lt;br /&gt;
&lt;br /&gt;
== GetEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer and returns an output [[#EventType]].&lt;br /&gt;
&lt;br /&gt;
This copies 0x400-bytes from state to the output buffer, copies the [[#EventType]] from state to output, and signals an event.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Mutex locking is now used, with the code prior to the event-signal. If a size field in state is 0, writing the output [[#EventType]]/buffer is skipped. Otherwise, the size field is reset to 0, the [[#EventType]] from state is copied to output, and the original size field is used to memcpy to the output buffer from state.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
See [[#EventInfo]].&lt;br /&gt;
&lt;br /&gt;
== InitializeHid ==&lt;br /&gt;
Takes an input u16, returns an output Event with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
Originally sdknso used an user-specified value for the u16, however with [9.0.0+] it uses hard-coded value 0x1 instead.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]], this should not be used by other processes.&lt;br /&gt;
&lt;br /&gt;
== OpenHidConnection ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This just returns 0.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== CloseHidConnection ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== HidSendData ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x19 input buffer containing a [[#HidData]], no output.&lt;br /&gt;
&lt;br /&gt;
== WriteHidData ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x19 input buffer containing a [[#HidReport]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
This sends a HID DATA transaction packet with report-type Output.&lt;br /&gt;
&lt;br /&gt;
== WriteHidData2 ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x9 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
This is internally the same as [[#WriteHidData]], with the input buffer being directly passed to the funcptr instead of a tmp copy of the input [[#HidReport]].&lt;br /&gt;
&lt;br /&gt;
== HidSetReport ==&lt;br /&gt;
Takes an input [[#Address]], a [[#BluetoothHhReportType]], a type-0x19 input buffer containing a [[#HidData]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetHidReport ==&lt;br /&gt;
Takes an input [[#Address]], a [[#BluetoothHhReportType]], a type-0x19 input buffer containing a [[#HidReport]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
This sends a HID SET_REPORT transaction packet.&lt;br /&gt;
&lt;br /&gt;
== GetHidReport ==&lt;br /&gt;
Takes an input [[#Address]], an u8 report_id, a [[#BluetoothHhReportType]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
This sends a HID GET_REPORT transaction packet. The report_id is sent in the packet for the Report Id, when non-zero.&lt;br /&gt;
&lt;br /&gt;
== HidWakeController ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
== TriggerConnection ==&lt;br /&gt;
Takes an input [[#Address]] and an u16, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This calls an interface funcptr, then returns the converted ret as needed.&lt;br /&gt;
&lt;br /&gt;
The funcptr does the following:&lt;br /&gt;
* Calls a func, returning the ret on failure. This uses a BSA extension (message 0x8CE), with the input u16 being used with this.&lt;br /&gt;
* Then another func is called, with the input [[#Address]], with the ret from here being returned. This throws an error if the device isn&#039;t paired. This opens a HID-Host connection to the specified [[#Address]]. The passed sec_mask is 0x12 (Inbound/outbound authentication required), and brcm_mask is set for enabling TBFC Page.&lt;br /&gt;
&lt;br /&gt;
The handler for the above message with the used bit flag does the following:&lt;br /&gt;
* Uses HCI vendor command 0xFCC2 with param_len=0xE. Param data: u32 +0 = 0x14E18, u16 +4 = 0x20, u8 +6 = 0x2, u16 +7 = {input u16 message param value} (written via u8 writes), u32 +9 = 0x30200, u8 +0xD = 0.&lt;br /&gt;
&lt;br /&gt;
== AddPairedDeviceInfo ==&lt;br /&gt;
Takes a type-0x19 input buffer containing [[Settings_services#BluetoothDevicesSettings|BluetoothDevicesSettings]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] If [[Settings_services#BluetoothDevicesSettings|TrustedServices]] is 0, value 0x100000 is used. When bit20 is set, HID is initialized for this device, otherwise when bitmask 0xC0000 is set (&amp;lt;code&amp;gt;if((TrustedServices &amp;amp; 0xC0000) != 0)&amp;lt;/code&amp;gt;) [[#OpenAudioConnection|audio]] is initialized for this device.&lt;br /&gt;
&lt;br /&gt;
== GetPairedDeviceInfo ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x1A output buffer containing [[Settings_services#BluetoothDevicesSettings|BluetoothDevicesSettings]].&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== FinalizeHid ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Not used by [[BTM_services|btm]], other processes should not use this.&lt;br /&gt;
&lt;br /&gt;
== GetHidEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer, returns an output [[#HidEventType]].&lt;br /&gt;
&lt;br /&gt;
This copies 0x480-bytes from state to the output buffer. [[#HidEventType]] is set to: stateval!=0 ? 7 : 0. Once finished, this signals an event.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Mutex locking is now used, with the code prior to the event-signal. If a size field in state is 0, writing the output [[#HidEventType]]/buffer is skipped. Otherwise, the size field is reset to 0, the [[#HidEventType]] from state is copied to output, and the original size field is used to memcpy to the output buffer from state.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
See [[#HidEventInfo]].&lt;br /&gt;
&lt;br /&gt;
== SetTsi ==&lt;br /&gt;
Takes an input [[#Address]] and an u8 Tsi, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The response will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension.&lt;br /&gt;
&lt;br /&gt;
Tsi: non-value-0xFF to Set (BSA message 0x8CA), value 0xFF to Exit (BSA message 0x8CB).&lt;br /&gt;
&lt;br /&gt;
Set: this uses command HCI_Set_MWS_Signaling with data determined using the input u8. Then this uses Broadcom HCI vendor command 0xFD95 with param_len=0x2: param +0x0 = 0x1, +0x1 = {Tsi value}. When this vendor command is successful, it then uses command HCI_Sniff_Mode with data selected using the Tsi value as the array-index. If the remote device doesn&#039;t support this (status indicating error with Mode Change Event for the response to HCI_Sniff_Mode), an error will be thrown via the [[#GetHidEventInfo|EventInfo]]. That error can be resolved if the remote device uses the HCI_Sniff_Mode command prior to the Switch doing so.&lt;br /&gt;
&lt;br /&gt;
Exit: this uses command HCI_Exit_Sniff_Mode.&lt;br /&gt;
&lt;br /&gt;
== EnableBurstMode ==&lt;br /&gt;
Takes an input [[#Address]] and a bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The response will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension.&lt;br /&gt;
&lt;br /&gt;
bool flag: true = Set (BSA message 0x8CC), false = Exit (BSA message 0x8CD).&lt;br /&gt;
&lt;br /&gt;
== SetZeroRetransmission ==&lt;br /&gt;
Takes an input [[#Address]] and a type-0x9 input buffer containing an array of u8s, no output.&lt;br /&gt;
&lt;br /&gt;
The entry-count is clamped to a maximum of 5, the count can be 0. This buffer contains ReportIds.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The response will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CF).&lt;br /&gt;
&lt;br /&gt;
== EnableMcMode ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CE).&lt;br /&gt;
&lt;br /&gt;
== EnableLlrScan ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CE).&lt;br /&gt;
&lt;br /&gt;
== DisableLlrScan ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CE).&lt;br /&gt;
&lt;br /&gt;
== EnableRadio ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8CE).&lt;br /&gt;
&lt;br /&gt;
The message is handled by using HCI vendor command 0xFC34 with param_len=0x1: param +0 = {input bool}.&lt;br /&gt;
&lt;br /&gt;
== SetVisibility ==&lt;br /&gt;
Takes two input bools, no output.&lt;br /&gt;
&lt;br /&gt;
The first bool controls Inquiry Scan, whether the device can be discovered during Inquiry. The second bool controls Page Scan, whether the device accepts connections.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== EnableTbfcScan ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterHidReportEvent ==&lt;br /&gt;
No input, returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This gets the Event handle for a previously created Event.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
The Event is signaled when data is available with [[#GetHidReportEventInfo]].&lt;br /&gt;
&lt;br /&gt;
== GetHidReportEventInfo ==&lt;br /&gt;
No input, takes a type-0xA output buffer and returns a [[#HidEventType]].&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] No longer takes a buffer or returns output, now returns an output sharedmem handle. sdknso maps this with size=0x3000 and permissions=RW-.&lt;br /&gt;
&lt;br /&gt;
Originally this was used in a dedicated sdknso func, with [7.0.0+] this is now used at the start of the sdknso impl for [[#RegisterHidReportEvent]] if the above sharedmem was not mapped yet.&lt;br /&gt;
&lt;br /&gt;
The [7.0.0+] GetHidReportEventInfo sdknso func loads data using the above sharedmem.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
== GetLatestPlr ==&lt;br /&gt;
Takes a type-0x16 output buffer containing a [[#PlrList]] ([1.0.0-8.1.1] [[#PlrStatistics]]).&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes a type-0xA output buffer containing an array of [[#PacketLostRate]], returns an output s32.&lt;br /&gt;
&lt;br /&gt;
This calls an interface funcptr then returns 0.&lt;br /&gt;
&lt;br /&gt;
The interface funcptr impl will Abort if the output struct ptr is NULL. Then data is copied from global state to output, doing double-&amp;gt;u32 conversion as needed.&lt;br /&gt;
&lt;br /&gt;
== GetPendingConnections ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
The output data will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
== GetChannelMap ==&lt;br /&gt;
Takes a type-0x16 output buffer containing a [[#ChannelMapList]].&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes two type-0xA output buffers, returns an output s32. The first buffer contains an array of [[#Address]], the second buffer contains an array of BitFlagSet with [[#Channel]] and bit-count=79.&lt;br /&gt;
&lt;br /&gt;
This calls an interface funcptr then returns 0.&lt;br /&gt;
&lt;br /&gt;
== EnableTxPowerBoostSetting ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
sdknso ignores errors from this. sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== IsTxPowerBoostSettingEnabled ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
sdknso sets the tmpout_bool to 1, and uses that with the cmd. The sdknso func directly returns tmpout_bool, errors from the cmd are ignored.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== EnableAfhSetting ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
sdknso ignores errors from this. sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== IsAfhSettingEnabled ==&lt;br /&gt;
sdknso sets the tmpout_bool to 1, and uses that with the cmd. The sdknso func directly returns tmpout_bool, errors from the cmd are ignored.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== InitializeBle ==&lt;br /&gt;
No input, returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== EnableBle ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== DisableBle ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== FinalizeBle ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetBleVisibility ==&lt;br /&gt;
Takes two input bools, no output.&lt;br /&gt;
&lt;br /&gt;
First bool: whether the BLE device is discoverable. Second bool: whether the BLE device is connectable.&lt;br /&gt;
&lt;br /&gt;
== SetLeConnectionParameter ==&lt;br /&gt;
Takes a [[#LeConnectionParams]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetBleConnectionParameter ==&lt;br /&gt;
Takes an input [[#Address]], a bool, a [[#BleConnectionParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== SetLeDefaultConnectionParameter ==&lt;br /&gt;
Takes a [[#LeConnectionParams]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetBleDefaultConnectionParameter ==&lt;br /&gt;
Takes a [[#BleConnectionParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== SetBleAdvertiseData ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#BleAdvertisePacketData]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetBleAdvertiseParameter ==&lt;br /&gt;
Takes an input [[#Address]], two u16s, no output.&lt;br /&gt;
&lt;br /&gt;
== StartBleScan ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== StopBleScan ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== AddBleScanFilterCondition ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#BleAdvertiseFilter]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== DeleteBleScanFilterCondition ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#BleAdvertiseFilter]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== DeleteBleScanFilter ==&lt;br /&gt;
Takes an input u8, no output.&lt;br /&gt;
&lt;br /&gt;
Originally the sdknso func used an u8 for the user-specified param, with [9.0.0+] it&#039;s a s32.&lt;br /&gt;
&lt;br /&gt;
== ClearBleScanFilters ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== EnableBleScanFilter ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattClient ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattClient ==&lt;br /&gt;
Takes an input u8, no output.&lt;br /&gt;
&lt;br /&gt;
== UnregisterAllGattClients ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== ConnectGattServer ==&lt;br /&gt;
Takes an input u8, an [[#Address]], a bool, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== CancelConnectGattServer ==&lt;br /&gt;
Takes an input u8, an [[#Address]], a bool, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== DisconnectGattServer ==&lt;br /&gt;
Takes an input u32, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== GetGattAttribute ==&lt;br /&gt;
Takes an [[#Address]] and an u32, no output.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes an input u32, no output.&lt;br /&gt;
&lt;br /&gt;
== GetGattService ==&lt;br /&gt;
Takes an input u32 and a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== ConfigureAttMtu ==&lt;br /&gt;
Takes an input u16 and u32, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattServer ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattServer ==&lt;br /&gt;
Takes an input u8, no output.&lt;br /&gt;
&lt;br /&gt;
== ConnectGattClient ==&lt;br /&gt;
Takes an input u8, an [[#Address]], a bool, no output.&lt;br /&gt;
&lt;br /&gt;
== LeServerDisconnect ==&lt;br /&gt;
Takes an input u8, an [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
== DisconnectGattClient ==&lt;br /&gt;
Takes an input u8, no output.&lt;br /&gt;
&lt;br /&gt;
== AddGattService ==&lt;br /&gt;
Takes an input u8, an u8, a bool, a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
Originally sdknso used an user-specified u8 for the second u8, with [9.0.0+] that func param is now a s32.&lt;br /&gt;
&lt;br /&gt;
== EnableGattService ==&lt;br /&gt;
Takes an input u8, a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== AddGattCharacteristic ==&lt;br /&gt;
Takes an input u8, an u8, an u16, a [[#GattAttributeUuid]], a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== AddGattDescriptor ==&lt;br /&gt;
Takes an input u8, an u16, a [[#GattAttributeUuid]], a [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetBleManagedEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer, returns an output [[#BleEventType]].&lt;br /&gt;
&lt;br /&gt;
This copies 0x400-bytes from state to the output buffer, and copies the [[#BleEventType]] from state to output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== GetGattFirstCharacteristic ==&lt;br /&gt;
Takes an input bool, an u32, a [[#GattId]], a [[#GattAttributeUuid]], returns an output u8 Property and [[#GattId|CharacteristicId]].&lt;br /&gt;
&lt;br /&gt;
== GetGattNextCharacteristic ==&lt;br /&gt;
Takes an input bool, an u32, a [[#GattId]], a [[#GattId]], a [[#GattAttributeUuid]], returns an output u8 Property and [[#GattId|CharacteristicId]].&lt;br /&gt;
&lt;br /&gt;
== GetGattFirstDescriptor ==&lt;br /&gt;
Takes an input bool, an u32, a [[#GattId]], a [[#GattId]], a [[#GattAttributeUuid]], returns an output [[#GattId|DescriptorId]].&lt;br /&gt;
&lt;br /&gt;
== GetGattNextDescriptor ==&lt;br /&gt;
Takes an input bool, an u32, a [[#GattId]], a [[#GattId]], a [[#GattId]], a [[#GattAttributeUuid]], returns an output [[#GattId|DescriptorId]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattManagedDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattManagedDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
== RegisterGattHidDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattHidDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattDataPath ==&lt;br /&gt;
Takes an input [[#GattAttributeUuid]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== ReadGattCharacteristic ==&lt;br /&gt;
Takes an input bool PrimaryService, an u8, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]] and [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== ReadGattDescriptor ==&lt;br /&gt;
Takes an input bool PrimaryService, an u8, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
== WriteGattCharacteristic ==&lt;br /&gt;
Takes a type-0x9 input buffer, a bool PrimaryService, an u8, a bool, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
The buffer size must be &amp;lt;=0x258.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]] and [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== WriteGattDescriptor ==&lt;br /&gt;
Takes a type-0x9 input buffer, a bool PrimaryService, an u8, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
The buffer size must be &amp;lt;=0x258.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]] and [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== RegisterGattNotification ==&lt;br /&gt;
Takes an input bool, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]] and [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterGattNotification ==&lt;br /&gt;
Takes an input bool, an u32 ConnectionHandle, a [[#GattId]], a [[#GattId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
== GetLeHidEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer, returns an output [[#BleEventType]].&lt;br /&gt;
&lt;br /&gt;
This copies 0x400-bytes from state to the output buffer, and copies the [[#BleEventType]] from state to output. This also resets the state which was used for the outbuf-copy. Once finished, this signals an event.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
See [[#LeEventInfo]] for the output buffer.&lt;br /&gt;
&lt;br /&gt;
== RegisterBleHidEvent ==&lt;br /&gt;
No input, returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This is used by [[HID_services|hid]].&lt;br /&gt;
&lt;br /&gt;
== SetBleScanParameter ==&lt;br /&gt;
Takes two input u16s, no output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== MoveToSecondaryPiconet ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
The response will be available via [[#GetHidEventInfo]] ([12.0.0+] [[#GetEventInfo]]).&lt;br /&gt;
&lt;br /&gt;
This uses a BSA extension (message 0x8D0).&lt;br /&gt;
&lt;br /&gt;
== IsBluetoothEnabled ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioEvent ==&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
This just gets a previously-initialized Event from global state, [[#IsManufacturingMode]] is used to select which Event to use.&lt;br /&gt;
&lt;br /&gt;
== GetAudioEventInfo ==&lt;br /&gt;
Takes a type-0xA output buffer, returns an output [[#AudioEventType]].&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as the other [12.0.0+] Get*EventInfo cmds, however in this case the output type is set to value 0 when no event is available.&lt;br /&gt;
&lt;br /&gt;
See [[#AudioEventInfo]].&lt;br /&gt;
&lt;br /&gt;
== OpenAudioConnection ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This goes through state and eventually uses BSA to open an AV connection. The input struct has the RC flag set to true. sec_mask is set to require authentication and encryption.&lt;br /&gt;
&lt;br /&gt;
== CloseAudioConnection ==&lt;br /&gt;
Takes an input [[#Address]], no output.&lt;br /&gt;
&lt;br /&gt;
This goes through state and eventually uses BSA to close an AV connection.&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes an input [[#Address]], returns an output u32 audio_handle.&lt;br /&gt;
&lt;br /&gt;
== CloseAudioOut ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], no output.&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioOutStateChangedEvent ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
== StartAudioOut ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], a [[#PcmParameter]], a nn::TimeSpan latency, returns an output nn::TimeSpan latency and u64.&lt;br /&gt;
&lt;br /&gt;
This eventually uses BSA to start an AV stream. The codec is &amp;quot;Raw PCM&amp;quot;. Synchronous feeding mode is used.&lt;br /&gt;
&lt;br /&gt;
== StopAudioOut ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], no output.&lt;br /&gt;
&lt;br /&gt;
This eventually uses BSA to stop an AV stream. The pause flag is set to false.&lt;br /&gt;
&lt;br /&gt;
== GetAudioOutState ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output [[#AudioOutState]].&lt;br /&gt;
&lt;br /&gt;
== GetAudioOutFeedingCodec ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output [[#AudioCodec]].&lt;br /&gt;
&lt;br /&gt;
== GetAudioOutFeedingParameter ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output [[#PcmParameter]].&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioOutBufferAvailableEvent ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
This gets an Event which was previously initialized.&lt;br /&gt;
&lt;br /&gt;
== SendAudioData ==&lt;br /&gt;
Takes an input u32 [[#OpenAudioOut|audio_handle]], a type-0x9 input buffer, returns an output u64 transferred_size.&lt;br /&gt;
&lt;br /&gt;
This eventually uses BSA to send the specified buffer to the required UIPC channel. If transferred_size doesn&#039;t match the buffer size, error 0x177A71 is returned. transferred_size is always either 0 (error occured) or the buffer size.&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioControlInputStateChangedEvent ==&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
This gets an Event which was previously initialized.&lt;br /&gt;
&lt;br /&gt;
== GetAudioControlInputState ==&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#AudioControlButtonState]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
A maximum of 0xF entries can be returned.&lt;br /&gt;
&lt;br /&gt;
== AcquireAudioConnectionStateChangedEvent ==&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
This gets an Event which was previously initialized.&lt;br /&gt;
&lt;br /&gt;
== GetConnectedAudioDevice ==&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#Address]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
A maximum of 0x8 entries can be returned.&lt;br /&gt;
&lt;br /&gt;
== IsManufacturingMode ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
sdknso will Abort if this fails, the bool is returned instead of a Result. sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This calls the same two funcs as various other cmds etc. This writes the bool returned by the second func to output, then returns 0. The second func loads the bool from [[System_Settings|system-setting]] &amp;quot;bluetooth_debug!skip_boot&amp;quot;. The first func is the same as the second one, except it writes the bool into global state. [12.0.0+] These two funcs now additionally load [[System_Settings|system-setting]] &amp;quot;bluetooth_config!skip_boot&amp;quot;, which is ORRed with the first setting, then that&#039;s used for storing in state / returning the value.&lt;br /&gt;
&lt;br /&gt;
This is used by [[BTM_services|btm]].&lt;br /&gt;
&lt;br /&gt;
== EmulateBluetoothCrash ==&lt;br /&gt;
Takes an input [[#FatalReason]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso masks the FatalReason with an u16-mask before passing it to the cmd. sdknso exposes this under &amp;quot;nn::bluetooth::debug::&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This writes data into a CircularBuffer (seperate from sharedmem) with type=0x29, where the data is an u16 determined using the input [[#FatalReason]]. This is only done if a state field is value 0x3, after calling the func for this the field is set to value 0. The thread handling that sent message then converts the u16 back into a [[#FatalReason]] for writing into [[#EventInfo]].&lt;br /&gt;
&lt;br /&gt;
== GetBleChannelMap ==&lt;br /&gt;
Takes a type-0x16 output buffer containing a [[#ChannelMapList]].&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] Takes two type-0xA output buffers, returns an output s32. The first buffer contains an array of [[#Address]], the second buffer contains an array of BitFlagSet with [[#LeChannel]] and bit-count=40.&lt;br /&gt;
&lt;br /&gt;
= bt =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::IBluetoothUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This has max_sessions 30. IPC handling is done by the main-thread.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#LeClientReadCharacteristic]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#LeClientReadDescriptor]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#LeClientWriteCharacteristic]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LeClientWriteDescriptor]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#LeClientRegisterNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#LeClientDeregisterNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#SetLeResponse]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#LeSendIndication]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetLeEventInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#RegisterBleEvent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LeClientReadCharacteristic ==&lt;br /&gt;
Takes a PID, a bool, an u8, an u32, a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#ReadGattCharacteristic]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientReadDescriptor ==&lt;br /&gt;
Takes a PID, a bool, an u8, an u32, a [[#GattId]], a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#ReadGattDescriptor]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientWriteCharacteristic ==&lt;br /&gt;
Takes a PID, a type-0x9 input buffer, a bool, an u8, a bool, an u32, a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#WriteGattCharacteristic]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientWriteDescriptor ==&lt;br /&gt;
Takes a PID, a type-0x9 input buffer, a bool, an u8, an u32, a [[#GattId]], a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#WriteGattDescriptor]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientRegisterNotification ==&lt;br /&gt;
Takes a PID, an input bool, an u32, a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#RegisterGattNotification]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== LeClientDeregisterNotification ==&lt;br /&gt;
Takes a PID, an input bool, an u32, a [[#GattId]], a [[#GattId]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#UnregisterGattNotification]], the AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
== SetLeResponse ==&lt;br /&gt;
Takes a PID, a type-0x9 input buffer, an u8, a [[#GattAttributeUuid]], a [[#GattAttributeUuid]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
The AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
The buffer size must be &amp;lt;=0x258.&lt;br /&gt;
&lt;br /&gt;
== LeSendIndication ==&lt;br /&gt;
Takes a PID, a type-0x9 input buffer, an u8, a bool, a [[#GattAttributeUuid]], a [[#GattAttributeUuid]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
The AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
The buffer size used internally is clamped to max size 0x258.&lt;br /&gt;
&lt;br /&gt;
== GetLeEventInfo ==&lt;br /&gt;
Takes a PID, a type-0xA output buffer, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output [[#BleEventType]].&lt;br /&gt;
&lt;br /&gt;
This is identical to [[#GetLeHidEventInfo]] except different state is used. The AppletResourceUserId is unused. See [[#LeEventInfo]] for the output buffer.&lt;br /&gt;
&lt;br /&gt;
== RegisterBleEvent ==&lt;br /&gt;
Takes a PID, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output Event handle with EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
This is identical to [[#RegisterBleHidEvent]] except different Event state is used. The AppletResourceUserId is unused.&lt;br /&gt;
&lt;br /&gt;
= BluetoothPropertyType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::BluetoothPropertyType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The sysmodule will Abort if the input type is unavailable / not recognized.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
!  Buffer contents&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Name || String, max length 0xF8 excluding NUL-terminator.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Address || [[#Address]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Only available with [[#SetAdapterProperty]]. Unknown, [[#Address]]. The default is the same as type2, with the last two bytes inverted.&lt;br /&gt;
This uses a BSA extension (message 0x8CE), the message handler which is used here uses HCI vendor command 0xFD98 with param_len=0x7: u8 param+0 = {whether the [[#Address]] is non-zero}, +1 6-bytes = {[[#Address]] with byte-order swapped}.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || 3-bytes, Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || 1-byte, FeatureSet. The default is value 0x68.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AdapterPropertyType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::hal::AdapterPropertyType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The sysmodule will Abort if the input type is unavailable / not recognized.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
!  Data contents&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Address || [[#Address]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Name || String, max length 0xF8 excluding NUL-terminator.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || 3-bytes, Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Only available with [[#SetAdapterProperty]]. Same as [[#BluetoothPropertyType]] type3.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TransportType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::TransportType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= BluetoothSspVariant =&lt;br /&gt;
This is u8 enum &amp;quot;nn::bluetooth::BluetoothSspVariant&amp;quot;. [12.0.0+] This is u32 enum &amp;quot;nn::bluetooth::hal::BluetoothSspVariant&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= EventType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::EventType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-11.0.1] 0 || || The funcptr which writes the data into state for this event is not called (only checked on [10.0.0]).&lt;br /&gt;
|-&lt;br /&gt;
| 0 ([1.0.0-11.0.1] 3) || || New device found during Inquiry.&lt;br /&gt;
|-&lt;br /&gt;
| 1 ([1.0.0-11.0.1] 4) || || Inquiry status changed.&lt;br /&gt;
|-&lt;br /&gt;
| 2 ([1.0.0-11.0.1] 5) || || Triggered by BSA_SEC_PIN_REQ_EVT: PIN code request for pairing.&lt;br /&gt;
|-&lt;br /&gt;
| 3 ([1.0.0-11.0.1] 6) || || Triggered by BSA_SEC_SP_CFM_REQ_EVT/BSA_SEC_SP_KEY_NOTIF_EVT: SSP confirm request / SSP passkey notification.&lt;br /&gt;
|-&lt;br /&gt;
| 4 ([1.0.0-11.0.1] 7) || || Connection&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || [12.0.0+] [[#SetTsi|Tsi]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || [12.0.0+] [[#EnableBurstMode|BurstMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || || [12.0.0+] [[#SetZeroRetransmission]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || || [12.0.0+] [[#GetPendingConnections]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || || [12.0.0+] [[#MoveToSecondaryPiconet]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 ([1.0.0-11.0.1] 13) || || BluetoothCrash. Triggered by [[#EmulateBluetoothCrash]] and BSA_MGT_DISCONNECT_EVT.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ConnectionEventType =&lt;br /&gt;
This is the event value in [[#EventInfo]] when [[#EventType]] is type4 ([1.0.0-11.0.1] type7).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || [1.0.0-11.0.1] Connection status.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || [1.0.0-11.0.1] Triggered by BSA_SEC_SP_CFM_REQ_EVT: SSP confirm request.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || [12.0.0+] Triggered by BSA_SEC_RESUMED_EVT: ACL Link is now Resumed.&lt;br /&gt;
|-&lt;br /&gt;
| 3 ([1.0.0-11.0.1] 2) || || Triggered by BSA_SEC_SUSPENDED_EVT: ACL Link is now Suspended.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BluetoothHhReportType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::BluetoothHhReportType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bit0-1 directly control the HID bluetooth transaction report-type value. Bit2-3: these directly control the Parameter Reserved field for SetReport, for GetReport these control the Parameter Reserved and Size bits.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Other&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Input&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Output&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Feature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HidEventType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::HidEventType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Connection. Only used with [[#GetHidEventInfo]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 ([1.0.0-11.0.1] 4) || || DATA report on the Interrupt channel.&lt;br /&gt;
|-&lt;br /&gt;
| 2 ([1.0.0-11.0.1] 8) || || Response to SET_REPORT.&lt;br /&gt;
|-&lt;br /&gt;
| 3 ([1.0.0-11.0.1] 9) || || Response to GET_REPORT.&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-11.0.1] 7 || || Response for extensions. Only used with [[#GetHidEventInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BleEventType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::BleEventType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= FatalReason =&lt;br /&gt;
This is u32 enum &amp;quot;nn::bluetooth::FatalReason&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This determines the u16 data to write into the CircularBuffer. [[#EmulateBluetoothCrash]] handles values outside of 1-2 the same as value 3.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Only for [[#EventInfo]]: invalid.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || u16 data = 0x850. Can only be triggered by [[#EmulateBluetoothCrash]], not triggered by the sysmodule otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u16 data = 0x851. HCI command timeout.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || u16 data = 0x852. HCI event HCI_Hardware_Error occurred.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Only for [[#EventInfo]]: triggered after enabling bluetooth, when a global state field is value 4 or 2.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [12.0.0+] Only for [[#EventInfo]]: triggered when bluetooth errors occur in a certain range, with various Audio interface vfuncs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AdapterProperty =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::AdapterProperty&amp;quot; ([12.0.0+] &amp;quot;nn::bluetooth::hal::AdapterProperty&amp;quot;). This is a 0x103-byte ([12.0.0+] 0x102-byte) struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Same as the data for [[#BluetoothPropertyType]] type2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x3 || Same as the data for [[#BluetoothPropertyType]] type5.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0xF9 || Same as the data for [[#BluetoothPropertyType]] type1 (last byte is not initialized).&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || Set to hard-coded value 0x68 (same as the data for [[#BluetoothPropertyType]] type6).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#AdapterPropertyType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Data size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || {Above size} || Data, as specified by the type.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AdapterPropertySet =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::AdapterPropertySet&amp;quot;. This is a 0x102-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Same as the data for [[#AdapterPropertyType]] type0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x3 || Same as the data for [[#AdapterPropertyType]] type2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0xF9 || Same as the data for [[#AdapterPropertyType]] type1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Address =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::Address&amp;quot;. This is a 0x6-byte struct with 1-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= EventInfo =&lt;br /&gt;
This is the output buffer for [[#GetEventInfo]]. The data stored here depends on the [[#EventType]].&lt;br /&gt;
&lt;br /&gt;
[[#EventType|Type0]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type0]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x3 || Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x6 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type1]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Status: 0 = stopped, 1 = started.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || services value from [[#StartInquiry]] when starting, otherwise this is value 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] [[#EventType|Type3]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF9 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x10 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10F || 0x3 || Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 0x112 || 0x4 || Set to fixed value u32 0x1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x116 || 0xFA || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x210 || 0x5C || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x26C || 0xF9 || Device name, NUL-terminated string. Same as name above, except starting at index 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x365 || 0x4 || s32 RSSI&lt;br /&gt;
|-&lt;br /&gt;
| 0x369 || 0x4 || Two bytes which are the same as name[11-12].&lt;br /&gt;
|-&lt;br /&gt;
| 0x36D || 0x10 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] [[#EventType|Type4]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Status: 0 = stopped, 1 = started.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#EventType|Type2]] ([1.0.0-11.0.1] type5):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x3 || Class of Device.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] [[#EventType|Type6]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x3 || Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || 0 = SSP confirm request, 3 = SSP passkey notification.&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || 0x4 || s32 Passkey, only set when the above field is value 3.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type3]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0xF9 || Device name, NUL-terminated string.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || 0x3 || Class of Device.&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || bool flag for Just Works. With SSP passkey notification this is always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || s32 Passkey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0-11.0.1] [[#EventType|Type7]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Status, always 0 except with [[#ConnectionEventType|event0]]: 2 = ACL Link is now Resumed (BSA_SEC_RESUMED_EVT), 9 = connection failed (pairing/authentication failed, or opening the hid connection failed).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || [[#ConnectionEventType]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type4]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#ConnectionEventType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0xFA || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type5]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Status flag: 1 = success, 0 = failure.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Tsi value, when the above indicates success.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type6]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Status flag: 1 = success, 0 = failure.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Input bool value from [[#EnableBurstMode]], when the above indicates success.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type7]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Status flag: 1 = success, 0 = failure.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Bool flag, when the above indicates success.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type8]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Status flag: 0 = failure, 1 = success.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Count value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] [[#EventType|Type9]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Status flag: 1 = success, 0 = failure.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[#EventType|Type10]] ([1.0.0-11.0.1] type13):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || [[#FatalReason]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HidEventInfo =&lt;br /&gt;
This is the output buffer for [[#GetHidEventInfo]] / events in sharedmem. The data stored here depends on the [[#HidEventType]].&lt;br /&gt;
&lt;br /&gt;
[[#HidEventType|Type0]], for [[#GetHidEventInfo]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Status:&lt;br /&gt;
[1.0.0-11.0.1] 0 = hid connection opened, 2 = hid connection closed, 8 = failed to open hid connection.&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] 0 = hid connection closed, 1 = hid connection opened, 2 = failed to open hid connection.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BluetoothPinCode =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BluetoothPinCode&amp;quot;. This is a 0x10-byte struct with 1-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= PinCode =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::PinCode&amp;quot;. This is a 0x11-byte struct with 1-byte alignment.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xF || PinCode&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || PinCode length, must be 0x1-0xF otherwise the sysmodule will Abort.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ServiceFlag =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::ServiceFlag&amp;quot;. This is the same as the BSA service-mask.&lt;br /&gt;
&lt;br /&gt;
= HidData =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::HidData&amp;quot;. This is a 0x282-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Size of the following data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x280 || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HidReport =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::HidReport&amp;quot;. This is a 0x2BE-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Size of the following data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2BC || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PlrStatistics =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::PlrStatistics&amp;quot;. This is a 0x84-byte struct.&lt;br /&gt;
&lt;br /&gt;
= PlrList =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::PlrList&amp;quot;. This is a 0xA4-byte struct.&lt;br /&gt;
&lt;br /&gt;
= PacketLostRate =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::PacketLostRate&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= ChannelMapList =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::ChannelMapList&amp;quot;. This is a 0x88-byte struct.&lt;br /&gt;
&lt;br /&gt;
= Channel =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::Channel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= LeChannel =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::LeChannel&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= LeConnectionParams =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::LeConnectionParams&amp;quot;. This is a 0x14-byte struct with 2-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= BleConnectionParameter =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleConnectionParameter&amp;quot;. This is a 0xC-byte struct with 2-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= BleAdvertisePacketData =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleAdvertisePacketData&amp;quot; ([5.0.0-8.1.1] &amp;quot;nn::bluetooth::LeAdvertiseData&amp;quot;). This is a 0xCC-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x1 || Size of the data at +0x6.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1F || &lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x1 || Total array entries for the below array, can be 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || count*0x14 || Array entries, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || 0x1 || Size of the data at +0xA8.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA6 || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || 0x1F || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC7 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC9 || 0x3 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Array entry:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x12 || Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BleAdvertiseFilter =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleAdvertiseFilter&amp;quot;. This is a 0x3E-byte struct.&lt;br /&gt;
&lt;br /&gt;
= BleAdvertisePacketParameter =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleAdvertisePacketParameter&amp;quot;. This is a 8-byte struct with 1-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= BleScanResult =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleScanResult&amp;quot;. This is a 0x148-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x6 || [[#Address]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x139 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || 0x4 || s32&lt;br /&gt;
|-&lt;br /&gt;
| 0x144 || 0x4 || s32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BleConnectionInfo =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleConnectionInfo&amp;quot;. This is a 0xC-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || ConnectionHandle, 0xFFFFFFFF ([5.0.0-5.0.2] 0xFFFF) is invalid.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x6 || [[#Address]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GattAttributeUuid =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::GattAttributeUuid&amp;quot;. This is a 0x14-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || UUID size, must be 0x2, 0x4, or 0x10.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x10 || UUID with the above size.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GattId =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::GattId&amp;quot;. This is a 0x18-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || InstanceId&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x14 || [[#GattAttributeUuid]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LeEventInfo =&lt;br /&gt;
This is a 0x400-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 || [[#GattAttributeUuid]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x14 || [[#GattAttributeUuid]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x14 || [[#GattAttributeUuid]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x2 || Size of the below data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || {above size} || Data.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BleClientGattOperationInfo =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::BleClientGattOperationInfo&amp;quot;. This is converted from [[#LeEventInfo]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Converted from [[#LeEventInfo]]+0x0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Same as [[#LeEventInfo]]+0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || Same as [[#LeEventInfo]]+0x8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 || Same as [[#LeEventInfo]]+0xC.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x14 || Same as [[#LeEventInfo]]+0x20.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x14 || Same as [[#LeEventInfo]]+0x34.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || Same as [[#LeEventInfo]]+0x48.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || {above size} || Same as [[#LeEventInfo]]+0x4A.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioEventType =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::hal::AudioEventType&amp;quot;. This is an u32 enum.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Connection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioEventInfo =&lt;br /&gt;
This is the output buffer for [[#GetAudioEventInfo]]. The data stored here depends on the [[#AudioEventType]].&lt;br /&gt;
&lt;br /&gt;
[[#AudioEventType|Type1]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Status: 0 = AV connection closed, 1 = AV connection opened, 2 = failed to open AV connection.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x6 || Device [[#Address|address]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PcmParameter =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::system::PcmParameter&amp;quot;. This is a 0xC-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
The sysmodule will Abort if any of these fields are invalid.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Must be 0-3. Controls number of channels: 0 = mono, non-zero = stereo.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || s32 SampleRate. Must be one of the following: 16000, 32000, 44100, 48000.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Bits per sample. Must be 8 or 16.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioOutState =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::system::AudioOutState&amp;quot;. This is an u32 enum.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Stopped&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Started&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioCodec =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::system::AudioCodec&amp;quot;. This is an u32 enum.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Raw PCM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AudioControlButtonState =&lt;br /&gt;
This is &amp;quot;nn::bluetooth::system::AudioControlButtonState&amp;quot;. This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
The output from &amp;lt;code&amp;gt;sudo hcitool info {BDADDR}&amp;lt;/code&amp;gt; is identical for [1.0.0-11.0.0]:&lt;br /&gt;
&lt;br /&gt;
  BD Address:  {BDADDR}&lt;br /&gt;
  OUI Company: Nintendo Co.,Ltd (98-B6-E9)&lt;br /&gt;
  Device Name: Nintendo Switch&lt;br /&gt;
  LMP Version: 4.2 (0x8) LMP Subversion: 0x2409&lt;br /&gt;
  Manufacturer: Broadcom Corporation (15)&lt;br /&gt;
  Features page 0: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87&lt;br /&gt;
    &amp;lt;3-slot packets&amp;gt; &amp;lt;5-slot packets&amp;gt; &amp;lt;encryption&amp;gt; &amp;lt;slot offset&amp;gt; &lt;br /&gt;
    &amp;lt;timing accuracy&amp;gt; &amp;lt;role switch&amp;gt; &amp;lt;sniff mode&amp;gt; &amp;lt;RSSI&amp;gt; &lt;br /&gt;
    &amp;lt;channel quality&amp;gt; &amp;lt;SCO link&amp;gt; &amp;lt;HV2 packets&amp;gt; &amp;lt;HV3 packets&amp;gt; &lt;br /&gt;
    &amp;lt;u-law log&amp;gt; &amp;lt;A-law log&amp;gt; &amp;lt;CVSD&amp;gt; &amp;lt;paging scheme&amp;gt; &amp;lt;power control&amp;gt; &lt;br /&gt;
    &amp;lt;transparent SCO&amp;gt; &amp;lt;broadcast encrypt&amp;gt; &amp;lt;EDR ACL 2 Mbps&amp;gt; &lt;br /&gt;
    &amp;lt;EDR ACL 3 Mbps&amp;gt; &amp;lt;enhanced iscan&amp;gt; &amp;lt;interlaced iscan&amp;gt; &lt;br /&gt;
    &amp;lt;interlaced pscan&amp;gt; &amp;lt;inquiry with RSSI&amp;gt; &amp;lt;extended SCO&amp;gt; &lt;br /&gt;
    &amp;lt;EV4 packets&amp;gt; &amp;lt;EV5 packets&amp;gt; &amp;lt;AFH cap. slave&amp;gt; &lt;br /&gt;
    &amp;lt;AFH class. slave&amp;gt; &amp;lt;LE support&amp;gt; &amp;lt;3-slot EDR ACL&amp;gt; &lt;br /&gt;
    &amp;lt;5-slot EDR ACL&amp;gt; &amp;lt;sniff subrating&amp;gt; &amp;lt;pause encryption&amp;gt; &lt;br /&gt;
    &amp;lt;AFH cap. master&amp;gt; &amp;lt;AFH class. master&amp;gt; &amp;lt;EDR eSCO 2 Mbps&amp;gt; &lt;br /&gt;
    &amp;lt;EDR eSCO 3 Mbps&amp;gt; &amp;lt;3-slot EDR eSCO&amp;gt; &amp;lt;extended inquiry&amp;gt; &lt;br /&gt;
    &amp;lt;LE and BR/EDR&amp;gt; &amp;lt;simple pairing&amp;gt; &amp;lt;encapsulated PDU&amp;gt; &lt;br /&gt;
    &amp;lt;err. data report&amp;gt; &amp;lt;non-flush flag&amp;gt; &amp;lt;LSTO&amp;gt; &amp;lt;inquiry TX power&amp;gt; &lt;br /&gt;
    &amp;lt;EPC&amp;gt; &amp;lt;extended features&amp;gt; &lt;br /&gt;
  Features page 1: 0x0f 0x00 0x00 0x00 0x00 0x00 0x00 0x00&lt;br /&gt;
  Features page 2: 0x7f 0x0b 0x00 0x00 0x00 0x00 0x00 0x00&lt;br /&gt;
&lt;br /&gt;
The bluetooth driver implements the bluetooth protocol over h4/uart. It interfaces with the [[Bus_services#uart|uart]] service to actually talk with the bluetooth hardware.&lt;br /&gt;
&lt;br /&gt;
The bluetooth stack is Broadcom/Cypress brcm BSA (for example, see [https://github.com/hardkernel/buildroot_linux_amlogic_brcm-bsa here]).&lt;br /&gt;
&lt;br /&gt;
Various btdrv service commands use a custom BSA extension (message-ids based at 0x8CA/2250), this is referred to as &amp;quot;robson&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The following L2CAP services are registered (dynamic channels): SDP, ATT (GATT), RFCOMM, HID (PSMs: 0x11, 0x13, 0x8001, 0x8003).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l2cu_send_peer_echo_rsp&amp;lt;/code&amp;gt; is called with p_data=NULL and data_len=0, therefore no data is returned in the L2CAP ECHO response.&lt;br /&gt;
&lt;br /&gt;
The following HID transaction types are supported (by &amp;lt;code&amp;gt;hidh_l2cif_data_ind&amp;lt;/code&amp;gt;): HANDSHAKE, CONTROL (only param VIRTUAL_CABLE_UNPLUG is supported), DATA, DATAC.&lt;br /&gt;
* DATAC is not actually supported, since the callback function (&amp;lt;code&amp;gt;bta_hh_cback&amp;lt;/code&amp;gt;) just frees the message and returns.&lt;br /&gt;
&lt;br /&gt;
== Versions ==&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;
! bsa_version_string&lt;br /&gt;
! bsa_version_info_string&lt;br /&gt;
! Config string&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_J3_Patch_20161118&lt;br /&gt;
| BCM4356A3_001.004.009.0045.0000&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_J5_RC_20161227&lt;br /&gt;
| BCM4356A3_001.004.009.0047.0049&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0-3.0.1]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_K4_RC_20170504&lt;br /&gt;
| BCM4356A3_001.004.009.0054.0056&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_L4_RC_20170815&lt;br /&gt;
| CYW4356A3_001.004.009.0057.0059&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_M2_RC_20180109&lt;br /&gt;
| CYW4356A3_001.004.009.0059.0061&lt;br /&gt;
|-&lt;br /&gt;
| [5.1.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_N1_RC_20180226&lt;br /&gt;
| CYW4356A3_001.004.009.0062.0064&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0-6.2.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_N3_RC_20180612&lt;br /&gt;
| CYW4356A3_001.004.009.0062.0064&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_O1_RC_20180829&lt;br /&gt;
| CYW4356A3_001.004.009.0076.0077&lt;br /&gt;
|-&lt;br /&gt;
| [8.0.0-9.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_P1_RC_20190121&lt;br /&gt;
| CYW4356A3_001.004.009.0076.0077&lt;br /&gt;
|-&lt;br /&gt;
| [10.0.0-11.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_R2_RC_20191119&lt;br /&gt;
| CYW4356A3_001.004.009.0092.0095&lt;br /&gt;
|-&lt;br /&gt;
| [12.0.0]&lt;br /&gt;
| BSA0106_01.60.00_&lt;br /&gt;
| Hayward_T3_RC_20210224&lt;br /&gt;
| CYW4356A3_001.004.009.0092.0095&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;bsa_sv_tm_read_version_excback&amp;lt;/code&amp;gt; copies bsa_version_string and concats with bsa_version_info_string to generate &amp;lt;code&amp;gt;tBSA_TM_READ_VERSION.bsa_server_version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=11.0.0&amp;diff=10441</id>
		<title>11.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=11.0.0&amp;diff=10441"/>
		<updated>2020-12-09T17:28:15Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* Web-applets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 11.0.0 system update was released on December 1, 2020 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* Nintendo Switch Online was added to the HOME Menu.&lt;br /&gt;
* 	&lt;br /&gt;
* 	Access all Nintendo Switch Online services, from getting the latest information to checking your membership status.&lt;br /&gt;
* 	*This feature is not available in some countries/regions.&lt;br /&gt;
* 	&lt;br /&gt;
* A new feature that automatically downloads backed up save data was added to the Save Data Cloud.&lt;br /&gt;
* 	&lt;br /&gt;
* 	When using software with the same Nintendo Account linked to multiple systems, save data backed up from one console will automatically be downloaded to your other system(s).&lt;br /&gt;
* 	*To use this feature, it must be enabled under System Settings &amp;gt; Data Management &amp;gt; Save Data Cloud.&lt;br /&gt;
* 	*Save data will not be downloaded automatically unless save data for that software exists on the console. The first time only, users must download the save data manually.&lt;br /&gt;
* 	*A Nintendo Switch Online membership is required to use the Save Data Cloud service.&lt;br /&gt;
* 	&lt;br /&gt;
* A new Trending feature was added to the User Page.&lt;br /&gt;
* 	&lt;br /&gt;
* 	Users can check what software their friends are playing or have started playing recently.&lt;br /&gt;
* 	Information will not be displayed for friends who have their online status set to display to no one.&lt;br /&gt;
* 	&lt;br /&gt;
* Users can now transfer screenshots and videos from Album to their smart devices.&lt;br /&gt;
* 	&lt;br /&gt;
* 	Users can wirelessly connect their smart devices to Nintendo Switch to transfer the screenshots and videos saved within their Album.&lt;br /&gt;
* 	For screenshots, users can transfer a maximum of 10 screenshots and 1 video capture at once.&lt;br /&gt;
* 	*To connect, users must use their smart device to scan the QR Code displayed on the Nintendo Switch screen.&lt;br /&gt;
* 	For more information, please refer to the Nintendo Support website.&lt;br /&gt;
* 	*“QR Code” is a registered trademark of DENSO WAVE INCORPORATED.&lt;br /&gt;
* 	&lt;br /&gt;
* 	&lt;br /&gt;
* A new Copy to a Computer via USB Connection feature was added under System Settings &amp;gt; Data Management &amp;gt; Manage Screenshots and Videos.&lt;br /&gt;
* 	&lt;br /&gt;
* 	Users can use a USB cable to connect Nintendo Switch to their computers to copy the screenshots and videos saved under Album.&lt;br /&gt;
* 	* A USB charging cable [model HAC-010] or a USB-IF certified USB cable that supports data transfer is required to connect to a computer.&lt;br /&gt;
* 	For more information, please refer to the Nintendo Support website.&lt;br /&gt;
* 	* Connection via the Nintendo Switch dock is not supported. Please connect the Nintendo Switch system directly to the computer.&lt;br /&gt;
* 	&lt;br /&gt;
* 	&lt;br /&gt;
* Users can now select what download to prioritize when there are multiple downloads in progress.&lt;br /&gt;
* 	&lt;br /&gt;
* 	When there are multiple software, update data, or downloadable content downloads in progress, users can now select which they want to download first.&lt;br /&gt;
* 	You can set this under Download Options by selecting the icon for the software you want to download first on the HOME Menu.&lt;br /&gt;
* 	&lt;br /&gt;
* 	&lt;br /&gt;
* User icons were added.&lt;br /&gt;
* 	&lt;br /&gt;
* 	12 user icons that commemorate the 35th anniversary of the Super Mario Bros. series were added.&lt;br /&gt;
* 	&lt;br /&gt;
* Users can now name preset button mappings with the Change Button Mapping feature.&lt;br /&gt;
* Brazilian Portuguese was added as a supported language.&lt;br /&gt;
* 	&lt;br /&gt;
* 	When users set their region to the Americas and their language to Português, the language used on the HOME Menu and in certain software will be displayed in Brazilian Portuguese.&lt;br /&gt;
* 	&lt;br /&gt;
* Several issues were fixed, and usability and stability were improved.&lt;br /&gt;
&lt;br /&gt;
===BootImagePackage===&lt;br /&gt;
All files in RomFS were updated.&lt;br /&gt;
&lt;br /&gt;
====Secure Monitor====&lt;br /&gt;
Secure Monitor was updated.&lt;br /&gt;
&lt;br /&gt;
* The firmware revision magic was changed from 0x1AD to 0x1CE.&lt;br /&gt;
* Support was added for an additional DRAM model.&lt;br /&gt;
&lt;br /&gt;
====Warmboot====&lt;br /&gt;
* The firmware revision magic was changed from 0x1AD to 0x1CE.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Kernel is now built with -Os instead of -O3&lt;br /&gt;
** Many functions are no longer inlined.&lt;br /&gt;
* crt0 deprivileging code now sets hypervisor EL2 registers.&lt;br /&gt;
* Logic for flushing entire data cache and invalidating entire TLB during init is now a function called by JumpFromEL2ToEL1 and DisableMmuICacheAndDCache instead of being duplicated.&lt;br /&gt;
* Initialize0 has had several things re-ordered/shuffled:&lt;br /&gt;
** InsertDevicePhysicalMemoryBlocks is now called immediately after the KernelCode region is inserted.&lt;br /&gt;
** &amp;quot;Needed device virtual space&amp;quot; is now calculated as 3 * (0x18000 + { sum of KernelAutoMap physical device regions } + GetUnknownDebugDeviceRegionSize()&lt;br /&gt;
** KernelMisc region size is now util::AlignUp(std::max(needed_device_virtual_space, 32_MB), 2_MB).&lt;br /&gt;
** Code for mapping the unknown debug address as UnknownDebug is no longer present.&lt;br /&gt;
** Slab region is now memset to zero after the linear region is mapped instead of before.&lt;br /&gt;
** Ranges are now more uniform; value in [range address / 2_MB, last_address / 2_MB] is generated and multipled by 2 MB instead of aligning down result.&lt;br /&gt;
* KMemoryRegion now has a &amp;quot;last_address&amp;quot; member replacing its &amp;quot;size&amp;quot; member.&lt;br /&gt;
** GetSize() now calculated as (last_address - address + 1)&lt;br /&gt;
* KMemoryRegionTree::Insert now takes in last address instead of size.&lt;br /&gt;
** Several callsites now verify that last_address != 0xFFFF...&lt;br /&gt;
* KMemoryRegionAllocator now uses a slabheap of count 200 instead of 1000.&lt;br /&gt;
* &amp;quot;Virtual&amp;quot; cores now supported, KThread now stores core ID/affinity for both virtual and physical.&lt;br /&gt;
* New SVC 0x37 &amp;quot;GetResourceLimitPeakValue&amp;quot;&lt;br /&gt;
** Returns the highest value that a resource limit&#039;s current has ever achieved.&lt;br /&gt;
** KResourceLimit now stores an array of peak values to enable this&lt;br /&gt;
* Two new kernel objects, KAlpha and KBeta (placeholder names, true object names are unknown and cannot be guessed without observing purpose).&lt;br /&gt;
** KAlpha has size 0x50, KBeta has size 0x88&lt;br /&gt;
** KObjectAllocators for KAlpha/KBeta receive counts 1, 6.&lt;br /&gt;
** KProcess has a list of KBeta, intrusive list node is at KBeta + 0x68.&lt;br /&gt;
* Four new SVCs, ID 0x39, 0x3A, 0x46, 0x47&lt;br /&gt;
** These are likely for interacting with KAlpha and KBeta, but on NX they are (presumably) if-def&#039;d to be &amp;quot;return svc::ResultNotImplemented()&amp;quot;&lt;br /&gt;
* KThread had all of its members reordered and its unused members deleted&lt;br /&gt;
* Most KThread waits now use KThreadWaiterListIntrusiveNode instead of KThreadQueue&lt;br /&gt;
* KConditionVariable no longer uses global threads for the call to .nfind()&lt;br /&gt;
* KConditionVariable now sets the cv_key u32 value in userspace to 1 when a condvar has waiters, and to 0 when it does not.&lt;br /&gt;
** New nnSdk code relies on this behavior.&lt;br /&gt;
* SetupStackForUserModeThreadStarter (KThreadContext::Initialize) now sets X18 to (&amp;lt;cryptographically random u64&amp;gt; | 1), this value is unique for each thread.&lt;br /&gt;
** This is used for Pointer Authentication changes in web browser.&lt;br /&gt;
* KCoreLocalRegion deleted, replaced with pointer-to-current-thread&lt;br /&gt;
** TPIDR_EL1 != X18 now, and TPIDR_EL1 now always points to the exception thread stack.&lt;br /&gt;
* KSynchronization was deleted, replaced with namespaced or static-on-ksynchronization-object functions&lt;br /&gt;
* KSynchronizationObject now contains a pointer to thread queue, instead of an inline list&lt;br /&gt;
* KInterruptEvent no longer has an InterruptEventTask member&lt;br /&gt;
* KInterruptEventTask::Reset no longer calls KInterruptManager::ClearInterrupt, instead it calls a new function which returns a result&lt;br /&gt;
* KInterruptEventTask now has a KLightLock member&lt;br /&gt;
* KHardwareTimer is now an interrupt task again&lt;br /&gt;
* KHardwareTimer now has a new member &amp;quot;maximum_time&amp;quot;, set to std::numeric_limits&amp;lt;s64&amp;gt;::value().&lt;br /&gt;
** Tasks will only be added to the task list if their time is &amp;lt;= maximum_time, this is in addition to the &amp;gt;= 1 checks previously.&lt;br /&gt;
* KIntrusiveRedBlackTreeNode now has common member functions instead of templated, size is now packed to 0x1C instead of 0x20.&lt;br /&gt;
** All Insert/Remove/etc operations are common regardless of the type the node is intrusive in.&lt;br /&gt;
* KDebugLogImpl::Initialize() now assumes uart has been configured for logging by the secure monitor, and does not perform tegra uart init sequence&lt;br /&gt;
* vsprintf, KDebugString::PutString are now fully inlined inside KVPrintf.&lt;br /&gt;
* KObjectContainer::Insert now returns void instead of Result&lt;br /&gt;
** Code which previously did R_TRY() now just calls.&lt;br /&gt;
* KPageHeapBitmapRng now has TinyMt as a data member, instead of directly implementing KPageHeap.&lt;br /&gt;
** This affects how constructor is invoked.&lt;br /&gt;
* New InfoType 24 (&amp;quot;FreeThreadCount&amp;quot;) was added, gets the number of threads a process can allocate before exhausting its resource limit.&lt;br /&gt;
* KMemoryBlock/KMemoryInfo now has extra members tracking u8 non_contig_bitflags, u16 ipc_non_contig_lock_count, u16 device_non_contig_lock_count&lt;br /&gt;
* KMemoryBlockManager Update now takes non-contig flags to determine where to coalesce (all coalescing must now happen forwards instead of either direction)&lt;br /&gt;
* KMemoryBlockManagerUpdateAllocator no longer has a result member, instead it has -&amp;gt;Initialize() which takes in a number of blocks to allocate&lt;br /&gt;
* KMemoryManager::Allocate, KMemoryManager::AllocatePageGroup, KMemoryManager::AllocatePageGroupForProcess, now call KPageGroup::Open on the returned page group.&lt;br /&gt;
** All callsites for these functions no longer call open after allocating.&lt;br /&gt;
* KMemoryManager::Open is now KMemoryManager::OpenAdditionalReference, now checks that refcount is &amp;gt;= 1 instead of &amp;gt;= 0&lt;br /&gt;
* KPageTableBase now has an additional data member &amp;quot;disable_device_address_space_merge&amp;quot;&lt;br /&gt;
** KProcessPageTable::Initialize now takes in (process flags &amp;amp; 0x1000) as a bool argument to set this.&lt;br /&gt;
* Page table Query operations now return a number of blocks required to support the above when relevant&lt;br /&gt;
* KPageTable now uses 4 sw-reserved bits instead of 1&lt;br /&gt;
** Former bit 0x01.... (&amp;quot;Is Mapped&amp;quot;) is now bit 0x40..... (PTE bit 58)&lt;br /&gt;
** PTE bit 55 &amp;quot;contiguous not allowed&amp;quot; was reworked for significantly more fine-grained control&lt;br /&gt;
*** PTE bit 55 is now &amp;quot;start of block non-contiguous&amp;quot;, coalescing cannot occur if the first block in a coalesce has this block set.&lt;br /&gt;
*** PTE bit 56 is now &amp;quot;not-end-of-block non-contiguous&amp;quot;, coalescing cannot occur if a block other than the last in a coalesce has this bit set&lt;br /&gt;
*** PTE bit 57 is now &amp;quot;end of block non-contiguous&amp;quot;, coalescing cannot occur if the last block in a coalesce has this bit set&lt;br /&gt;
*** The old non-contiguous semantics are equivalent to 56 + 57 together.&lt;br /&gt;
** These bits are now returned by KPageTableImpl::Traverse&lt;br /&gt;
** Upper byte of KPageProperties is now bitflags to control management of these bits.&lt;br /&gt;
** Bit 0x1 = &amp;quot;Set/Clear PTE Bit55&amp;quot;&lt;br /&gt;
** Bit 0x2 = &amp;quot;Set PTE Bit56&amp;quot;&lt;br /&gt;
** Bit 0x4 = &amp;quot;Clear PTE Bit56&amp;quot;&lt;br /&gt;
** Bit 0x8 = &amp;quot;Set PTE Bit57&amp;quot;&lt;br /&gt;
** Bit 0x10 = &amp;quot;Clear PTE Bit57&amp;quot;&lt;br /&gt;
** Bit 0x20 = Force-Clear 56+57 + attempt to merge&lt;br /&gt;
* KMemoryBlockManager/KPageTable now prevent coalescing of blocks which are reprotected --- (for transfer memory, ipc, ...)&lt;br /&gt;
* They also do not coalesce adjacent GPU mappings that were mapped separately.&lt;br /&gt;
* They removed the 0x80 &amp;quot;AnyLocked&amp;quot; bit from KMemoryAttribute&lt;br /&gt;
* KMemoryBlock/KMemoryInfo now have additional u16 &amp;quot;device_non_coalesce_right_count&amp;quot;.&lt;br /&gt;
** Like device_non_coalesce_left_count from previous 11.x, this now prevents merging with block to the right if set.&lt;br /&gt;
* KMemoryBlock::Add now takes in the memory block to the right instead of the size of the block to the right.&lt;br /&gt;
** This facilitates combining flags for the newly coalesced blocks.&lt;br /&gt;
* KPageTableBase::SetProcessMemoryPermission no longer sets non-coalesce bit 24.&lt;br /&gt;
* KDeviceAddressSpace::Map/KDeviceAddressSpace::Unmap now call new KPageTableBase function to update non-coalesce state according to partial map state.&lt;br /&gt;
* KDevicePageTable::UnmapImpl now invalidates TlbGroup in the failure case of adding to the page group.&lt;br /&gt;
* KPageTableBase::MakeAndOpenContiguousPageGroup is now KPageTableBase::MakePageGroupForDeviceAddressSpace, and now prevents coalescing until call completion.&lt;br /&gt;
** non_coalesce_mask 0x10 is used for this.&lt;br /&gt;
* KPageTableBase::UnmapCodeMemory no longer requires the whole range have the same state.&lt;br /&gt;
** It now invalidates instruction cache if any pages are code.&lt;br /&gt;
* KPageTable::UnknownVirtualFunction10 now takes in more arguments: _QWORD (address probably), _QWORD (size probably), two bools, _QWORD (address2 probably), _QWORD (size2 probably), void * (probably KAlpha * or KBeta *)&lt;br /&gt;
** Returns whether a comparison between address_probably and address_2_probably holds depending on flags at pointer + 0x10.&lt;br /&gt;
* KMemoryState_Io now goes to the alias code region in GetRegionAddress/Size (weird, seems like incorrect behavior)&lt;br /&gt;
** Also very weird: KPageTableBase::MapIo maps IO into the kernel map region, but KPageTableBase::QueryMapping panics if it is not in the alias code region.&lt;br /&gt;
** This &amp;quot;probably&amp;quot; causes kernel panic if mapping IO into process with 32-bit-no-alias address space type?&lt;br /&gt;
&lt;br /&gt;
====FIRM Sysmodules====&lt;br /&gt;
FIRM sysmodules were updated. Specific diffs available below:&lt;br /&gt;
&amp;lt;check back for more diffs later&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* All titles were updated, except for the following (minus stubbed titles): SharedFont, Dictionary, UrlBlackList, LibraryAppletMiiEdit.&lt;br /&gt;
* The previously stubbed 010000000000001B sysmodule was replaced with [[Capmtp_services|capmtp]].&lt;br /&gt;
&lt;br /&gt;
The following sysmodules had IPC changes: [[USB_services|usb]], [[Settings_services|settings]], [[BCAT_services|bcat]], [[PTM_services|ptm]], [[Sockets_services|bsdsockets]], [[HID_services|hid]], [[Audio_services|audio]], [[WLAN_services|wlan]], [[Account_services|account]], [[NS_Services|ns]], [[PSC_services|psc]], [[Applet_Manager_services|am]], [[NIM_services|nim]], [[Display_services|vi]], [[Parental_Control_services|pctl]], [[Glue_services|glue]], [[ETicket_services|es]], [[Shared_Database_services|sdb]], [[OLSC_services|olsc]], [[PGL_services|pgl]], [[Filesystem_services|fs]], [[Loader_services|loader]], [[Services_API|sm]], [[Capture_services|capsrv]].&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (see [[Services_API]] for service-hosting changes):&lt;br /&gt;
* All updated NPDMs now have [[NPDM#Flags|Flags]] bit5 set.&lt;br /&gt;
* ptm: Access to hshl:set and ins:r were added.&lt;br /&gt;
* ptm/hid: Various services were re-ordered in the Service Access Control.&lt;br /&gt;
* wlan now has access to csrng.&lt;br /&gt;
* ldn now has access to pl:u.&lt;br /&gt;
* pcv now has access to hshl:set.&lt;br /&gt;
* account now has access to ectx:w.&lt;br /&gt;
* ns now has access to pl:u.&lt;br /&gt;
* am: Access to the following was added: arp:r, aud:a, aud:d. Access to the following was removed: audin:a, audin:d, audout:a, audout:d, audren:a, audren:d. Access to hshl:set/hshl:sys was added.&lt;br /&gt;
* erpt: Access to svcGetResourceLimitLimitValue and svc 0x37 were added. Access to ectx:r was added.&lt;br /&gt;
* vi: The Handle Table Size was changed from 160 to 192. Access to the following services were added: erpt:c, gpio, i2c, lm, psc:m, pwm.&lt;br /&gt;
* glue now has access to hshl:sys, and access to psm was removed.&lt;br /&gt;
* creport now has access to fsp-srv.&lt;br /&gt;
* sdb now has access to bcat:s and pm:info.&lt;br /&gt;
* migration now has access to prepo:u.&lt;br /&gt;
* qlaunch now has access to [[Capmtp_services|capmtp]].&lt;br /&gt;
* [[Controller_Applet|LibraryAppletController]] now has access to [[NGCT_services|ngct:u]].&lt;br /&gt;
* [[Profile_Selector|LibraryAppletPlayerSelect]] now has access to [[OLSC_services|olsc:s]].&lt;br /&gt;
* [[Album_Applet|LibraryAppletPhotoViewer]]: Access to [[Sockets_services|bsd:u]] was replaced with [[Sockets_services|bsd:s]]. Access to [[LDN_services|lp2p:sys]] was added. Access to [[NS_Services|ns:am2]] was replaced with [[NS_Services|ns:ro]]. FS permission bit0 is now clear, MountContent* is no longer accessible.&lt;br /&gt;
* [[Internet_Browser|LibraryAppletLoginShare]] now has access to [[NS_Services|ns:web]].&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* CertStore was [[SSL_services#CertStore|updated]].&lt;br /&gt;
* ErrorMessage: New errors were added / localization changes.&lt;br /&gt;
* BrowserDll: The following was updated: &amp;quot;/browser/ErrorPageFilteringTemplate.html&amp;quot;, &amp;quot;/browser/MediaControls.css&amp;quot;, &amp;quot;/browser/MediaControls.js&amp;quot;, &amp;quot;/browser/RootCaEtc.pem&amp;quot;, &amp;quot;/browser/RootCaSdkAdditional.pem&amp;quot;, &amp;quot;/buildinfo/buildinfo.dat&amp;quot;. The following was added: &amp;quot;/browser/MediaControlsInline.css&amp;quot;, &amp;quot;/browser/MediaControlsInline.js&amp;quot;.&lt;br /&gt;
** &amp;quot;/dll_0&amp;quot; and &amp;quot;/dll_1&amp;quot; were moved into &amp;quot;/nro/netfront/dll_{0/1}&amp;quot;.&lt;br /&gt;
** &amp;quot;/lyt/Lhub.arc&amp;quot; was added.&lt;br /&gt;
** &amp;quot;/message/USpt/&amp;quot; was added.&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/USpt/&amp;quot; added&lt;br /&gt;
** &amp;quot;/safe.htdocs/img/recyclenintendo.jpg&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/js/tapaction.js&amp;quot; updated&lt;br /&gt;
* NgWord: updated&lt;br /&gt;
* AvatarImage: More icons added.&lt;br /&gt;
* LocalNews: Added &amp;quot;/message/revision.txt&amp;quot; and &amp;quot;/message/USpt/&amp;quot;.&lt;br /&gt;
* Eula:&lt;br /&gt;
** &amp;quot;/revision.txt&amp;quot; updated&lt;br /&gt;
** Updated &amp;quot;/EUru/Eula.msbt.szs&amp;quot;, &amp;quot;/JPja/Eula.msbt.szs&amp;quot;.&lt;br /&gt;
** Added &amp;quot;/USpt/&amp;quot;.&lt;br /&gt;
* TimeZoneBinary: TZ info updated.&lt;br /&gt;
* FontNintendoExtension: &amp;quot;/nintendo_ext_003.bfttf&amp;quot; and &amp;quot;/nintendo_ext2_003.bfttf&amp;quot; were updated.&lt;br /&gt;
* FirmwareDebugSettings: updated&lt;br /&gt;
* FatalMessage: Updated &amp;quot;/pt-BR/GeneralMessage&amp;quot; and &amp;quot;/pt-BR/QuestMessage&amp;quot; were updated.&lt;br /&gt;
* ControllerIcon: &amp;quot;/lyt/ColorTable&amp;quot; updated&lt;br /&gt;
* PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko: updated&lt;br /&gt;
* ControllerFirmware: &amp;quot;/TouchScreenFirmwareInfo.csv&amp;quot; updated&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* FunctionBlackList:&lt;br /&gt;
** &amp;quot;/blacklist.dat&amp;quot; was replaced with &amp;quot;/blacklist.json&amp;quot;.&lt;br /&gt;
* NgWordT: updated&lt;br /&gt;
* Applets: Various UI/graphics/sound/localization changes.&lt;br /&gt;
* Web-applets: &amp;quot;/buildinfo/buildinfo.dat&amp;quot; was updated, and &amp;quot;/.nrr/netfront.nrr&amp;quot; was renamed to &amp;quot;/.nrr/dll.nrr&amp;quot;.&lt;br /&gt;
* [[Album_Applet|LibraryAppletPhotoViewer]]: In addition to the above, &amp;quot;/http/&amp;quot; was added, which contains the following:&lt;br /&gt;
** &amp;quot;index.html&amp;quot;&lt;br /&gt;
** &amp;quot;js/index.js&amp;quot;&lt;br /&gt;
** &amp;quot;styles/index.css&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The new Nintendo Switch Online menu (which can be launched via qlaunch) is handled by [[Internet_Browser#Whitelisted_Applets|LibraryAppletLoginShare]].&lt;br /&gt;
&lt;br /&gt;
=== [[LDN_services|ldn]]-sysmodule ===&lt;br /&gt;
lp2p now supports using standard WPA2-PSK, which is used by [[#LibraryAppletPhotoViewer]].&lt;br /&gt;
&lt;br /&gt;
=== [[SSL_services|ssl]]-sysmodule ===&lt;br /&gt;
TLS 1.3 is now [[SSL_services#SslVersion|supported]] if the user-process enables it.&lt;br /&gt;
&lt;br /&gt;
See also [[#OSS]].&lt;br /&gt;
&lt;br /&gt;
=== [[Creport|creport]]-sysmodule ===&lt;br /&gt;
* creport now has access to fsp-srv, this is used to retrieve debugging information that is now attached to error reports. The following functions are called (with output/info attached to erpts):&lt;br /&gt;
** GetSdCardSpeedMode&lt;br /&gt;
** GetSdCardCid&lt;br /&gt;
** GetSdCardUserAreaSize&lt;br /&gt;
** GetSdCardProtectedAreaSize&lt;br /&gt;
** GetAndClearSdCardErrorInfo&lt;br /&gt;
** IsGameCardInserted&lt;br /&gt;
** GetGameCardCid&lt;br /&gt;
** GetGameCardErrorReportInfo&lt;br /&gt;
** GetGameCardDeviceId&lt;br /&gt;
** GetMmcSpeedMode&lt;br /&gt;
** GetMmcCid&lt;br /&gt;
** GetMmcPatrolCount&lt;br /&gt;
** GetAndClearMmcErrorInfo&lt;br /&gt;
** GetMmcExtendedCsd&lt;br /&gt;
** GetAndClearMemoryReportInfo&lt;br /&gt;
** GetAndClearFileSystemProxyErrorInfo&lt;br /&gt;
&lt;br /&gt;
=== [[Internet_Browser|Web-applets]] ===&lt;br /&gt;
These are now compiled with compiler Pointer Authentication / CFI mitigations enabled. This does not apply to non-web-applets.&lt;br /&gt;
&lt;br /&gt;
Pointer Authentication uses the crc32x instruction, and x18 as a cryptographically-random u64 provided by the kernel.&lt;br /&gt;
&lt;br /&gt;
This is used to add/subtract x30 starting with bit40, during functions entry/exit. The code for entry/exit is identical, except that entry does add, and exit uses subtract:&lt;br /&gt;
* The low 40-bits of x30 are extracted, then multiplied with x18.&lt;br /&gt;
* &amp;lt;code&amp;gt;crc32x w17, wzr, x17&amp;lt;/code&amp;gt; (which uses the above value)&lt;br /&gt;
* Then the previously mentioned add/subtraction operation is done, with the output from the above shifted to bit40.&lt;br /&gt;
&lt;br /&gt;
The x18 is OR&#039;d by kernel with 1, to make sure it is odd. This means that the multiply is a bijection; in other words, no entropy is lost when doing the multiply. If this had not been done, a random value that is divisible by a large power of two (the attacker can just keep spawning threads until gets such a one), would have weak cookies that allows the scheme to be trivially broken.&lt;br /&gt;
&lt;br /&gt;
CFI is implemented as follows: blr instructions no longer exist. When funcptrs are called, new functions are now called instead which handles the call. The u32 at funcptr_addr-4 must match 0xe7ffdefe, otherwise it will branch to undefined instruction 0x0000dead. Otherwise, it will jump to the funcptr_addr.&lt;br /&gt;
&lt;br /&gt;
Almost all functions now have the above u32 at -4, therefore funcptr calls now have to start at the actual funcptr start. However, this doesn&#039;t apply to calls done during functions&#039; exit: these directly br to the funcptr_addr without extra validation. The br instructions in the .plt were also replaced with branches to the function described above.&lt;br /&gt;
&lt;br /&gt;
The above applies to all NSOs in ExeFs, except for LibraryAppletOfflineWeb which doesn&#039;t have it enabled. The NROs in the BrowserDll SystemData have it enabled for &amp;quot;/nro/netfront/dll_1/&amp;quot;, however &amp;quot;dll_0&amp;quot; doesn&#039;t have it enabled (which is used by LibraryAppletOfflineWeb).&lt;br /&gt;
&lt;br /&gt;
This is referred to in the build-path strings as &amp;quot;NX-NXFP2-a64-cfi&amp;quot; (nnSdkEmpty), and &amp;quot;NX64-cfi&amp;quot; (OSS).&lt;br /&gt;
&lt;br /&gt;
=== LibraryAppletPhotoViewer ===&lt;br /&gt;
For details on the new sharing functionality in the Album applet, see [[Album_Applet|here]].&lt;br /&gt;
&lt;br /&gt;
== OSS ==&lt;br /&gt;
[https://www.nintendo.co.jp/support/oss/index.html OSS] was updated.&lt;br /&gt;
&lt;br /&gt;
Besides WebKit, [[SSL_services|NSS/NSPR]] was updated:&lt;br /&gt;
* NSPR was updated from 4.12 to 4.24.&lt;br /&gt;
* &amp;lt;code&amp;gt;#define NSSUTIL_VERSION  &amp;quot;3.26&amp;quot;&amp;lt;/code&amp;gt; was changed to &amp;lt;code&amp;gt;#define NSSUTIL_VERSION &amp;quot;3.49.1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both src_{versions} directories were updated, with the same changes:&lt;br /&gt;
* &amp;quot;rocrt_nro.cpp&amp;quot; updated&lt;br /&gt;
* &amp;quot;NX-NXFP2-a64-cfi/rocrt.AssemblyOffset.h&amp;quot; Addded, identical to &amp;quot;NX-NXFP2-a64/rocrt.AssemblyOffset.h&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2020-12-01_00-02-35&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=7719</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=7719"/>
		<updated>2019-09-10T01:07:17Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || [[#svcSetHeapSize]] || W1=size || W0=result, X1=outaddr&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || [[#svcSetMemoryPermission]] || X0=addr, X1=size, W2=prot || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || [[#svcSetMemoryAttribute]] || X0=addr, X1=size, W2=state0, W3=state1 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || [[#svcMapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || [[#svcUnmapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || [[#svcQueryMemory]] || X0=MemoryInfo*, X2=addr || W0=result, W1=PageInfo                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || [[#svcExitProcess]] || None ||&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || [[#svcCreateThread]] || X1=entry, X2=thread_context, X3=stacktop, W4=prio, W5=processor_id&lt;br /&gt;
R0=prio, R1=entry, R2=thread_context, R3=stacktop, R4=processor_id&lt;br /&gt;
|| W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || [[#svcStartThread]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || [[#svcExitThread]] || None ||                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0xB || [[#svcSleepThread]] || X0=nano&lt;br /&gt;
R0=nano_lower32, R1=lower_upper32&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || [[#svcGetThreadPriority]] || W1=thread_handle || W0=result, W1=prio&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || [[#svcSetThreadPriority]] || W0=thread_handle, W1=prio || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || [[#svcGetThreadCoreMask]] || W2=thread_handle || W0=result, W1=out0, X2=out1&lt;br /&gt;
R0=result, R1=out0, R2=out1_lower32, R3=out1_upper32&lt;br /&gt;
|-&lt;br /&gt;
|  0xF || [[#svcSetThreadCoreMask]] || W0=thread_handle, W1=in, X2=in2&lt;br /&gt;
R0=thread_handle, R1=in, R2=in2_lower32, R3=in2_upper32&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#svcGetCurrentProcessorNumber]] || None || W0/X0=cpuid&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || [[#svcSignalEvent]] || W0=wevent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || [[#svcClearEvent]] || W0=wevent_or_revent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || [[#svcMapSharedMemory]] || W0=shmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || svcUnmapSharedMemory || W0=shmem_handle, X1=addr, X2=size || W0=result                                                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || [[#svcCreateTransferMemory]] || X1=addr, X2=size, W3=perm || W0=result, W1=tmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || svcCloseHandle || W0=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || svcResetSignal || W0=revent_or_process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles, X3=timeout&lt;br /&gt;
R0=timeout_lower32, R1=handles_ptr, R2=num_handles, R3=timeout_upper32&lt;br /&gt;
|| W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || [[#svcCancelSynchronization]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle ||                                     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || svcArbitrateUnlock || X0=ptr ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || svcWaitProcessWideKeyAtomic || X0=ptr0, X1=ptr, W2=thread_handle, X3=timeout&lt;br /&gt;
R0=ptr0, R1=ptr, R2=thread_handle, R3=timeout_lower32, R4=timeout_upper32&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || svcSignalProcessWideKey || X0=ptr, W1=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[#svcGetSystemTick]] || None || X0={value of cntpct_el0}&lt;br /&gt;
R0=cntpct_el0_lower32, R1=cntpct_el0_upper32&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || svcConnectToNamedPort || X1=port_name_str || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || svcSendSyncRequestLight || W0=light_session_handle, X1=? || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || svcSendSyncRequest || X0=normal_session_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || [[#svcSendSyncRequestWithUserBuffer]] || X0=cmdbufptr, X1=size, X2=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || svcSendAsyncRequestWithUserBuffer || X1=cmdbufptr, X2=size, X3=handle || W0=result, W1=revent_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || svcGetProcessId || W1=thread_or_process_or_debug_handle || W0=result, X1=pid&lt;br /&gt;
R0=result, R1=pid_lower32, R2=pid_upper32&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || svcGetThreadId || W1=thread_handle || W0=result, X1=out&lt;br /&gt;
R0=result, R1=out_lower32, R2=out_upper32&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[#svcBreak]] || X0=break_reason,X1,X2=info || W0=result = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || svcOutputDebugString || X0=str, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || svcReturnFromException || X0=result || &lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || [[#svcGetInfo]] || W1=info_id, X2=handle, X3=info_sub_id&lt;br /&gt;
R0=info_sub_id_lower32, R1=info_id, R2=handle, R3=info_sub_id_upper32&lt;br /&gt;
|| W0=result, X1=out&lt;br /&gt;
R0=result, R1=out_lower32, R2=out_upper32&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || svcFlushEntireDataCache || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [3.0.0+] [[#svcMapPhysicalMemory]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || [3.0.0+] svcUnmapPhysicalMemory || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || [5.0.0+] svcGetFutureThreadInfo || X3=timeout&lt;br /&gt;
R0=timeout_lower32, R1=timeout_upper32&lt;br /&gt;
|| W0=result, bunch of crap&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || svcGetLastThreadInfo || None || W0=result, W1,W2,W3,W4=unk, W5=truncated_u64, W6=bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || svcGetResourceLimitLimitValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
R0=result, R1=value_lower32, R2=value_upper32&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || svcGetResourceLimitCurrentValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
R0=result, R1=value_lower32, R2=value_upper32&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || svcSetThreadActivity || W0=thread_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || svcGetThreadContext3 || X0=[[#ThreadContext]]*, W1=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [4.0.0+] svcWaitForAddress || X0=ptr, W1=[[#ArbitrationType]], X2=value, X3=timeout&lt;br /&gt;
R0=ptr, R1=[[#ArbitrationType]], R2=value, R3=timeout_lower32, R4=timeout_upper32&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || [4.0.0+] svcSignalToAddress || X0=ptr, W1=[[#SignalType]], X2=value, W3=num_to_signal ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || [8.0.0+] svcSynchronizePreemptionState || None || W0=result&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x3C || [[#svcDumpInfo]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || [4.0.0+] svcDumpInfoNew || ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || svcCreateSession || W2=is_light, X3=name_ptr || W0=result, W1=server_handle, W2=client_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || [[#svcAcceptSession]] || W1=port_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || [[#svcReplyAndReceive]] || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout&lt;br /&gt;
R0=timeout_lower32, R1=ptr_handles, R2=num_handles, R3=replytarget_handle(0=none), R4=timeout_upper32&lt;br /&gt;
|| W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout&lt;br /&gt;
R0=num_handles, R1=buf, R2=sz, R3=ptr_handles, R4=replytarget_handle(0=none), R5=timeout_lower32, R6=timeout_upper32&lt;br /&gt;
|| W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || svcCreateEvent || None || W0=result, W1=wevent_handle, W2=revent_handle&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x48 || [5.0.0+] [[#svcMapPhysicalMemoryUnsafe]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || [5.0.0+] svcUnmapPhysicalMemoryUnsafe || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || [5.0.0+] svcSetUnsafeLimit || X0=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || [4.0.0+] [[#svcCreateCodeMemory]] || X1=addr, X2=size || W0=result, W1=code_memory_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || [4.0.0+] [[#svcControlCodeMemory]] || W0=code_memory_handle, W1=[[#CodeMemoryOperation]], X2=dstaddr, X3=size, W4=perm&lt;br /&gt;
R0=code_memory_handle, R1=[[#CodeMemoryOperation]], R2=dstaddr_lower32, R3=dstaddr_upper32, R4=size_lower32, R5=size_upper32, R6=perm&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || svcSleepSystem || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || [[#svcReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val&lt;br /&gt;
R0=rw_mask, R1=in_val, R2=reg_addr_lower32, R3=reg_addr_upper32&lt;br /&gt;
|| W0=result, W1=out_val&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || svcSetProcessActivity || W0=process_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#svcCreateSharedMemory]] || W1=size, W2=myperm, W3=otherperm || W0=result, W1=shmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || [[#svcMapTransferMemory]] || X0=tmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || [[#svcUnmapTransferMemory]] || W0=tmemhandle, X1=addr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || [[#svcCreateInterruptEvent]] || X1=irq_num, W2=flag || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || [[#svcQueryPhysicalAddress]] || X1=addr || W0=result, X1=physaddr, X2=kerneladdr, X3=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || [[#svcQueryIoMapping]] || X1=physaddr, X2=size&lt;br /&gt;
R0=size, R2=physaddr_lower32, R3=physaddr_upper32&lt;br /&gt;
|| W0=result, X1=virtaddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || [[#svcCreateDeviceAddressSpace]] || X1=dev_as_start_addr, X2=dev_as_end_addr&lt;br /&gt;
R0=dev_as_end_addr_lower32, R1=dev_as_end_addr_upper32, R2=dev_as_start_addr_lower32, R3=dev_as_start_addr_upper32&lt;br /&gt;
|| W0=result, W1=dev_as_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || [[#svcAttachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || [[#svcDetachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || [[#svcMapDeviceAddressSpaceByForce]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm&lt;br /&gt;
R0=dev_as_handle, R1=proc_handle, R2=dev_map_addr_lower32, R3=dev_map_addr_upper32, R4=rev_as_size, R5=dev_as_addr_lower32, R6=dev_as_addr_upper32, R7=perm&lt;br /&gt;
|| W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || [[#svcMapDeviceAddressSpaceAligned]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm&lt;br /&gt;
R0=dev_as_handle, R1=proc_handle, R2=dev_map_addr_lower32, R3=dev_map_addr_upper32, R4=rev_as_size, R5=dev_as_addr_lower32, R6=dev_as_addr_upper32, R7=perm&lt;br /&gt;
|| W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || svcMapDeviceAddressSpace || W1=dev_as_handle, W2=proc_handle, X3=dev_map_addr, X4=dev_as_size, X5=dev_as_addr, W6=perm&lt;br /&gt;
R0=dev_map_addr_lower32, R1=dev_as_handle, R2=proc_handle, R3=dev_map_addr_upper32, R4=dev_as_size, R5=dev_as_addr_lower32, R6=dev_as_addr_upper32, R7=perm&lt;br /&gt;
|| W0=result, X1=mapped_size&lt;br /&gt;
R0=result, R1=mapped_size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || [[#svcUnmapDeviceAddressSpace]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr&lt;br /&gt;
R0=dev_as_handle, R1=proc_handle, R2=dev_map_addr_lower32, R3=dev_map_addr_upper32, R4=dev_as_size, R5=dev_as_addr_lower32, R6=dev_as_addr_upper32&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || svcInvalidateProcessDataCache || W0=process_handle, X1=addr, X2=size&lt;br /&gt;
R0=process_handle, R1=size_lower32, R2=addr_lower32, R3=addr_upper32, R4=size_upper32&lt;br /&gt;
|| W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || svcStoreProcessDataCache || W0=process_handle, X1=addr, X2=size&lt;br /&gt;
R0=process_handle, R1=size_lower32, R2=addr_lower32, R3=addr_upper32, R4=size_upper32&lt;br /&gt;
|| W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || svcFlushProcessDataCache || W0=process_handle, X1=addr, X2=size&lt;br /&gt;
R0=process_handle, R1=size_lower32, R2=addr_lower32, R3=addr_upper32, R4=size_upper32&lt;br /&gt;
|| W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || svcDebugActiveProcess || X1=pid&lt;br /&gt;
R2=pid_lower32, R3=pid_upper32&lt;br /&gt;
|| W0=result, W1=debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || svcBreakDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || svcTerminateDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || svcGetDebugEvent || X0=[[#DebugEventInfo]]*, W1=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || [[#svcContinueDebugEvent]] || [1.0.0-2.3.0] W0=debug_handle, W1=[[#ContinueDebugFlagsOld]], X2=thread_id &lt;br /&gt;
[3.0.0+] W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id_list(u64 *), W3=num_tids (max 64, 0 means &amp;quot;all threads&amp;quot;)&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out &lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || svcGetThreadList || X1=tids_out_ptr, W2=max_out, W3=debug_handle_or_zero || W0=result, X1=num_out&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || svcGetDebugThreadContext || X0=ThreadContext*, X1=debug_handle, X2=thread_id, W3=[[#ThreadContextFlags]]&lt;br /&gt;
R0=ThreadContext*, R1=debug_handle, R2=thread_id_lower32, R3=thread_id_upper32, R4=[[#ThreadContextFlags]]&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || svcSetDebugThreadContext || W0=debug_handle, X1=thread_id, X2=ThreadContext*, W3=[[#ThreadContextFlags]]&lt;br /&gt;
R0=debug_handle, R1=ThreadContext*, R2=thread_id_lower32, R3=thread_id_upper32, R4=[[#ThreadContextFlags]]&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || svcQueryDebugProcessMemory || X0=[[#MemoryInfo]]*, X2=debug_handle, X3=addr || W0=result, W1=PageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || svcReadDebugProcessMemory || X0=buffer*, X1=debug_handle, X2=src_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || svcWriteDebugProcessMemory || X0=debug_handle, X1=buffer*, X2=dst_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || [[#svcSetHardwareBreakPoint]] || W0=HardwareBreakpointId, X1=watchpoint_flags/breakpoint_flags, X2=watchpoint_value/debug_handle&lt;br /&gt;
R0=HardwareBreakpointId, R1=value_lower32, R2=flags_lower32, R3=flags_upper32, R4=value_upper32&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || svcGetDebugThreadParam || X2=debug_handle, X3=thread_id, W4=[[#DebugThreadParam]]&lt;br /&gt;
R0=thread_id_lower32, R1=thread_id_upper32, R2=debug_handle, R3=[[#DebugThreadParam]]&lt;br /&gt;
|| W0=result, X1=out0, W2=out1&lt;br /&gt;
R0=result, R1=out0_lower32, R2=out0_upper32, R3=out1&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x6F || [5.0.0+] [[#svcGetSystemInfo]] || X1=info_id, X2=handle, X3=info_sub_id&lt;br /&gt;
R1=info_sub_id_lower32, R2=info_id, R3=handle, R4=info_sub_id_upper32&lt;br /&gt;
|| W0=result, X1=out&lt;br /&gt;
R0=result, R1=out_lower32, R2=out_upper32&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || svcCreatePort || W2=max_sessions, W3=is_light, X4=name_ptr&lt;br /&gt;
R0=name_ptr, R2=max_sessions, R3=is_light&lt;br /&gt;
|| W0=result, W1=serverport_handle, W2=clientport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || svcManageNamedPort || X1=name_ptr, W2=max_sessions || W0=result, W1=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || svcConnectToPort || W1=clientport_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || [[#svcSetProcessMemoryPermission]] || W0=process_handle, X1=addr, X2=size, W3=perm&lt;br /&gt;
R0=process_handle, R1=size_lower32, R2=addr_lower32, R3=addr_upper32, R4=size_upper32, R5=perm&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || [[#svcMapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size&lt;br /&gt;
R0=dstaddr, R1=process_handle, R2=srcaddr_lower32, R3=srcaddr_upper32, R4=size&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || [[#svcUnmapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size&lt;br /&gt;
R0=dstaddr, R1=process_handle, R2=srcaddr_lower32, R3=srcaddr_upper32, R4=size&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || [[#svcQueryProcessMemory]] || X0=meminfo_ptr, W2=process_handle, X3=addr&lt;br /&gt;
R0=meminfo_ptr, R1=addr_lower32, R2=process_handle, R3=addr_upper32&lt;br /&gt;
|| W0=result, W1=pageinfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || [[#svcMapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size&lt;br /&gt;
R0=process_handle, R1=srcaddr_lower32, R2=dstaddr_lower32, R3=dstaddr_upper32, R4=srcaddr_lower32, R5=size_lower32, R6=size_upper32&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#svcUnmapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size&lt;br /&gt;
R0=process_handle, R1=srcaddr_lower32, R2=dstaddr_lower32, R3=dstaddr_upper32, R4=srcaddr_lower32, R5=size_lower32, R6=size_upper32&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || [[#svcCreateProcess]] || X1=procinfo_ptr, X2=caps_ptr, W3=cap_num ||  W0=result, W1=process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || svcStartProcess || W0=process_handle, W1=main_thread_prio, W2=default_cpuid, W3=main_thread_stacksz&lt;br /&gt;
R0=process_handle, R1=main_thread_prio, R2=default_cpuid, R3=main_thread_stacksz_lower32, R4=main_thread_stacksz_upper32&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || svcTerminateProcess || W0=process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || [[#svcGetProcessInfo]] || W0=process_handle, W1=[[#ProcessInfoType]]&lt;br /&gt;
R1=process_handle, R2=[[#ProcessInfoType]]&lt;br /&gt;
|| W0=result, X1=[[#ProcessState]]&lt;br /&gt;
R0=result, R1=[[#ProcessState]]_lower32, R2=[[#ProcessState]]_upper32&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || svcCreateResourceLimit || None || W0=result, W1=reslimit_handle &lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value&lt;br /&gt;
R0=reslimit_handle, R1=[[#LimitableResource]], R2=value_lower32, R3=value_upper32&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || [[#svcCallSecureMonitor]] || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args&lt;br /&gt;
R0=smc_sub_id, R1, R2, R3=smc_args&lt;br /&gt;
|| X0,X1,X2,X3,X4,X5,X6,X7=result&lt;br /&gt;
R0,R1,R2,R3=result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || OutAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000 (2MB).&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d, and always in the Heap memory region) is written to OutAddr.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition. The memory allocated counts towards the caller&#039;s process Memory ResourceLimit.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than or equal to 4GB.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Invalid size passed. It&#039;s either bigger than 4GB, or misaligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD001:&#039;&#039;&#039; Size is bigger than the Heap Region size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; KMemoryBlockAllocator slab allocator exhausted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD401:&#039;&#039;&#039; The memory region is in an invalid state. Likely because a mapping was made in the heap region.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x10801:&#039;&#039;&#039; Memory resource limit reached.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || Prot&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The memory region was reprotected.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Unaligned address specified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Unaligned or zero size specified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD401:&#039;&#039;&#039; The provided memory region does not fall within the userland address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD801:&#039;&#039;&#039; Invalid permission specified. Valid permissions are ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD401:&#039;&#039;&#039; The provided memory region was in an invalid state. The region must have the PermissionChangeAllowed bit set in its [[#MemoryState]], and must not have the IsBorrowed or IsUncached [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; Kernel resource exhausted.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryAttribute ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || State0&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u32 || State1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change attribute of page-aligned memory region. &lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! State0 || State1 || Action&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Set bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0] This could be used to map into either the Alias Region or the Stack region.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This can only be used to map into the Stack region.&lt;br /&gt;
&lt;br /&gt;
Code can get the range of the Alias region from [[#svcGetInfo]] id0=2,3, and on 2.0.0+ the range of the Stack region via [[#svcGetInfo]] id0=14, 15 (on 1.0.0, the Stack region had hardcoded limits).&lt;br /&gt;
&lt;br /&gt;
When mapped into the Alias region, the mapped memory will have state 0x482907.&lt;br /&gt;
&lt;br /&gt;
When mapped into the Stack region, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps a region that was previously mapped with [[#svcMapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== svcQueryMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Query information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== svcExitProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== svcCreateThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || R0 || u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R4 || u32 || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Create a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
Processor_id must be 0,1,2,3 or -2, where -2 uses the default cpuid for process.&lt;br /&gt;
&lt;br /&gt;
== svcStartThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== svcExitThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== svcSleepThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0, R1 || s64 || Nanoseconds&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Sleep for a specified amount of time, or yield thread.&lt;br /&gt;
&lt;br /&gt;
Setting nanoseconds to 0, -1, or -2 indicates a yielding type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Yielding without core migration&lt;br /&gt;
|-&lt;br /&gt;
| -1 || Yielding with core migration&lt;br /&gt;
|-&lt;br /&gt;
| -2 || Yielding to any other thread&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || u32 || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || R2, R3 || u64 || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || u32 || In0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || u64 || In1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetCurrentProcessorNumber ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0/X0 || u64 || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
Cpu-id is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== svcSignalEvent ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;WritableEvent&amp;gt; || Event&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Puts the given event in the signaled state.&lt;br /&gt;
&lt;br /&gt;
Will wake up any thread currently waiting on this event. Can potentially trigger a reschedule.&lt;br /&gt;
&lt;br /&gt;
Any calls to [[#svcWaitSynchronization]] on this handle will return immediately, until the event&#039;s signaled state is reset.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Event is now in signaled state.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; Invalid handle. The handle either does not exist, or is not a WritableEvent.&lt;br /&gt;
&lt;br /&gt;
== svcClearEvent ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;WritableEvent or ReadableEvent&amp;gt; || Event&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Takes the given event out of the signaled state.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success, the event is now in the not-signaled state.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; Invalid handle. The handle either does not exist, or is not a ReadableEvent nor a WritableEvent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xFA01:&#039;&#039;&#039; The handle was not in a signaled state.&lt;br /&gt;
&lt;br /&gt;
== svcMapSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== svcCreateTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== svcWaitSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || u64 || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R3 || u64 || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || u64 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Works with num_handles &amp;lt;= 0x40.&lt;br /&gt;
&lt;br /&gt;
When zero handles are passed, this will wait forever until either timeout or cancellation occurs.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KDebug:&#039;&#039;&#039; signals when there is a new [[#DebugEventInfo|DebugEvent]] (retrievable via [[#svcGetDebugEvent]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KClientPort:&#039;&#039;&#039; signals when the number of sessions is less than the maximum allowed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KProcess:&#039;&#039;&#039; signals when the process undergoes a state change (retrievable via [[#svcGetProcessInfo]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KReadableEvent:&#039;&#039;&#039; signals when the event&#039;s corresponding KWritableEvent has been signaled via svcSignalEvent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerPort:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#svcAcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerSession:&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#svcReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KThread:&#039;&#039;&#039; signals when the thread has exited.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signaled before the timeout expired, or one of the objects is a Session with a closed remote. Handle index is updated to indicate which object signaled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x7601:&#039;&#039;&#039; Thread termination requested. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; Invalid address. Returned when the handles pointer is not a readable address. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signaled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xec01:&#039;&#039;&#039; Interrupted. Returned when another thread uses [[#svcCancelSynchronization]] to cancel this thread. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; Too many handles. Returned when the number of handles passed is &amp;gt; 0x40.&lt;br /&gt;
&lt;br /&gt;
== svcCancelSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the referenced thread is currently in a synchronization call ([[#svcWaitSynchronization]], [[#svcReplyAndReceive]] or [[#svcReplyAndReceiveLight]]), that call will be interrupted and return 0xec01.&lt;br /&gt;
If that thread is not currently executing such a synchronization call, the next call to a synchronization call will return 0xec01.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t take force-pause (activity/debug pause) into account.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The thread was either interrupted or has had its flag set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. The handle given was either invalid or not a thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemTick ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0, R1 || u64 || Ticks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the value of cntpct_el0.&lt;br /&gt;
&lt;br /&gt;
The frequency is 19200000 Hz (constant from official sw).&lt;br /&gt;
&lt;br /&gt;
Official sw reads cntpct_el0 directly from usermode without using this SVC. [[ExeFS|sdk-nso]] has this SVC, but it&#039;s not known to be called anywhere.&lt;br /&gt;
&lt;br /&gt;
== svcSendSyncRequestWithUserBuffer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || CmdPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and CmdPtr must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xcc01:&#039;&#039;&#039; CmdPtr is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xca01:&#039;&#039;&#039; Size is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xce01:&#039;&#039;&#039; KSessionRequest allocation failed (unlikely) or pointer buffer size exceeded.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Handles does not exist, or handle is not an instance of KClientSession.&lt;br /&gt;
&lt;br /&gt;
== svcBreak ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Break Reason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || Result || 0 (Success)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the process is attached, report the Break event. Then, if svcContinueDebugEvent didn&#039;t apply IgnoreException on the thread: if TPIDR_EL0 is 0, adjust ELR_EL1 to retry to svc instruction (and set TPIDR_EL0 to 1).&lt;br /&gt;
&lt;br /&gt;
Otherwise, if bit31 in reason isn&#039;t set, perform crash reporting (see Exception Handling section below), if it doesn&#039;t terminate the process adjust ELR_EL1 as well.&lt;br /&gt;
&lt;br /&gt;
Otherwise just return 0.&lt;br /&gt;
&lt;br /&gt;
== svcGetInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u32 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) R0 || u32 || InfoSubIdLower32&lt;br /&gt;
|-&lt;br /&gt;
| (In) R1 || u32 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) R2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) R3 || u32 || InfoSubIdUpper32&lt;br /&gt;
|-&lt;br /&gt;
| (Out) R0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) R1 || u32 || OutLower32&lt;br /&gt;
|-&lt;br /&gt;
| (Out) R2 || u32 || OutUpper32&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || AliasRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || AliasRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemoryAvailable. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || TotalMemoryUsage. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || IsCurrentProcessBeingDebugged&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || Returns ResourceLimit handle for current process. Used by [[Process_Manager_services|PM]].&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy from current process. TRNG. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AddressSpaceBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] StackRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] StackRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] PersonalMmHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] PersonalMmHeapUsage&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] TitleId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0-4.1.0] PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0-4.1.0] PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Process || 20 || 0 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 21 || 0 || [6.0.0+] TotalMemoryAvailableWithoutMmHeap&lt;br /&gt;
|-&lt;br /&gt;
| Process || 22 || 0 || [6.0.0+] TotalMemoryUsedWithoutMmHeap&lt;br /&gt;
|-&lt;br /&gt;
| Process || 23 || 0 || [9.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 0xF0000002 || 0-3, -1 || Thread Ticks. When 0-3 are passed, gets specific core CPU ticks spent on thread. When -1 is passed, gets total CPU ticks spent on thread.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemory ==&lt;br /&gt;
This is like svcSetHeapSize except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcDumpInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Does nothing, just returns with registers set to all-zero.&lt;br /&gt;
&lt;br /&gt;
== svcAcceptSession ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || Port&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || Session&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== svcReplyAndReceive ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || *Handle&amp;lt;Port or ServerSession&amp;gt; || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || u32 || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTarget&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R0, R4 || u64 (nanoseconds) || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || u32 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is zero, the TLS should contain a blank message. If this message has a C descriptor, the buffer it points to will be used as the pointer buffer. See [[IPC_Marshalling#IPC_buffers]]. Note that a pointer buffer cannot be specified if ReplyTarget is not zero.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemoryUnsafe ==&lt;br /&gt;
Same as [[#svcMapPhysicalMemory]] except it always uses pool partition 0.&lt;br /&gt;
&lt;br /&gt;
== svcCreateCodeMemory ==&lt;br /&gt;
Takes an address range with backing memory to create the code memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== svcControlCodeMemory ==&lt;br /&gt;
Maps the backing memory for a Code memory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#CodeMemoryOperation|CodeMemoryOperation_UnmapOwner/CodeMemoryOperation_UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the code memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Error 0xE401 is now returned when the process owner of the Code memory object is the same as the current process.&lt;br /&gt;
&lt;br /&gt;
== svcReadWriteRegister ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || u64 || RegAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R0 || u64 || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R1 || u64 || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || u64 || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by smcReadWriteRegister (checked in addition to the whitelist in svcReadWriteRegister), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== svcCreateSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || LocalPerm&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || RemotePerm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
Allocates memory from the current process&#039; pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcMapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The newly mapped pages will have [[#MemoryState]] type 0xE.&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in svcCreateMemoryMirror, otherwise error.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcCreateInterruptEvent ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || IrqNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || bool || Flags&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an event handle for the given IRQ number. Waiting on this handle will wait until the IRQ is triggered. The flags argument configures the triggering. If it is false, the IRQ is active HIGH level sensitive, if it is true it is rising-edge sensitive.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Flags was &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF201:&#039;&#039;&#039; IRQ above 0x3FF or outside the [[NPDM#Kernel_Access_Control|IRQ access mask]] was given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; A SlabHeap was exhausted (too many interrupts created).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF401:&#039;&#039;&#039; IRQ already has an event registered.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD201:&#039;&#039;&#039; The handle table is full. Try closing some handles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcQueryPhysicalAddress ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || KernelAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || u64 || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcQueryIoMapping ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R0 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1 || void* || VirtAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== svcCreateDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || u64 || StartAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R0, R1 || u64 || EndAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || AddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
dev_as_start_addr is normally set to 0 and dev_as_end_addr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== svcAttachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcDetachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceByForce ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R5, R6 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R7 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
dev_map_addr is the userspace destination address, while dev_as_addr is the source address between dev_as_start_addr and dev_as_end_addr (passed to [[#svcCreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|MapDeviceAllowed]] bit set. Bit [[SVC#MemoryAttribute|IsDeviceMapped]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceAligned ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R5, R6 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R7 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#svcMapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|MapDeviceAlignedAllowed]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R5, R6 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== svcContinueDebugEvent ==&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The process has been resumed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid debug handle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf401:&#039;&#039;&#039; Process has debug events queued or is already running.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 0 || TotalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 1 || TotalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 2 || TotalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 3 || TotalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 0 || CurrentMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 1 || CurrentMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 2 || CurrentMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 3 || CurrentMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 0 || PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 1 || PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetProcessMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R5 || void* || Perm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcQueryProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || [[#MemoryInfo]]* || MemInfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R1, R3 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#svcQueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R5, R6 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R5, R6 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcCreateProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessInfo]]* || InfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u32* || CapabilitiesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessInfo]] as input.&lt;br /&gt;
CapabilitiesPtr points to an array of [[NPDM#Kernel_Access_Control|kernel capabilities]].&lt;br /&gt;
CapabilitiesNum is a number of capabilities in the CapabilitiesPtr array (number of element, not number of bytes).&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Attempted to map more code pages than available in address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Provided CodeAddr is invalid (make sure it&#039;s in range?)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The resource handle passed is invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE601:&#039;&#039;&#039; Attempt to copy procinfo from user-supplied pointer failed. Attempt to copy capabilities_num from user-supplied pointer failed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE801:&#039;&#039;&#039; Attempted to create a 32-bit process with a 36-bit address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Unused bits are set in mmuflags. Unknown address space type used.&lt;br /&gt;
&lt;br /&gt;
== svcGetProcessInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R2 || [[#ProcessInfoType]] || InfoType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || [[#ProcessState]] || State&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== svcCallSecureMonitor ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || u64 || [[SMC#ID_0|Function ID]]&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1-X7 || R1-R3 || u64 || SMC sub-arguments&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0 || [[SMC#Errors|SMC Result]] || Result of SMC&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1-X7 || R1-R3 || u64 || SMC sub-output&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes in a SMC function ID in X0, and arguments for that SMC function in X1-X7.&lt;br /&gt;
&lt;br /&gt;
Passing an invalid SMC function ID or calling from a core other than core 3 will result in a secure monitor panic.&lt;br /&gt;
&lt;br /&gt;
The kernel parses bits 9-15 in the passed SMC function ID (per the ARM SMC calling convention), and when set uses as an indicator to translate a pointer in the associated register (X1-X7) to a physical address. The kernel will translate any address mapped as R-W, other addresses (R--, R-X, or invalid pointers) will be translated as 0/NULL.&lt;br /&gt;
&lt;br /&gt;
Output is returned raw from the Secure Monitor; X0 will be the untranslated SMC result and X1-X7 will contain other SMC output (or be unchanged, depending on the SMC).&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* svcBreakDebugProcess&lt;br /&gt;
* svcContinueDebugEvent&lt;br /&gt;
* svcWriteDebugProcessMemory&lt;br /&gt;
* svcSetDebugThreadContext&lt;br /&gt;
* svcTerminateDebugProcess&lt;br /&gt;
* svcSetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
svcDebugActiveProcess stops execution of the target process, the normal method for resuming it requires svcContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
== svcSetHardwareBreakPoint ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || u32 || hardware_breakpoint_id&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || u64 || flags&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || u64 || value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets one of the AArch64 hardware breakpoints. The nintendo switch has 6 hardware breakpoints, and 4 hardware watchpoints. The syscall has two behaviors depending on the value of hardware_breakpoint_id:&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id &amp;lt; 0x10, then it sets one of the AArch64 hardware breakpoints. Flags will go to DBGBCRn_EL1, and value to DBGBVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0x7F01E1. Furthermore, the kernel will or it with 0x4004, in order to set various security flags to guarantee the watchpoints only triggers for code in EL0. If the user asks for a Breakpoint Type of ContextIDR match, the kernel shall use the given debug_handle to set DBGBVRn_EL1 to the ContextID of the debugged process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id is between 0x10 and 0x20 (exclusive), then it sets one of the AArch64 hardware watchpoints. Flags will go to DBGWCRn_EL1, and the value to DBGWVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0xFF0F1FF9. Furthermore, the kernel will or it with 0x104004. This will set various security flags, and set the watchpoint type to be a Linked Watchpoint. This means that you need to link it to a Linked ContextIDR breakpoint. Check the ARM documentation for more information.&lt;br /&gt;
&lt;br /&gt;
Note that hardware_breakpoint_id 0 to 4 match only to Virtual Address, while hardware_breakpoint_id 5 and 6 match against either Virtual Address, ContextID, or VMID. As such, if you are configuring a breakpoint to link for a watchpoint, make sure you use hardware_breakpoint_id 5 or 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more documentation for hardware breakpoints, check out the AArch64 documentation for the [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488h/way1382455558968.html DBGBCRn_EL1 register] and the [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0488h/way1382455560629.html DBGWCRn_EL1 register]&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== ThreadContextFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || General-purpose registers || If in 64-bit mode, GPRs 0–28 will be read/written. If in 32-bit mode, GPRs 0–12 will be read/written.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || Control registers || Reads/writes the FP, LR, PC, SP, PSTATE, and TPIDR registers.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Floating-point registers || Reads/writes the floating-point vector registers.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || Floating-point control registers || Reads/writes the FPCR and FPSR registers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DeviceName_AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeviceName_AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceName_DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeviceName_DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeviceName_HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeviceName_HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || DeviceName_ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeviceName_MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || DeviceName_NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || DeviceName_NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DeviceName_PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || DeviceName_SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || DeviceName_VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DeviceName_VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || DeviceName_XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || DeviceName_XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DeviceName_TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DeviceName_PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DeviceName_DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || DeviceName_SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || DeviceName_SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || DeviceName_SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || DeviceName_SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || DeviceName_ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || DeviceName_GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || DeviceName_GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || DeviceName_PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeviceName_NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DeviceName_APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || DeviceName_SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || DeviceName_NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || DeviceName_HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || DeviceName_SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || DeviceName_AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || DeviceName_ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || DeviceName_TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || DeviceName_TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || DeviceName_TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || DeviceName_NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CodeMemoryOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CodeMemoryOperation_MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CodeMemoryOperation_MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CodeMemoryOperation_UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CodeMemoryOperation_UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Note&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LimitableResource_Memory || Bytes of memory a process may allocate.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LimitableResource_Threads || Amount of threads a process can create.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || LimitableResource_Events || Amount of events a process can create through svcCreateEvent or svcSendAsyncRequestWithUserBuffer.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LimitableResource_TransferMemories || Amount of TransferMemory a process can create through svcCreateTransferMemory.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LimitableResource_Sessions || Amount of session a process can create through svcCreateSession, svcConnectToPort or svcConnectToNamedPort.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessInfoType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ProcessState|ProcessInfoType_ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProcessState_Created ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProcessState_CreatedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ProcessState_Started ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ProcessState_Crashed || Processes will not enter this state unless they were created with [[#CreateProcessInfo|EnableDebug]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ProcessState_StartedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ProcessState_Exiting ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ProcessState_Exited ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ProcessState_DebugSuspended ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugThreadParam_DynamicPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugThreadParam_SchedulingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugThreadParam_PreferredCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugThreadParam_CurrentCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugThreadParam_AffinityMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dynamic priority: output in out2&lt;br /&gt;
&lt;br /&gt;
Scheduling status: out1 contains bit0: is debug-suspended, bit1: is user-suspended (svcSetThreadActivity 1 or svcSetProcessActivity 1).&lt;br /&gt;
Out2 contains {suspended, idle, running, terminating} =&amp;gt; {5, 0, 1, 4}&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_PreferredCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_CurrentCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_AffinityMask: output in out1&lt;br /&gt;
&lt;br /&gt;
== CreateProcessInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || Flags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || IsAarch64&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 || [2.0.0+] EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || IsApplication&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit7 || [4.0.0] UseSecureMemory&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit10-7 || [5.0.0+] PoolPartition (0=Application, 1=Applet, 2=Sysmodule, 3=Nvservices)&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit11 || [7.0.0+] OptimizeMemoryAllocation (Only allowed in combination with IsApplication).&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle or zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 || || [3.0.0+] SystemResourceNumPages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On [1.0.0] there&#039;s only one pool.&lt;br /&gt;
&lt;br /&gt;
On [2.0.0-4.0.0] PoolPartition is 1 for built-ins and 0 for rest.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] PoolPartition is specified in CreateProcessArgs. There are now 4 pool partitions.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] (maybe lower?) a zero ResourceLimitHandle defaults to sysmodule limits and 0x12300000 bytes of memory.&lt;br /&gt;
&lt;br /&gt;
The PersonalMmHeap are allocated as follows:&lt;br /&gt;
* For the application, normal insecure pool is used. Carveout 5 is used to provide protection.&lt;br /&gt;
* For the applet, a pre-allocated secure pool segment of size 0x400000 is used.&lt;br /&gt;
* For sysmodules, secure pool is allocated.&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Normal_32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal_36Bit || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || WithoutMap_32Bit || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] Normal_39Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || MemoryType: lower 8 bits of [[#MemoryState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || Permission (bit0: R, bit1: W, bit2: X)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsBorrowed || Used by MapMemory, as an async IPC user buffer, &lt;br /&gt;
|-&lt;br /&gt;
| 1 || IsIpcLocked || True when IpcRefCount &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
| 2 || IsDeviceShared || True when DeviceRefCount &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsUncached || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || Type || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#svcSetMemoryPermission|PermissionChangeAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ForceReadWritableByDebugSyscalls || Allows using [[#svcWriteDebugProcessMemory]] on segments mapped read-only.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IpcSendAllowed || Allows sending this region as an IPC A/B/W buffer with flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || NonDeviceIpcSendAllowed || Allows sending this region as an IPC A/B/W buffer with flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || NonSecureIpcSendAllowed || Allows sending this region as an IPC A/B/W buffer with flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#svcSetProcessMemoryPermission|ProcessPermissionChangeAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#svcMapMemory|MapAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#svcUnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#svcCreateTransferMemory|TransferMemoryAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#svcQueryPhysicalAddress|QueryPhysicalAddressAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || MapDeviceAllowed ([[#svcMapDeviceAddressSpace]] and [[#svcMapDeviceAddressSpaceByForce]]) ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#svcMapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#svcSendSyncRequestWithUserBuffer|IpcBufferAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || IsPoolAllocated/IsReferenceCounted || The physical memory blocks backing this region are refcounted.&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#svcMapProcessMemory|MapProcessAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#svcSetMemoryAttribute|AttributeChangeAllowed]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] [[#svcCreateCodeMemory|CodeMemoryAllowed]] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || MemoryType_Unmapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| MemoryType_Heap || Mapped using [[#svcSetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] MemoryType_Alias || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|MemoryType_Ipc]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || MemoryType_Stack || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || MemoryType_Reserved ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|MemoryType_NonSecureIpc]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|MemoryType_NonDeviceIpc]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] MemoryType_CodeReadOnly || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] MemoryType_CodeWritable || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArbitrationType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || WaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || DecrementAndWaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || WaitIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignalType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Signal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || SignalAndIncrementIfEqual&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlagsOld ==&lt;br /&gt;
[1.0.0-2.3.0]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: ResumeAllThreads or debug-suspended-thread-id needed)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
[3.0.0+]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: doesn&#039;t need to be set in the same call than Resume)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || DontCatchExceptions&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Resume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || IgnoreOtherThreadsExceptions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren&#039;t in the input list. The affected threads are resumed.&lt;br /&gt;
&lt;br /&gt;
Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.&lt;br /&gt;
&lt;br /&gt;
If the input number of threads is 0, this means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
&lt;br /&gt;
The below table is for the Aarch64 version of the system call. For A32, all u64 fields but title/process/thread id are actually u32, making the structure 0x28-byte-big (0x40 for a64).&lt;br /&gt;
&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32|| Type (0=PausedThread, 1=RunningThread, 2=ExitedProcess, 3=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugEvent_AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugEvent_AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugEvent_ExitProcess&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugEvent_ExitThread&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugEvent_Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Exception_Trap (*)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Exception_InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Exception_DataAbortMisc (**)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Exception_PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception_DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exception_BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exception_UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Exception_DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Exception_BadSvcId&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Exception_SError [not in 1.0.0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Undefined instructions, software breakpoints, some other traps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Data aborts, FP traps, and everything else that doesn&#039;t belong to any of the above.&lt;br /&gt;
&lt;br /&gt;
Trap specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
First of all, a function that might be called by synchronous exception handler and that is called by the SError handler fetches the exception info, adjusts PC, panics on exceptions taken from EL1, then dispatches the exception.&lt;br /&gt;
&lt;br /&gt;
The dispatcher has two mutually exclusive exception reporting methods:&lt;br /&gt;
* by storing information at the start of the process&#039;s TLS memregion (TPIDRRO_EL0) and jumping back to the crt0&lt;br /&gt;
* by using KDebug&lt;br /&gt;
&lt;br /&gt;
KDebug dispatching is used when at least one of the following conditions are met:&lt;br /&gt;
* SMC ConfigItem KernelMemConfig bit 1 is NOT set (it isn&#039;t on retail), unless: this is a software or hardware breakpoint, or a watchpoint, or [4.0.0+?] the process is attached and this is a Google PNaCl trap instruction (see LLVM source)&lt;br /&gt;
* FAR doesn&#039;t point to a valid address in mapped-readable CodeStatic memory (i.e. this is the case for NRO and JIT memory) or this is one of the following exceptions (it particular, that doesn&#039;t include FP exceptions occurring in CodeStatic memory):&lt;br /&gt;
** Uncategorized&lt;br /&gt;
** IllegalState&lt;br /&gt;
** SupervisorCallA32&lt;br /&gt;
** SupervisorCallA64&lt;br /&gt;
** PCAlignment&lt;br /&gt;
** SPAlignment&lt;br /&gt;
** SError&lt;br /&gt;
** BreakpointLowerEl&lt;br /&gt;
** SoftwareStepLowerEl (note: no way set single-step flag; not parsed)&lt;br /&gt;
** WatchpointLowerEl&lt;br /&gt;
** SoftwareBreakpointA32 (note: not parsed)&lt;br /&gt;
** SoftwareBreakpointA64 (note: not parsed)&lt;br /&gt;
    &lt;br /&gt;
In all other cases the userland-handled exception path is taken.&lt;br /&gt;
&lt;br /&gt;
KDebug path:&lt;br /&gt;
&lt;br /&gt;
If the process is attached, the exception is reported to the KDebug. If the thread was continued using flag IgnoreExceptions, it returns from the exception as if nothing happened.&lt;br /&gt;
&lt;br /&gt;
If the latter is not the case, or if the process isn&#039;t attached, proceed to [2.0.0+] crash reporting (or in [1.0.0] just terminate the process): &lt;br /&gt;
if EnableDebug is set, and depending on the process state (more than one crash per process isn&#039;t permitted) it may signal itself with ProcessState_Crashed so that PM asks NS to start creport so that creport attaches to it and reports the crashes. Otherwise, just terminate.&lt;br /&gt;
&lt;br /&gt;
Userland reporting path and svcReturnFromException:&lt;br /&gt;
&lt;br /&gt;
TLS region start (A64):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x148 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x78 || ExceptionFrameA64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA64:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x48 (8*9) || GPRs 0..8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x8 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || pstate &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 0x8 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TLS region start (A32):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x178 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x44 || ExceptionFrameA32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA32:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 (8*4) || GPRs 0..7.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || tpidr_el0 = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || cpsr &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In that case, after storing the regs in the TLS, the exception handler returns to the application&#039;s crt0 (entrypoint), with X0=&amp;lt;error description code&amp;gt; (see below) and X1=SP=frame=&amp;lt;stack top&amp;gt; (see above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Desc. code || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || Instruction abort&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || Misaligned PC&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || Misaligned SP&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || SError [not in 1.0.0?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || Bad SVC&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || Uncategorized, CP15RTTrap, CP15RRTTrap, CP14RTTrap, CP14RRTTrap, IllegalState, SystemRegisterTrap&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || None of the above, EC &amp;lt;= 0x34 and not a breakpoint&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(During normal app boot the process is invoked with X0=0 and X1=main_thread_handle. The crt0 of retail apps determines whether to boot normally or handle an exception if X0 is set to 0 or not)&lt;br /&gt;
&lt;br /&gt;
The application is supposed to promptly update the contents of elr_el1 to a user handler (and any other regs it sees fit) and call svcReturnFromException (error code) to call that handler. The latter is then expected to promptly abort the program.&lt;br /&gt;
&lt;br /&gt;
svcReturnFromException updates the contents of the kernel stack frame with what the user provided in the TLS structure, sets TPIDR_EL0 to 1, then:&lt;br /&gt;
* if the provided error code is 0, gracefully pivots and returns from exception&lt;br /&gt;
* if it is not, replays the exception and pass it to the KDebug (see above). One can pass 0x10001 to prevent process termination. If the process is attached, this also prevents crash-collection/termination (different from the exception handler behavior)&lt;br /&gt;
&lt;br /&gt;
If an exception occurs from the above user handler, the entire exception handling process will repeat with the new exception.&lt;br /&gt;
&lt;br /&gt;
Note that if a thread that wasn&#039;t faulting calls svcReturnFromException, it signals an &amp;quot;invalid syscall&amp;quot; exception&lt;br /&gt;
&lt;br /&gt;
Note that [[SMC|IsDebugMode]] is not used during exception-handling, except for enabling printing a message to UART-A. This UART code causes a system-hang on retail (likely due to a loop that doesn&#039;t exit). This printing doesn&#039;t seem to run when the process is attached for debugging?&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=6184</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=6184"/>
		<updated>2019-02-05T09:13:22Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* CreateProcessInfo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || [[#svcSetHeapSize]] || W1=size || W0=result, X1=outaddr&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || [[#svcSetMemoryPermission]] || X0=addr, X1=size, W2=prot || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || [[#svcSetMemoryAttribute]] || X0=addr, X1=size, W2=state0, W3=state1 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || [[#svcMapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || [[#svcUnmapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || [[#svcQueryMemory]] || X0=MemoryInfo*, X2=addr || W0=result, W1=PageInfo                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || [[#svcExitProcess]] || None ||&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || [[#svcCreateThread]] || X1=entry, X2=thread_context, X3=stacktop, W4=prio, W5=processor_id  || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || [[#svcStartThread]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || [[#svcExitThread]] || None ||                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0xB || [[#svcSleepThread]] || X0=nano ||&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || [[#svcGetThreadPriority]] || W1=thread_handle || W0=result, W1=prio&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || [[#svcSetThreadPriority]] || W0=thread_handle, W1=prio || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || [[#svcGetThreadCoreMask]] || W2=thread_handle || W0=result, W1=out, X2=out&lt;br /&gt;
|-&lt;br /&gt;
|  0xF || [[#svcSetThreadCoreMask]] || W0=thread_handle, W1=in, X2=in2 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#svcGetCurrentProcessorNumber]] || None || W0/X0=cpuid&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || svcSignalEvent || W0=wevent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || svcClearEvent || W0=wevent_or_revent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || [[#svcMapSharedMemory]] || W0=shmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || svcUnmapSharedMemory || W0=shmem_handle, X1=addr, X2=size || W0=result                                                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || [[#svcCreateTransferMemory]] || X1=addr, X2=size, W3=perm || W0=result, W1=tmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || svcCloseHandle || W0=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || svcResetSignal || W0=revent_or_process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles. X3=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || [[#svcCancelSynchronization]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle ||                                     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || svcArbitrateUnlock || X0=ptr ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || svcWaitProcessWideKeyAtomic || X0=ptr0, X1=ptr, W2=thread_handle, X3=timeout || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || svcSignalProcessWideKey || X0=ptr, W1=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[#svcGetSystemTick]] || None || X0={value of cntpct_el0}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || svcConnectToNamedPort || X1=port_name_str || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || svcSendSyncRequestLight || W0=light_session_handle, X1=? || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || svcSendSyncRequest || X0=normal_session_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || [[#svcSendSyncRequestWithUserBuffer]] || X0=cmdbufptr, X1=size, X2=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || svcSendAsyncRequestWithUserBuffer || X1=cmdbufptr, X2=size, X3=handle || W0=result, W1=revent_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || svcGetProcessId || W1=thread_or_process_or_debug_handle || W0=result, X1=pid&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || svcGetThreadId || W1=thread_handle || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[#svcBreak]] || X0=break_reason,X1,X2=info || W0=result = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || svcOutputDebugString || X0=str, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || svcReturnFromException || X0=result || &lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || [[#svcGetInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || svcFlushEntireDataCache || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [3.0.0+] [[#svcMapPhysicalMemory]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || [3.0.0+] svcUnmapPhysicalMemory || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || [5.0.0+] svcGetFutureThreadInfo || X3=timeout || W0=result, bunch of crap&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || svcGetLastThreadInfo || None || W0=result, W1,W2,W3,W4=unk, W5=truncated_u64, W6=bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || svcGetResourceLimitLimitValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || svcGetResourceLimitCurrentValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || svcSetThreadActivity || W0=thread_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || svcGetThreadContext3 || X0=[[#ThreadContext]]*, W1=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [4.0.0+] svcWaitForAddress || X0=ptr, W1=[[#ArbitrationType]], X2=value X3=timeout ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || [4.0.0+] svcSignalToAddress || X0=ptr, W1=[[#SignalType]], X2=value W3=num_to_signal ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x3C || [[#svcDumpInfo]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || [4.0.0+] svcDumpInfoNew || ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || svcCreateSession || W2=is_light, X3=? || W0=result, W1=server_handle, W2=client_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || [[#svcAcceptSession]] || W1=port_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || [[#svcReplyAndReceive]] || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || svcCreateEvent || None || W0=result, W1=wevent_handle, W2=revent_handle&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x48 || [5.0.0+] [[#svcMapPhysicalMemoryUnsafe]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || [5.0.0+] svcUnmapPhysicalMemoryUnsafe || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || [5.0.0+] svcSetUnsafeLimit || X0=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || [4.0.0+] [[#svcCreateCodeMemory]] || X1=addr, X2=size || W0=result, W1=code_memory_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || [4.0.0+] [[#svcControlCodeMemory]] || W0=code_memory_handle, W1=[[#CodeMemoryOperation]], X2=dstaddr, X3=size, W4=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || svcSleepSystem || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || [[#svcReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val || W0=result, W1=out_val&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || svcSetProcessActivity || W0=process_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#svcCreateSharedMemory]] || W1=size, W2=myperm, W3=otherperm || W0=result, W1=shmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || [[#svcMapTransferMemory]] || X0=tmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || [[#svcUnmapTransferMemory]] || W0=tmemhandle, X1=addr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || [[#svcCreateInterruptEvent]] || X1=irq_num, W2=flag || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || [[#svcQueryPhysicalAddress]] || X1=addr || W0=result, X1=physaddr, X2=kerneladdr, X3=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || [[#svcQueryIoMapping]] || X1=physaddr, X2=size || W0=result, X1=virtaddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || [[#svcCreateDeviceAddressSpace]] || X1=dev_as_start_addr, X2=dev_as_end_addr || W0=result, W1=dev_as_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || [[#svcAttachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || [[#svcDetachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || [[#svcMapDeviceAddressSpaceByForce]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || [[#svcMapDeviceAddressSpaceAligned]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || svcMapDeviceAddressSpace || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || [[#svcUnmapDeviceAddressSpace]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || svcInvalidateProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || svcStoreProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || svcFlushProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || svcDebugActiveProcess || X1=pid || W0=result, W1=debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || svcBreakDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || svcTerminateDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || svcGetDebugEvent || X0=[[#DebugEventInfo]]*, W1=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || [[#svcContinueDebugEvent]] || [1.0.0-2.3.0] W0=debug_handle, W1=[[#ContinueDebugFlagsOld]], X2=thread_id &lt;br /&gt;
[3.0.0+] W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id_list(u64 *), W3=num_tids (max 64, 0 means &amp;quot;all threads&amp;quot;)&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out &lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || svcGetThreadList || X1=tids_out_ptr, W2=max_out, W3=debug_handle_or_zero || W0=result, X1=num_out&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || svcGetDebugThreadContext || X0=ThreadContext*, X1=debug_handle, X2=thread_id, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || svcSetDebugThreadContext || W0=debug_handle, X1=thread_id, X2=ThreadContext*, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || svcQueryDebugProcessMemory || X0=[[#MemoryInfo]]*, X2=debug_handle, X3=addr || W0=result, W1=PageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || svcReadDebugProcessMemory || X0=buffer*, X1=debug_handle, X2=src_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || svcWriteDebugProcessMemory || X0=debug_handle, X1=buffer*, X2=dst_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || [[#svcSetHardwareBreakPoint]] || W0=HardwareBreakpointId, X1=watchpoint_flags/breakpoint_flags, X2=watchpoint_value/debug_handle || &lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || svcGetDebugThreadParam || X2=debug_handle, X3=thread_id, W4=[[#DebugThreadParam]] || W0=result, X1=out0, W2=out1&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x6F || [5.0.0+] [[#svcGetSystemInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || svcCreatePort || W2=max_sessions, W3=is_light, X4=name_ptr || W0=result, W1=clientport_handle, W2=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || svcManageNamedPort || X1=name_ptr, W2=max_sessions || W0=result, W1=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || svcConnectToPort || W1=clientport_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || [[#svcSetProcessMemoryPermission]] || W0=process_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || [[#svcMapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || [[#svcUnmapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || [[#svcQueryProcessMemory]] || X0=meminfo_ptr, W2=process_handle, X3=addr || W0=result, W1=pageinfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || [[#svcMapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#svcUnmapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || [[#svcCreateProcess]] || X1=procinfo_ptr, X2=caps_ptr, W3=cap_num ||  W0=result, W1=process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || svcStartProcess || W0=process_handle, W1=main_thread_prio, W2=default_cpuid, W3=main_thread_stacksz || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || svcTerminateProcess || W0=process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || [[#svcGetProcessInfo]] || W0=process_handle, W1=[[#ProcessInfoType]] || W0=result, X1=[[#ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || svcCreateResourceLimit || None || W0=result, W1=reslimit_handle &lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || svcCallSecureMonitor || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args || X0,X1,X2,X3,X4,X5,X6,X7=result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || OutAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000 (2MB).&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d) is written to OutAddr.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than or equal to 4GB.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || Prot&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryAttribute ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || State0&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u32 || State1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change attribute of page-aligned memory region. &lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! State0 || State1 || Action&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Set bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0] This could be used to map into either the Alias Region or the Stack region.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This can only be used to map into the Stack region.&lt;br /&gt;
&lt;br /&gt;
Code can get the range of the Alias region from [[#svcGetInfo]] id0=2,3, and on 2.0.0+ the range of the Stack region via [[#svcGetInfo]] id0=14, 15 (on 1.0.0, the Stack region had hardcoded limits).&lt;br /&gt;
&lt;br /&gt;
When mapped into the Alias region, the mapped memory will have state 0x482907.&lt;br /&gt;
&lt;br /&gt;
When mapped into the Stack region, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps a region that was previously mapped with [[#svcMapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== svcQueryMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Query information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== svcExitProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== svcCreateThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || u32 || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Create a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
Processor_id must be 0,1,2,3 or -2, where -2 uses the default cpuid for process.&lt;br /&gt;
&lt;br /&gt;
== svcStartThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== svcExitThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== svcSleepThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || s64 || Nanoseconds&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Sleep for a specified amount of time, or yield thread.&lt;br /&gt;
&lt;br /&gt;
Setting nanoseconds to 0, -1, or -2 indicates a yielding type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Yielding without core migration&lt;br /&gt;
|-&lt;br /&gt;
| -1 || Yielding with core migration&lt;br /&gt;
|-&lt;br /&gt;
| -2 || Yielding to any other thread&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u32 || In0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || In1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetCurrentProcessorNumber ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0/X0 || u64 || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
Cpu-id is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== svcMapSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== svcCreateTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== svcWaitSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Works with num_handles &amp;lt;= 0x40.&lt;br /&gt;
&lt;br /&gt;
When zero handles are passed, this will wait forever until either timeout or cancellation occurs.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KDebug:&#039;&#039;&#039; signals when there is a new [[#DebugEventInfo|DebugEvent]] (retrievable via [[#svcGetDebugEvent]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KClientPort:&#039;&#039;&#039; signals when the number of sessions is less than the maximum allowed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KProcess:&#039;&#039;&#039; signals when the process undergoes a state change (retrievable via [[#svcGetProcessInfo]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KReadableEvent:&#039;&#039;&#039; signals when the event&#039;s corresponding KWritableEvent has been signaled via svcSignalEvent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerPort:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#svcAcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerSession:&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#svcReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KThread:&#039;&#039;&#039; signals when the thread has exited.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signaled before the timeout expired, or one of the objects is a Session with a closed remote. Handle index is updated to indicate which object signaled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x7601:&#039;&#039;&#039; Thread termination requested. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; Invalid address. Returned when the handles pointer is not a readable address. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signaled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xec01:&#039;&#039;&#039; Interrupted. Returned when another thread uses [[#svcCancelSynchronization]] to cancel this thread. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; Too many handles. Returned when the number of handles passed is &amp;gt; 0x40.&lt;br /&gt;
&lt;br /&gt;
== svcCancelSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the referenced thread is currently in a synchronization call ([[#svcWaitSynchronization]], [[#svcReplyAndReceive]] or [[#svcReplyAndReceiveLight]]), that call will be interrupted and return 0xec01.&lt;br /&gt;
If that thread is not currently executing such a synchronization call, the next call to a synchronization call will return 0xec01.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t take force-pause (activity/debug pause) into account.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The thread was either interrupted or has had its flag set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. The handle given was either invalid or not a thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemTick ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || u64 || Ticks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the value of cntpct_el0.&lt;br /&gt;
&lt;br /&gt;
The frequency is 19200000 Hz (constant from official sw).&lt;br /&gt;
&lt;br /&gt;
Official sw reads cntpct_el0 directly from usermode without using this SVC. [[ExeFS|sdk-nso]] has this SVC, but it&#039;s not known to be called anywhere.&lt;br /&gt;
&lt;br /&gt;
== svcSendSyncRequestWithUserBuffer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || CmdPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and CmdPtr must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xcc01:&#039;&#039;&#039; CmdPtr is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xca01:&#039;&#039;&#039; Size is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xce01:&#039;&#039;&#039; KSessionRequest allocation failed (unlikely) or pointer buffer size exceeded.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Handles does not exist, or handle is not an instance of KClientSession.&lt;br /&gt;
&lt;br /&gt;
== svcBreak ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Break Reason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || Result || 0 (Success)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the process is attached, report the Break event. Then, if svcContinueDebugEvent didn&#039;t apply IgnoreException on the thread: if TPIDR_EL0 is 0, adjust ELR_EL1 to retry to svc instruction (and set TPIDR_EL0 to 1).&lt;br /&gt;
&lt;br /&gt;
Otherwise, if bit31 in reason isn&#039;t set, perform crash reporting (see Exception Handling section below), if it doesn&#039;t terminate the process adjust ELR_EL1 as well.&lt;br /&gt;
&lt;br /&gt;
Otherwise just return 0.&lt;br /&gt;
&lt;br /&gt;
== svcGetInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || AliasRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || AliasRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemoryAvailable. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || TotalMemoryUsage. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || IsCurrentProcessBeingDebugged&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || Returns ResourceLimit handle for current process. Used by [[Process_Manager_services|PM]].&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy from current process. TRNG. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AddressSpaceBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] StackRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] StackRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] PersonalMmHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] PersonalMmHeapUsage&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] TitleId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0-4.1.0] PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0-4.1.0] PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Process || 20 || 0 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 21 || 0 || [6.0.0+] TotalMemoryAvailableWithoutMmHeap&lt;br /&gt;
|-&lt;br /&gt;
| Process || 22 || 0 || [6.0.0+] TotalMemoryUsedWithoutMmHeap&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 0xF0000002 || 0 || Scheduler related.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemory ==&lt;br /&gt;
This is like svcSetHeapSize except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcDumpInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Does nothing, just returns with registers set to all-zero.&lt;br /&gt;
&lt;br /&gt;
== svcAcceptSession ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || Port&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || Session&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== svcReplyAndReceive ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || *Handle&amp;lt;Port or ServerSession&amp;gt; || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTarget&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 (nanoseconds) || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is zero, the TLS should contain a blank message. If this message has a C descriptor, the buffer it points to will be used as the pointer buffer. See [[IPC_Marshalling#IPC_buffers]]. Note that a pointer buffer cannot be specified if ReplyTarget is not zero.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemoryUnsafe ==&lt;br /&gt;
Same as [[#svcMapPhysicalMemory]] except it always uses pool partition 0.&lt;br /&gt;
&lt;br /&gt;
== svcCreateCodeMemory ==&lt;br /&gt;
Takes an address range with backing memory to create the code memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== svcControlCodeMemory ==&lt;br /&gt;
Maps the backing memory for a Code memory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#CodeMemoryOperation|CodeMemoryOperation_UnmapOwner/CodeMemoryOperation_UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the code memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Error 0xE401 is now returned when the process owner of the Code memory object is the same as the current process.&lt;br /&gt;
&lt;br /&gt;
== svcReadWriteRegister ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || RegAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u64 || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1|| u64 || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by smcReadWriteRegister (checked in addition to the whitelist in svcReadWriteRegister), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== svcCreateSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || LocalPerm&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || RemotePerm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
Allocates memory from the current process&#039; pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcMapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The newly mapped pages will have [[#MemoryState]] type 0xE.&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in svcCreateMemoryMirror, otherwise error.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcCreateInterruptEvent ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || IrqNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || bool || Flags&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an event handle for the given IRQ number. Waiting on this handle will wait until the IRQ is triggered. The flags argument configures the triggering. If it is false, the IRQ is active HIGH level sensitive, if it is true it is rising-edge sensitive.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Flags was &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF201:&#039;&#039;&#039; IRQ above 0x3FF or outside the [[NPDM#Kernel_Access_Control|IRQ access mask]] was given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; A SlabHeap was exhausted (too many interrupts created).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF401:&#039;&#039;&#039; IRQ already has an event registered.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD201:&#039;&#039;&#039; The handle table is full. Try closing some handles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcQueryPhysicalAddress ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || KernelAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || u64 || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcQueryIoMapping ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || void* || VirtAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== svcCreateDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || StartAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || EndAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || AddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
dev_as_start_addr is normally set to 0 and dev_as_end_addr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== svcAttachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcDetachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceByForce ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
dev_map_addr is the userspace destination address, while dev_as_addr is the source address between dev_as_start_addr and dev_as_end_addr (passed to [[#svcCreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|MapDeviceAllowed]] bit set. Bit [[SVC#MemoryAttribute|IsDeviceMapped]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceAligned ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#svcMapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|MapDeviceAlignedAllowed]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== svcContinueDebugEvent ==&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The process has been resumed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid debug handle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf401:&#039;&#039;&#039; Process has debug events queued.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 0 || TotalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 1 || TotalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 2 || TotalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 3 || TotalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 0 || CurrentMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 1 || CurrentMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 2 || CurrentMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 3 || CurrentMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 0 || PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 1 || PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetProcessMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || void* || Perm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcQueryProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#svcQueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcCreateProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessInfo]]* || InfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u32* || CapabilitiesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessInfo]] as input.&lt;br /&gt;
CapabilitiesPtr points to an array of [[NPDM#Kernel_Access_Control|kernel capabilities]].&lt;br /&gt;
CapabilitiesNum is a number of capabilities in the CapabilitiesPtr array (number of element, not number of bytes).&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Attempted to map more code pages than available in address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Provided CodeAddr is invalid (make sure it&#039;s in range?)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The resource handle passed is invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE601:&#039;&#039;&#039; Attempt to copy procinfo from user-supplied pointer failed. Attempt to copy capabilities_num from user-supplied pointer failed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE801:&#039;&#039;&#039; Attempted to create a 32-bit process with a 36-bit address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Unused bits are set in mmuflags. Unknown address space type used.&lt;br /&gt;
&lt;br /&gt;
== svcGetProcessInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#ProcessState]] || State&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* svcBreakDebugProcess&lt;br /&gt;
* svcContinueDebugEvent&lt;br /&gt;
* svcWriteDebugProcessMemory&lt;br /&gt;
* svcSetDebugThreadContext&lt;br /&gt;
* svcTerminateDebugProcess&lt;br /&gt;
* svcSetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
svcDebugActiveProcess stops execution of the target process, the normal method for resuming it requires svcContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
== svcSetHardwareBreakPoint ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || u32 || hardware_breakpoint_id&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || flags&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets one of the AArch64 hardware breakpoints. The nintendo switch has 6 hardware breakpoints, and 4 hardware watchpoints. The syscall has two behaviors depending on the value of hardware_breakpoint_id:&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id &amp;lt; 0x10, then it sets one of the AArch64 hardware breakpoints. Flags will go to DBGBCRn_EL1, and value to DBGBVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0x7F01E1. Furthermore, the kernel will or it with 0x4004, in order to set various security flags to guarantee the watchpoints only triggers for code in EL0. If the user asks for a Breakpoint Type of ContextIDR match, the kernel shall use the given debug_handle to set DBGBVRn_EL1 to the ContextID of the debugged process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id is between 0x10 and 0x20 (exclusive), then it sets one of the AArch64 hardware watchpoints. Flags will go to DBGWCRn_EL1, and the value to DBGWVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0xFF0F1FF9. Furthermore, the kernel will or it with 0x104004. This will set various security flags, and set the watchpoint type to be a Linked Watchpoint. This means that you need to link it to a Linked ContextIDR breakpoint. Check the ARM documentation for more information.&lt;br /&gt;
&lt;br /&gt;
Note that hardware_breakpoint_id 0 to 4 match only to Virtual Address, while hardware_breakpoint_id 5 and 6 match against either Virtual Address, ContextID, or VMID. As such, if you are configuring a breakpoint to link for a watchpoint, make sure you use hardware_breakpoint_id 5 or 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more documentation for hardware breakpoints, check out the AArch64 documentation for the [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488h/way1382455558968.html DBGBCRn_EL1 register] and the [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0488h/way1382455560629.html DBGWCRn_EL1 register]&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== ThreadContextRequestFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || NormalContext&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DeviceName_AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeviceName_AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceName_DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeviceName_DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeviceName_HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeviceName_HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || DeviceName_ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeviceName_MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || DeviceName_NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || DeviceName_NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DeviceName_PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || DeviceName_SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || DeviceName_VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DeviceName_VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || DeviceName_XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || DeviceName_XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DeviceName_TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DeviceName_PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DeviceName_DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || DeviceName_SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || DeviceName_SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || DeviceName_SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || DeviceName_SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || DeviceName_ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || DeviceName_GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || DeviceName_GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || DeviceName_PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeviceName_NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DeviceName_APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || DeviceName_SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || DeviceName_NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || DeviceName_HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || DeviceName_SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || DeviceName_AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || DeviceName_ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || DeviceName_TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || DeviceName_TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || DeviceName_TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || DeviceName_NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CodeMemoryOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CodeMemoryOperation_MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CodeMemoryOperation_MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CodeMemoryOperation_UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CodeMemoryOperation_UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LimitableResource_Memory&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LimitableResource_Threads&lt;br /&gt;
|-&lt;br /&gt;
| 2 || LimitableResource_Events&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LimitableResource_TransferMemories&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LimitableResource_Sessions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessInfoType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ProcessState|ProcessInfoType_ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProcessState_Created ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProcessState_CreatedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ProcessState_Started ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ProcessState_Crashed || Processes will not enter this state unless they were created with [[#CreateProcessInfo|EnableDebug]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ProcessState_StartedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ProcessState_Exiting ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ProcessState_Exited ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ProcessState_DebugSuspended ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugThreadParam_DynamicPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugThreadParam_SchedulingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugThreadParam_PreferredCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugThreadParam_CurrentCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugThreadParam_AffinityMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dynamic priority: output in out2&lt;br /&gt;
&lt;br /&gt;
Scheduling status: out1 contains bit0: is debug-suspended, bit1: is user-suspended (svcSetThreadActivity 1 or svcSetProcessActivity 1).&lt;br /&gt;
Out2 contains {suspended, idle, running, terminating} =&amp;gt; {5, 0, 1, 4}&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_PreferredCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_CurrentCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_AffinityMask: output in out1&lt;br /&gt;
&lt;br /&gt;
== CreateProcessInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || IsAarch64&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 || [2.0.0+] EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || UseSystemMemBlocks&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit7 || [4.0.0] ?&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit10-7 || [5.0.0+] PoolPartition (0=Application, 1=Applet, 2=Sysmodule, 3=Nvservices)&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit11 || [7.0.0+] Only allowed in combination with bit6.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle or zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 || || [3.0.0+] PersonalMmHeapNumPages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On [1.0.0] there&#039;s only one pool.&lt;br /&gt;
&lt;br /&gt;
On [2.0.0-4.0.0] PoolPartition is 1 for built-ins and 0 for rest.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] PoolPartition is specified in CreateProcessArgs. There are now 4 pool partitions.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] (maybe lower?) a zero ResourceLimitHandle defaults to sysmodule limits and 0x12300000 bytes of memory.&lt;br /&gt;
&lt;br /&gt;
The PersonalMmHeap are allocated as follows:&lt;br /&gt;
* For the application, normal insecure pool is used. Carveout 5 is used to provide protection.&lt;br /&gt;
* For the applet, a pre-allocated secure pool segment of size 0x400000 is used.&lt;br /&gt;
* For sysmodules, secure pool is allocated.&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Normal_32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal_36Bit || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || WithoutMap_32Bit || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] Normal_39Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || MemoryType: lower 8 bits of [[#MemoryState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || Permission (bit0: R, bit1: W, bit2: X)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsBorrowed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IsIpcMapped: when IpcRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || IsDeviceMapped: when DeviceRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsUncached&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || Type&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#svcSetMemoryPermission|PermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ForceReadWritableByDebugSyscalls&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IpcSendAllowed_Type0&lt;br /&gt;
|-&lt;br /&gt;
| 11 || IpcSendAllowed_Type3&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IpcSendAllowed_Type1&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#svcSetProcessMemoryPermission|ProcessPermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#svcMapMemory|MapAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#svcUnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#svcCreateTransferMemory|TransferMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#svcQueryPhysicalAddress|QueryPhysicalAddressAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || MapDeviceAllowed ([[#svcMapDeviceAddressSpace]] and [[#svcMapDeviceAddressSpaceByForce]])&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#svcMapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#svcSendSyncRequestWithUserBuffer|IpcBufferAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || IsPoolAllocated/IsReferenceCounted&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#svcMapProcessMemory|MapProcessAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#svcSetMemoryAttribute|AttributeChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] CodeMemoryAllowed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || MemoryType_Unmapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| MemoryType_Heap || Mapped using [[#svcSetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] MemoryType_Alias || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|MemoryType_IpcBuffer0]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || MemoryType_Stack || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || MemoryType_Reserved ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|MemoryType_IpcBuffer1]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|MemoryType_IpcBuffer3]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] MemoryType_CodeReadOnly || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] MemoryType_CodeWritable || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArbitrationType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || WaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || DecrementAndWaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || WaitIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignalType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Signal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || SignalAndIncrementIfEqual&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlagsOld ==&lt;br /&gt;
[1.0.0-2.3.0]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: ResumeAllThreads or debug-suspended-thread-id needed)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
[3.0.0+]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: doesn&#039;t need to be set in the same call than Resume)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || DontCatchExceptions&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Resume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || IgnoreOtherThreadsExceptions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren&#039;t in the input list. The affected threads are resumed.&lt;br /&gt;
&lt;br /&gt;
Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.&lt;br /&gt;
&lt;br /&gt;
If the input number of threads is 0, this means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
&lt;br /&gt;
The below table is for the Aarch64 version of the system call. For A32, all u64 fields but title/process/thread id are actually u32, making the structure 0x28-byte-big (0x40 for a64).&lt;br /&gt;
&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32|| Type (0=PausedThread, 1=RunningThread, 2=ExitedProcess, 3=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugEvent_AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugEvent_AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugEvent_ExitProcess&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugEvent_ExitThread&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugEvent_Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Exception_Trap (*)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Exception_InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Exception_DataAbortMisc (**)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Exception_PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception_DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exception_BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exception_UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Exception_DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Exception_BadSvcId&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Exception_SError [not in 1.0.0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Undefined instructions, software breakpoints, some other traps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Data aborts, FP traps, and everything else that doesn&#039;t belong to any of the above.&lt;br /&gt;
&lt;br /&gt;
Trap specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
First of all, a function that might be called by synchronous exception handler and that is called by the SError handler fetches the exception info, adjusts PC, panics on exceptions taken from EL1, then dispatches the exception.&lt;br /&gt;
&lt;br /&gt;
The dispatcher has two mutually exclusive exception reporting methods:&lt;br /&gt;
* by storing information at the start of the process&#039;s TLS memregion (TPIDRRO_EL0) and jumping back to the crt0&lt;br /&gt;
* by using KDebug&lt;br /&gt;
&lt;br /&gt;
KDebug dispatching is used when at least one of the following conditions are met:&lt;br /&gt;
* SMC ConfigItem KernelMemConfig bit 1 is NOT set (it isn&#039;t on retail), unless: this is a software or hardware breakpoint, or a watchpoint, or [4.0.0+?] the process is attached and this is a Google PNaCl trap instruction (see LLVM source)&lt;br /&gt;
* FAR doesn&#039;t point to a valid address in mapped-readable CodeStatic memory (i.e. this is the case for NRO and JIT memory) or this is one of the following exceptions (it particular, that doesn&#039;t include FP exceptions occurring in CodeStatic memory):&lt;br /&gt;
** Uncategorized&lt;br /&gt;
** IllegalState&lt;br /&gt;
** SupervisorCallA32&lt;br /&gt;
** SupervisorCallA64&lt;br /&gt;
** PCAlignment&lt;br /&gt;
** SPAlignment&lt;br /&gt;
** SError&lt;br /&gt;
** BreakpointLowerEl&lt;br /&gt;
** SoftwareStepLowerEl (note: no way set single-step flag; not parsed)&lt;br /&gt;
** WatchpointLowerEl&lt;br /&gt;
** SoftwareBreakpointA32 (note: not parsed)&lt;br /&gt;
** SoftwareBreakpointA64 (note: not parsed)&lt;br /&gt;
    &lt;br /&gt;
In all other cases the userland-handled exception path is taken.&lt;br /&gt;
&lt;br /&gt;
KDebug path:&lt;br /&gt;
&lt;br /&gt;
If the process is attached, the exception is reported to the KDebug. If the thread was continued using flag IgnoreExceptions, it returns from the exception as if nothing happened.&lt;br /&gt;
&lt;br /&gt;
If the latter is not the case, or if the process isn&#039;t attached, proceed to [2.0.0+] crash reporting (or in [1.0.0] just terminate the process): &lt;br /&gt;
if EnableDebug is set, and depending on the process state (more than one crash per process isn&#039;t permitted) it may signal itself with ProcessState_Crashed so that PM asks NS to start creport so that creport attaches to it and reports the crashes. Otherwise, just terminate.&lt;br /&gt;
&lt;br /&gt;
Userland reporting path and svcReturnFromException:&lt;br /&gt;
&lt;br /&gt;
TLS region start (A64):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x148 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x78 || ExceptionFrameA64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA64:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x48 (8*9) || GPRs 0..8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x8 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || pstate &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 0x8 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TLS region start (A32):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x178 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x44 || ExceptionFrameA32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA32:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 (8*4) || GPRs 0..7.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || tpidr_el0 = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || cpsr &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In that case, after storing the regs in the TLS, the exception handler returns to the application&#039;s crt0 (entrypoint), with X0=&amp;lt;error description code&amp;gt; (see below) and X1=SP=frame=&amp;lt;stack top&amp;gt; (see above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Desc. code || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || Instruction abort&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || Misaligned PC&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || Misaligned SP&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || SError [not in 1.0.0?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || Bad SVC&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || Uncategorized, CP15RTTrap, CP15RRTTrap, CP14RTTrap, CP14RRTTrap, IllegalState, SystemRegisterTrap&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || None of the above, EC &amp;lt;= 0x34 and not a breakpoint&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(During normal app boot the process is invoked with X0=0 and X1=main_thread_handle. The crt0 of retail apps determines whether to boot normally or handle an exception if X0 is set to 0 or not)&lt;br /&gt;
&lt;br /&gt;
The application is supposed to promptly update the contents of elr_el1 to a user handler (and any other regs it sees fit) and call svcReturnFromException (error code) to call that handler. The latter is then expected to promptly abort the program.&lt;br /&gt;
&lt;br /&gt;
svcReturnFromException updates the contents of the kernel stack frame with what the user provided in the TLS structure, sets TPIDR_EL0 to 1, then:&lt;br /&gt;
* if the provided error code is 0, gracefully pivots and returns from exception&lt;br /&gt;
* if it is not, replays the exception and pass it to the KDebug (see above). One can pass 0x10001 to prevent process termination. If the process is attached, this also prevents crash-collection/termination (different from the exception handler behavior)&lt;br /&gt;
&lt;br /&gt;
If an exception occurs from the above user handler, the entire exception handling process will repeat with the new exception.&lt;br /&gt;
&lt;br /&gt;
Note that if a thread that wasn&#039;t faulting calls svcReturnFromException, it signals an &amp;quot;invalid syscall&amp;quot; exception&lt;br /&gt;
&lt;br /&gt;
Note that [[SMC|IsDebugMode]] is not used during exception-handling, except for enabling printing a message to UART-A. This UART code causes a system-hang on retail (likely due to a loop that doesn&#039;t exit). This printing doesn&#039;t seem to run when the process is attached for debugging?&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=6183</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=6183"/>
		<updated>2019-02-05T09:09:48Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* CreateProcessInfo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || [[#svcSetHeapSize]] || W1=size || W0=result, X1=outaddr&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || [[#svcSetMemoryPermission]] || X0=addr, X1=size, W2=prot || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || [[#svcSetMemoryAttribute]] || X0=addr, X1=size, W2=state0, W3=state1 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || [[#svcMapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || [[#svcUnmapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || [[#svcQueryMemory]] || X0=MemoryInfo*, X2=addr || W0=result, W1=PageInfo                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || [[#svcExitProcess]] || None ||&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || [[#svcCreateThread]] || X1=entry, X2=thread_context, X3=stacktop, W4=prio, W5=processor_id  || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || [[#svcStartThread]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || [[#svcExitThread]] || None ||                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0xB || [[#svcSleepThread]] || X0=nano ||&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || [[#svcGetThreadPriority]] || W1=thread_handle || W0=result, W1=prio&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || [[#svcSetThreadPriority]] || W0=thread_handle, W1=prio || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || [[#svcGetThreadCoreMask]] || W2=thread_handle || W0=result, W1=out, X2=out&lt;br /&gt;
|-&lt;br /&gt;
|  0xF || [[#svcSetThreadCoreMask]] || W0=thread_handle, W1=in, X2=in2 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#svcGetCurrentProcessorNumber]] || None || W0/X0=cpuid&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || svcSignalEvent || W0=wevent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || svcClearEvent || W0=wevent_or_revent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || [[#svcMapSharedMemory]] || W0=shmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || svcUnmapSharedMemory || W0=shmem_handle, X1=addr, X2=size || W0=result                                                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || [[#svcCreateTransferMemory]] || X1=addr, X2=size, W3=perm || W0=result, W1=tmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || svcCloseHandle || W0=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || svcResetSignal || W0=revent_or_process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles. X3=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || [[#svcCancelSynchronization]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle ||                                     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || svcArbitrateUnlock || X0=ptr ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || svcWaitProcessWideKeyAtomic || X0=ptr0, X1=ptr, W2=thread_handle, X3=timeout || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || svcSignalProcessWideKey || X0=ptr, W1=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[#svcGetSystemTick]] || None || X0={value of cntpct_el0}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || svcConnectToNamedPort || X1=port_name_str || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || svcSendSyncRequestLight || W0=light_session_handle, X1=? || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || svcSendSyncRequest || X0=normal_session_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || [[#svcSendSyncRequestWithUserBuffer]] || X0=cmdbufptr, X1=size, X2=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || svcSendAsyncRequestWithUserBuffer || X1=cmdbufptr, X2=size, X3=handle || W0=result, W1=revent_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || svcGetProcessId || W1=thread_or_process_or_debug_handle || W0=result, X1=pid&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || svcGetThreadId || W1=thread_handle || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[#svcBreak]] || X0=break_reason,X1,X2=info || W0=result = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || svcOutputDebugString || X0=str, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || svcReturnFromException || X0=result || &lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || [[#svcGetInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || svcFlushEntireDataCache || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [3.0.0+] [[#svcMapPhysicalMemory]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || [3.0.0+] svcUnmapPhysicalMemory || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || [5.0.0+] svcGetFutureThreadInfo || X3=timeout || W0=result, bunch of crap&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || svcGetLastThreadInfo || None || W0=result, W1,W2,W3,W4=unk, W5=truncated_u64, W6=bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || svcGetResourceLimitLimitValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || svcGetResourceLimitCurrentValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || svcSetThreadActivity || W0=thread_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || svcGetThreadContext3 || X0=[[#ThreadContext]]*, W1=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [4.0.0+] svcWaitForAddress || X0=ptr, W1=[[#ArbitrationType]], X2=value X3=timeout ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || [4.0.0+] svcSignalToAddress || X0=ptr, W1=[[#SignalType]], X2=value W3=num_to_signal ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x3C || [[#svcDumpInfo]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || [4.0.0+] svcDumpInfoNew || ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || svcCreateSession || W2=is_light, X3=? || W0=result, W1=server_handle, W2=client_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || [[#svcAcceptSession]] || W1=port_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || [[#svcReplyAndReceive]] || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || svcCreateEvent || None || W0=result, W1=wevent_handle, W2=revent_handle&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x48 || [5.0.0+] [[#svcMapPhysicalMemoryUnsafe]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || [5.0.0+] svcUnmapPhysicalMemoryUnsafe || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || [5.0.0+] svcSetUnsafeLimit || X0=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || [4.0.0+] [[#svcCreateCodeMemory]] || X1=addr, X2=size || W0=result, W1=code_memory_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || [4.0.0+] [[#svcControlCodeMemory]] || W0=code_memory_handle, W1=[[#CodeMemoryOperation]], X2=dstaddr, X3=size, W4=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || svcSleepSystem || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || [[#svcReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val || W0=result, W1=out_val&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || svcSetProcessActivity || W0=process_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#svcCreateSharedMemory]] || W1=size, W2=myperm, W3=otherperm || W0=result, W1=shmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || [[#svcMapTransferMemory]] || X0=tmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || [[#svcUnmapTransferMemory]] || W0=tmemhandle, X1=addr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || [[#svcCreateInterruptEvent]] || X1=irq_num, W2=flag || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || [[#svcQueryPhysicalAddress]] || X1=addr || W0=result, X1=physaddr, X2=kerneladdr, X3=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || [[#svcQueryIoMapping]] || X1=physaddr, X2=size || W0=result, X1=virtaddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || [[#svcCreateDeviceAddressSpace]] || X1=dev_as_start_addr, X2=dev_as_end_addr || W0=result, W1=dev_as_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || [[#svcAttachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || [[#svcDetachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || [[#svcMapDeviceAddressSpaceByForce]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || [[#svcMapDeviceAddressSpaceAligned]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || svcMapDeviceAddressSpace || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || [[#svcUnmapDeviceAddressSpace]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || svcInvalidateProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || svcStoreProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || svcFlushProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || svcDebugActiveProcess || X1=pid || W0=result, W1=debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || svcBreakDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || svcTerminateDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || svcGetDebugEvent || X0=[[#DebugEventInfo]]*, W1=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || [[#svcContinueDebugEvent]] || [1.0.0-2.3.0] W0=debug_handle, W1=[[#ContinueDebugFlagsOld]], X2=thread_id &lt;br /&gt;
[3.0.0+] W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id_list(u64 *), W3=num_tids (max 64, 0 means &amp;quot;all threads&amp;quot;)&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out &lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || svcGetThreadList || X1=tids_out_ptr, W2=max_out, W3=debug_handle_or_zero || W0=result, X1=num_out&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || svcGetDebugThreadContext || X0=ThreadContext*, X1=debug_handle, X2=thread_id, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || svcSetDebugThreadContext || W0=debug_handle, X1=thread_id, X2=ThreadContext*, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || svcQueryDebugProcessMemory || X0=[[#MemoryInfo]]*, X2=debug_handle, X3=addr || W0=result, W1=PageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || svcReadDebugProcessMemory || X0=buffer*, X1=debug_handle, X2=src_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || svcWriteDebugProcessMemory || X0=debug_handle, X1=buffer*, X2=dst_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || [[#svcSetHardwareBreakPoint]] || W0=HardwareBreakpointId, X1=watchpoint_flags/breakpoint_flags, X2=watchpoint_value/debug_handle || &lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || svcGetDebugThreadParam || X2=debug_handle, X3=thread_id, W4=[[#DebugThreadParam]] || W0=result, X1=out0, W2=out1&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x6F || [5.0.0+] [[#svcGetSystemInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || svcCreatePort || W2=max_sessions, W3=is_light, X4=name_ptr || W0=result, W1=clientport_handle, W2=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || svcManageNamedPort || X1=name_ptr, W2=max_sessions || W0=result, W1=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || svcConnectToPort || W1=clientport_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || [[#svcSetProcessMemoryPermission]] || W0=process_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || [[#svcMapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || [[#svcUnmapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || [[#svcQueryProcessMemory]] || X0=meminfo_ptr, W2=process_handle, X3=addr || W0=result, W1=pageinfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || [[#svcMapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#svcUnmapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || [[#svcCreateProcess]] || X1=procinfo_ptr, X2=caps_ptr, W3=cap_num ||  W0=result, W1=process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || svcStartProcess || W0=process_handle, W1=main_thread_prio, W2=default_cpuid, W3=main_thread_stacksz || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || svcTerminateProcess || W0=process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || [[#svcGetProcessInfo]] || W0=process_handle, W1=[[#ProcessInfoType]] || W0=result, X1=[[#ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || svcCreateResourceLimit || None || W0=result, W1=reslimit_handle &lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || svcCallSecureMonitor || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args || X0,X1,X2,X3,X4,X5,X6,X7=result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || OutAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000 (2MB).&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d) is written to OutAddr.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than or equal to 4GB.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || Prot&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryAttribute ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || State0&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u32 || State1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change attribute of page-aligned memory region. &lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! State0 || State1 || Action&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Set bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0] This could be used to map into either the Alias Region or the Stack region.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This can only be used to map into the Stack region.&lt;br /&gt;
&lt;br /&gt;
Code can get the range of the Alias region from [[#svcGetInfo]] id0=2,3, and on 2.0.0+ the range of the Stack region via [[#svcGetInfo]] id0=14, 15 (on 1.0.0, the Stack region had hardcoded limits).&lt;br /&gt;
&lt;br /&gt;
When mapped into the Alias region, the mapped memory will have state 0x482907.&lt;br /&gt;
&lt;br /&gt;
When mapped into the Stack region, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps a region that was previously mapped with [[#svcMapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== svcQueryMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Query information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== svcExitProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== svcCreateThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || u32 || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Create a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
Processor_id must be 0,1,2,3 or -2, where -2 uses the default cpuid for process.&lt;br /&gt;
&lt;br /&gt;
== svcStartThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== svcExitThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== svcSleepThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || s64 || Nanoseconds&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Sleep for a specified amount of time, or yield thread.&lt;br /&gt;
&lt;br /&gt;
Setting nanoseconds to 0, -1, or -2 indicates a yielding type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Yielding without core migration&lt;br /&gt;
|-&lt;br /&gt;
| -1 || Yielding with core migration&lt;br /&gt;
|-&lt;br /&gt;
| -2 || Yielding to any other thread&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u32 || In0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || In1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetCurrentProcessorNumber ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0/X0 || u64 || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
Cpu-id is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== svcMapSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== svcCreateTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== svcWaitSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Works with num_handles &amp;lt;= 0x40.&lt;br /&gt;
&lt;br /&gt;
When zero handles are passed, this will wait forever until either timeout or cancellation occurs.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KDebug:&#039;&#039;&#039; signals when there is a new [[#DebugEventInfo|DebugEvent]] (retrievable via [[#svcGetDebugEvent]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KClientPort:&#039;&#039;&#039; signals when the number of sessions is less than the maximum allowed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KProcess:&#039;&#039;&#039; signals when the process undergoes a state change (retrievable via [[#svcGetProcessInfo]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KReadableEvent:&#039;&#039;&#039; signals when the event&#039;s corresponding KWritableEvent has been signaled via svcSignalEvent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerPort:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#svcAcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerSession:&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#svcReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KThread:&#039;&#039;&#039; signals when the thread has exited.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signaled before the timeout expired, or one of the objects is a Session with a closed remote. Handle index is updated to indicate which object signaled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x7601:&#039;&#039;&#039; Thread termination requested. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; Invalid address. Returned when the handles pointer is not a readable address. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signaled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xec01:&#039;&#039;&#039; Interrupted. Returned when another thread uses [[#svcCancelSynchronization]] to cancel this thread. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; Too many handles. Returned when the number of handles passed is &amp;gt; 0x40.&lt;br /&gt;
&lt;br /&gt;
== svcCancelSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the referenced thread is currently in a synchronization call ([[#svcWaitSynchronization]], [[#svcReplyAndReceive]] or [[#svcReplyAndReceiveLight]]), that call will be interrupted and return 0xec01.&lt;br /&gt;
If that thread is not currently executing such a synchronization call, the next call to a synchronization call will return 0xec01.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t take force-pause (activity/debug pause) into account.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The thread was either interrupted or has had its flag set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. The handle given was either invalid or not a thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemTick ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || u64 || Ticks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the value of cntpct_el0.&lt;br /&gt;
&lt;br /&gt;
The frequency is 19200000 Hz (constant from official sw).&lt;br /&gt;
&lt;br /&gt;
Official sw reads cntpct_el0 directly from usermode without using this SVC. [[ExeFS|sdk-nso]] has this SVC, but it&#039;s not known to be called anywhere.&lt;br /&gt;
&lt;br /&gt;
== svcSendSyncRequestWithUserBuffer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || CmdPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and CmdPtr must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xcc01:&#039;&#039;&#039; CmdPtr is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xca01:&#039;&#039;&#039; Size is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xce01:&#039;&#039;&#039; KSessionRequest allocation failed (unlikely) or pointer buffer size exceeded.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Handles does not exist, or handle is not an instance of KClientSession.&lt;br /&gt;
&lt;br /&gt;
== svcBreak ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Break Reason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || Result || 0 (Success)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the process is attached, report the Break event. Then, if svcContinueDebugEvent didn&#039;t apply IgnoreException on the thread: if TPIDR_EL0 is 0, adjust ELR_EL1 to retry to svc instruction (and set TPIDR_EL0 to 1).&lt;br /&gt;
&lt;br /&gt;
Otherwise, if bit31 in reason isn&#039;t set, perform crash reporting (see Exception Handling section below), if it doesn&#039;t terminate the process adjust ELR_EL1 as well.&lt;br /&gt;
&lt;br /&gt;
Otherwise just return 0.&lt;br /&gt;
&lt;br /&gt;
== svcGetInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || AliasRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || AliasRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemoryAvailable. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || TotalMemoryUsage. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || IsCurrentProcessBeingDebugged&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || Returns ResourceLimit handle for current process. Used by [[Process_Manager_services|PM]].&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy from current process. TRNG. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AddressSpaceBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] StackRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] StackRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] PersonalMmHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] PersonalMmHeapUsage&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] TitleId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0-4.1.0] PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0-4.1.0] PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Process || 20 || 0 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 21 || 0 || [6.0.0+] TotalMemoryAvailableWithoutMmHeap&lt;br /&gt;
|-&lt;br /&gt;
| Process || 22 || 0 || [6.0.0+] TotalMemoryUsedWithoutMmHeap&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 0xF0000002 || 0 || Scheduler related.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemory ==&lt;br /&gt;
This is like svcSetHeapSize except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcDumpInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Does nothing, just returns with registers set to all-zero.&lt;br /&gt;
&lt;br /&gt;
== svcAcceptSession ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || Port&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || Session&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== svcReplyAndReceive ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || *Handle&amp;lt;Port or ServerSession&amp;gt; || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTarget&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 (nanoseconds) || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is zero, the TLS should contain a blank message. If this message has a C descriptor, the buffer it points to will be used as the pointer buffer. See [[IPC_Marshalling#IPC_buffers]]. Note that a pointer buffer cannot be specified if ReplyTarget is not zero.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemoryUnsafe ==&lt;br /&gt;
Same as [[#svcMapPhysicalMemory]] except it always uses pool partition 0.&lt;br /&gt;
&lt;br /&gt;
== svcCreateCodeMemory ==&lt;br /&gt;
Takes an address range with backing memory to create the code memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== svcControlCodeMemory ==&lt;br /&gt;
Maps the backing memory for a Code memory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#CodeMemoryOperation|CodeMemoryOperation_UnmapOwner/CodeMemoryOperation_UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the code memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Error 0xE401 is now returned when the process owner of the Code memory object is the same as the current process.&lt;br /&gt;
&lt;br /&gt;
== svcReadWriteRegister ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || RegAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u64 || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1|| u64 || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by smcReadWriteRegister (checked in addition to the whitelist in svcReadWriteRegister), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== svcCreateSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || LocalPerm&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || RemotePerm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
Allocates memory from the current process&#039; pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcMapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The newly mapped pages will have [[#MemoryState]] type 0xE.&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in svcCreateMemoryMirror, otherwise error.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcCreateInterruptEvent ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || IrqNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || bool || Flags&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an event handle for the given IRQ number. Waiting on this handle will wait until the IRQ is triggered. The flags argument configures the triggering. If it is false, the IRQ is active HIGH level sensitive, if it is true it is rising-edge sensitive.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Flags was &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF201:&#039;&#039;&#039; IRQ above 0x3FF or outside the [[NPDM#Kernel_Access_Control|IRQ access mask]] was given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; A SlabHeap was exhausted (too many interrupts created).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF401:&#039;&#039;&#039; IRQ already has an event registered.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD201:&#039;&#039;&#039; The handle table is full. Try closing some handles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcQueryPhysicalAddress ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || KernelAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || u64 || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcQueryIoMapping ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || void* || VirtAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== svcCreateDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || StartAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || EndAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || AddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
dev_as_start_addr is normally set to 0 and dev_as_end_addr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== svcAttachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcDetachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceByForce ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
dev_map_addr is the userspace destination address, while dev_as_addr is the source address between dev_as_start_addr and dev_as_end_addr (passed to [[#svcCreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|MapDeviceAllowed]] bit set. Bit [[SVC#MemoryAttribute|IsDeviceMapped]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceAligned ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#svcMapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|MapDeviceAlignedAllowed]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== svcContinueDebugEvent ==&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The process has been resumed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid debug handle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf401:&#039;&#039;&#039; Process has debug events queued.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 0 || TotalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 1 || TotalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 2 || TotalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 3 || TotalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 0 || CurrentMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 1 || CurrentMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 2 || CurrentMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 3 || CurrentMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 0 || PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 1 || PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetProcessMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || void* || Perm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcQueryProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#svcQueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcCreateProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessInfo]]* || InfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u32* || CapabilitiesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessInfo]] as input.&lt;br /&gt;
CapabilitiesPtr points to an array of [[NPDM#Kernel_Access_Control|kernel capabilities]].&lt;br /&gt;
CapabilitiesNum is a number of capabilities in the CapabilitiesPtr array (number of element, not number of bytes).&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Attempted to map more code pages than available in address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Provided CodeAddr is invalid (make sure it&#039;s in range?)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The resource handle passed is invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE601:&#039;&#039;&#039; Attempt to copy procinfo from user-supplied pointer failed. Attempt to copy capabilities_num from user-supplied pointer failed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE801:&#039;&#039;&#039; Attempted to create a 32-bit process with a 36-bit address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Unused bits are set in mmuflags. Unknown address space type used.&lt;br /&gt;
&lt;br /&gt;
== svcGetProcessInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#ProcessState]] || State&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* svcBreakDebugProcess&lt;br /&gt;
* svcContinueDebugEvent&lt;br /&gt;
* svcWriteDebugProcessMemory&lt;br /&gt;
* svcSetDebugThreadContext&lt;br /&gt;
* svcTerminateDebugProcess&lt;br /&gt;
* svcSetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
svcDebugActiveProcess stops execution of the target process, the normal method for resuming it requires svcContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
== svcSetHardwareBreakPoint ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || u32 || hardware_breakpoint_id&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || flags&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets one of the AArch64 hardware breakpoints. The nintendo switch has 6 hardware breakpoints, and 4 hardware watchpoints. The syscall has two behaviors depending on the value of hardware_breakpoint_id:&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id &amp;lt; 0x10, then it sets one of the AArch64 hardware breakpoints. Flags will go to DBGBCRn_EL1, and value to DBGBVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0x7F01E1. Furthermore, the kernel will or it with 0x4004, in order to set various security flags to guarantee the watchpoints only triggers for code in EL0. If the user asks for a Breakpoint Type of ContextIDR match, the kernel shall use the given debug_handle to set DBGBVRn_EL1 to the ContextID of the debugged process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id is between 0x10 and 0x20 (exclusive), then it sets one of the AArch64 hardware watchpoints. Flags will go to DBGWCRn_EL1, and the value to DBGWVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0xFF0F1FF9. Furthermore, the kernel will or it with 0x104004. This will set various security flags, and set the watchpoint type to be a Linked Watchpoint. This means that you need to link it to a Linked ContextIDR breakpoint. Check the ARM documentation for more information.&lt;br /&gt;
&lt;br /&gt;
Note that hardware_breakpoint_id 0 to 4 match only to Virtual Address, while hardware_breakpoint_id 5 and 6 match against either Virtual Address, ContextID, or VMID. As such, if you are configuring a breakpoint to link for a watchpoint, make sure you use hardware_breakpoint_id 5 or 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more documentation for hardware breakpoints, check out the AArch64 documentation for the [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488h/way1382455558968.html DBGBCRn_EL1 register] and the [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0488h/way1382455560629.html DBGWCRn_EL1 register]&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== ThreadContextRequestFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || NormalContext&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DeviceName_AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeviceName_AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceName_DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeviceName_DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeviceName_HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeviceName_HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || DeviceName_ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeviceName_MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || DeviceName_NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || DeviceName_NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DeviceName_PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || DeviceName_SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || DeviceName_VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DeviceName_VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || DeviceName_XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || DeviceName_XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DeviceName_TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DeviceName_PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DeviceName_DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || DeviceName_SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || DeviceName_SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || DeviceName_SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || DeviceName_SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || DeviceName_ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || DeviceName_GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || DeviceName_GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || DeviceName_PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeviceName_NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DeviceName_APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || DeviceName_SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || DeviceName_NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || DeviceName_HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || DeviceName_SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || DeviceName_AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || DeviceName_ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || DeviceName_TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || DeviceName_TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || DeviceName_TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || DeviceName_NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CodeMemoryOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CodeMemoryOperation_MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CodeMemoryOperation_MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CodeMemoryOperation_UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CodeMemoryOperation_UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LimitableResource_Memory&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LimitableResource_Threads&lt;br /&gt;
|-&lt;br /&gt;
| 2 || LimitableResource_Events&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LimitableResource_TransferMemories&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LimitableResource_Sessions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessInfoType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ProcessState|ProcessInfoType_ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProcessState_Created ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProcessState_CreatedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ProcessState_Started ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ProcessState_Crashed || Processes will not enter this state unless they were created with [[#CreateProcessInfo|EnableDebug]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ProcessState_StartedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ProcessState_Exiting ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ProcessState_Exited ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ProcessState_DebugSuspended ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugThreadParam_DynamicPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugThreadParam_SchedulingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugThreadParam_PreferredCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugThreadParam_CurrentCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugThreadParam_AffinityMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dynamic priority: output in out2&lt;br /&gt;
&lt;br /&gt;
Scheduling status: out1 contains bit0: is debug-suspended, bit1: is user-suspended (svcSetThreadActivity 1 or svcSetProcessActivity 1).&lt;br /&gt;
Out2 contains {suspended, idle, running, terminating} =&amp;gt; {5, 0, 1, 4}&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_PreferredCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_CurrentCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_AffinityMask: output in out1&lt;br /&gt;
&lt;br /&gt;
== CreateProcessInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || IsAarch64&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 || [2.0.0+] EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || UseSystemMemBlocks&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit7 || [4.0.0] ?&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit10-7 || [5.0.0+] PoolPartition (0=Application, 1=Applet, 2=Sysmodule, 3=Nvservices)&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit11 || [7.0.0+] Only allowed in combination with bit6.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle or zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 || || [3.0.0+] PersonalMmHeapNumPages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On [1.0.0] there&#039;s only one pool.&lt;br /&gt;
&lt;br /&gt;
On [2.0.0-4.0.0] PoolPartition is 1 for built-ins and 0 for rest.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] PoolPartition is specified in CreateProcessArgs. There are now 4 pool partitions.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] (maybe lower?) a zero ResourceLimitHandle defaults to sysmodule limits and 0x12300000 bytes of memory.&lt;br /&gt;
&lt;br /&gt;
The PersonalMmHeap are allocated as follows:&lt;br /&gt;
* For the application, normal insecure pool is used. Carveout 5 is used to provide protection.&lt;br /&gt;
* For the applet, a pre-allocated secure pool segment of size 0x40000 is used.&lt;br /&gt;
* For sysmodules, secure pool is allocated.&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Normal_32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal_36Bit || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || WithoutMap_32Bit || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] Normal_39Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || MemoryType: lower 8 bits of [[#MemoryState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || Permission (bit0: R, bit1: W, bit2: X)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsBorrowed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IsIpcMapped: when IpcRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || IsDeviceMapped: when DeviceRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsUncached&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || Type&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#svcSetMemoryPermission|PermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ForceReadWritableByDebugSyscalls&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IpcSendAllowed_Type0&lt;br /&gt;
|-&lt;br /&gt;
| 11 || IpcSendAllowed_Type3&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IpcSendAllowed_Type1&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#svcSetProcessMemoryPermission|ProcessPermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#svcMapMemory|MapAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#svcUnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#svcCreateTransferMemory|TransferMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#svcQueryPhysicalAddress|QueryPhysicalAddressAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || MapDeviceAllowed ([[#svcMapDeviceAddressSpace]] and [[#svcMapDeviceAddressSpaceByForce]])&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#svcMapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#svcSendSyncRequestWithUserBuffer|IpcBufferAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || IsPoolAllocated/IsReferenceCounted&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#svcMapProcessMemory|MapProcessAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#svcSetMemoryAttribute|AttributeChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] CodeMemoryAllowed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || MemoryType_Unmapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| MemoryType_Heap || Mapped using [[#svcSetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] MemoryType_Alias || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|MemoryType_IpcBuffer0]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || MemoryType_Stack || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || MemoryType_Reserved ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|MemoryType_IpcBuffer1]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|MemoryType_IpcBuffer3]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] MemoryType_CodeReadOnly || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] MemoryType_CodeWritable || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArbitrationType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || WaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || DecrementAndWaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || WaitIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignalType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Signal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || SignalAndIncrementIfEqual&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlagsOld ==&lt;br /&gt;
[1.0.0-2.3.0]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: ResumeAllThreads or debug-suspended-thread-id needed)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
[3.0.0+]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: doesn&#039;t need to be set in the same call than Resume)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || DontCatchExceptions&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Resume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || IgnoreOtherThreadsExceptions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren&#039;t in the input list. The affected threads are resumed.&lt;br /&gt;
&lt;br /&gt;
Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.&lt;br /&gt;
&lt;br /&gt;
If the input number of threads is 0, this means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
&lt;br /&gt;
The below table is for the Aarch64 version of the system call. For A32, all u64 fields but title/process/thread id are actually u32, making the structure 0x28-byte-big (0x40 for a64).&lt;br /&gt;
&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32|| Type (0=PausedThread, 1=RunningThread, 2=ExitedProcess, 3=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugEvent_AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugEvent_AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugEvent_ExitProcess&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugEvent_ExitThread&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugEvent_Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Exception_Trap (*)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Exception_InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Exception_DataAbortMisc (**)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Exception_PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception_DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exception_BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exception_UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Exception_DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Exception_BadSvcId&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Exception_SError [not in 1.0.0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Undefined instructions, software breakpoints, some other traps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Data aborts, FP traps, and everything else that doesn&#039;t belong to any of the above.&lt;br /&gt;
&lt;br /&gt;
Trap specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
First of all, a function that might be called by synchronous exception handler and that is called by the SError handler fetches the exception info, adjusts PC, panics on exceptions taken from EL1, then dispatches the exception.&lt;br /&gt;
&lt;br /&gt;
The dispatcher has two mutually exclusive exception reporting methods:&lt;br /&gt;
* by storing information at the start of the process&#039;s TLS memregion (TPIDRRO_EL0) and jumping back to the crt0&lt;br /&gt;
* by using KDebug&lt;br /&gt;
&lt;br /&gt;
KDebug dispatching is used when at least one of the following conditions are met:&lt;br /&gt;
* SMC ConfigItem KernelMemConfig bit 1 is NOT set (it isn&#039;t on retail), unless: this is a software or hardware breakpoint, or a watchpoint, or [4.0.0+?] the process is attached and this is a Google PNaCl trap instruction (see LLVM source)&lt;br /&gt;
* FAR doesn&#039;t point to a valid address in mapped-readable CodeStatic memory (i.e. this is the case for NRO and JIT memory) or this is one of the following exceptions (it particular, that doesn&#039;t include FP exceptions occurring in CodeStatic memory):&lt;br /&gt;
** Uncategorized&lt;br /&gt;
** IllegalState&lt;br /&gt;
** SupervisorCallA32&lt;br /&gt;
** SupervisorCallA64&lt;br /&gt;
** PCAlignment&lt;br /&gt;
** SPAlignment&lt;br /&gt;
** SError&lt;br /&gt;
** BreakpointLowerEl&lt;br /&gt;
** SoftwareStepLowerEl (note: no way set single-step flag; not parsed)&lt;br /&gt;
** WatchpointLowerEl&lt;br /&gt;
** SoftwareBreakpointA32 (note: not parsed)&lt;br /&gt;
** SoftwareBreakpointA64 (note: not parsed)&lt;br /&gt;
    &lt;br /&gt;
In all other cases the userland-handled exception path is taken.&lt;br /&gt;
&lt;br /&gt;
KDebug path:&lt;br /&gt;
&lt;br /&gt;
If the process is attached, the exception is reported to the KDebug. If the thread was continued using flag IgnoreExceptions, it returns from the exception as if nothing happened.&lt;br /&gt;
&lt;br /&gt;
If the latter is not the case, or if the process isn&#039;t attached, proceed to [2.0.0+] crash reporting (or in [1.0.0] just terminate the process): &lt;br /&gt;
if EnableDebug is set, and depending on the process state (more than one crash per process isn&#039;t permitted) it may signal itself with ProcessState_Crashed so that PM asks NS to start creport so that creport attaches to it and reports the crashes. Otherwise, just terminate.&lt;br /&gt;
&lt;br /&gt;
Userland reporting path and svcReturnFromException:&lt;br /&gt;
&lt;br /&gt;
TLS region start (A64):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x148 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x78 || ExceptionFrameA64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA64:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x48 (8*9) || GPRs 0..8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x8 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || pstate &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 0x8 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TLS region start (A32):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x178 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x44 || ExceptionFrameA32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA32:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 (8*4) || GPRs 0..7.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || tpidr_el0 = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || cpsr &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In that case, after storing the regs in the TLS, the exception handler returns to the application&#039;s crt0 (entrypoint), with X0=&amp;lt;error description code&amp;gt; (see below) and X1=SP=frame=&amp;lt;stack top&amp;gt; (see above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Desc. code || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || Instruction abort&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || Misaligned PC&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || Misaligned SP&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || SError [not in 1.0.0?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || Bad SVC&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || Uncategorized, CP15RTTrap, CP15RRTTrap, CP14RTTrap, CP14RRTTrap, IllegalState, SystemRegisterTrap&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || None of the above, EC &amp;lt;= 0x34 and not a breakpoint&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(During normal app boot the process is invoked with X0=0 and X1=main_thread_handle. The crt0 of retail apps determines whether to boot normally or handle an exception if X0 is set to 0 or not)&lt;br /&gt;
&lt;br /&gt;
The application is supposed to promptly update the contents of elr_el1 to a user handler (and any other regs it sees fit) and call svcReturnFromException (error code) to call that handler. The latter is then expected to promptly abort the program.&lt;br /&gt;
&lt;br /&gt;
svcReturnFromException updates the contents of the kernel stack frame with what the user provided in the TLS structure, sets TPIDR_EL0 to 1, then:&lt;br /&gt;
* if the provided error code is 0, gracefully pivots and returns from exception&lt;br /&gt;
* if it is not, replays the exception and pass it to the KDebug (see above). One can pass 0x10001 to prevent process termination. If the process is attached, this also prevents crash-collection/termination (different from the exception handler behavior)&lt;br /&gt;
&lt;br /&gt;
If an exception occurs from the above user handler, the entire exception handling process will repeat with the new exception.&lt;br /&gt;
&lt;br /&gt;
Note that if a thread that wasn&#039;t faulting calls svcReturnFromException, it signals an &amp;quot;invalid syscall&amp;quot; exception&lt;br /&gt;
&lt;br /&gt;
Note that [[SMC|IsDebugMode]] is not used during exception-handling, except for enabling printing a message to UART-A. This UART code causes a system-hang on retail (likely due to a loop that doesn&#039;t exit). This printing doesn&#039;t seem to run when the process is attached for debugging?&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=6162</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=6162"/>
		<updated>2019-01-31T00:24:33Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* CreateProcessInfo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || [[#svcSetHeapSize]] || W1=size || W0=result, X1=outaddr&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || [[#svcSetMemoryPermission]] || X0=addr, X1=size, W2=prot || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || [[#svcSetMemoryAttribute]] || X0=addr, X1=size, W2=state0, W3=state1 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || [[#svcMapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || [[#svcUnmapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || [[#svcQueryMemory]] || X0=MemoryInfo*, X2=addr || W0=result, W1=PageInfo                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || [[#svcExitProcess]] || None ||&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || [[#svcCreateThread]] || X1=entry, X2=thread_context, X3=stacktop, W4=prio, W5=processor_id  || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || [[#svcStartThread]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || [[#svcExitThread]] || None ||                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0xB || [[#svcSleepThread]] || X0=nano ||&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || [[#svcGetThreadPriority]] || W1=thread_handle || W0=result, W1=prio&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || [[#svcSetThreadPriority]] || W0=thread_handle, W1=prio || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || [[#svcGetThreadCoreMask]] || W2=thread_handle || W0=result, W1=out, X2=out&lt;br /&gt;
|-&lt;br /&gt;
|  0xF || [[#svcSetThreadCoreMask]] || W0=thread_handle, W1=in, X2=in2 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#svcGetCurrentProcessorNumber]] || None || W0/X0=cpuid&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || svcSignalEvent || W0=wevent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || svcClearEvent || W0=wevent_or_revent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || [[#svcMapSharedMemory]] || W0=shmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || svcUnmapSharedMemory || W0=shmem_handle, X1=addr, X2=size || W0=result                                                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || [[#svcCreateTransferMemory]] || X1=addr, X2=size, W3=perm || W0=result, W1=tmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || svcCloseHandle || W0=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || svcResetSignal || W0=revent_or_process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles. X3=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || [[#svcCancelSynchronization]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle ||                                     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || svcArbitrateUnlock || X0=ptr ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || svcWaitProcessWideKeyAtomic || X0=ptr0, X1=ptr, W2=thread_handle, X3=timeout || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || svcSignalProcessWideKey || X0=ptr, W1=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[#svcGetSystemTick]] || None || X0={value of cntpct_el0}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || svcConnectToNamedPort || X1=port_name_str || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || svcSendSyncRequestLight || W0=light_session_handle, X1=? || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || svcSendSyncRequest || X0=normal_session_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || [[#svcSendSyncRequestWithUserBuffer]] || X0=cmdbufptr, X1=size, X2=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || svcSendAsyncRequestWithUserBuffer || X1=cmdbufptr, X2=size, X3=handle || W0=result, W1=revent_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || svcGetProcessId || W1=thread_or_process_or_debug_handle || W0=result, X1=pid&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || svcGetThreadId || W1=thread_handle || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[#svcBreak]] || X0=break_reason,X1,X2=info || W0=result = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || svcOutputDebugString || X0=str, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || svcReturnFromException || X0=result || &lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || [[#svcGetInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || svcFlushEntireDataCache || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [3.0.0+] [[#svcMapPhysicalMemory]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || [3.0.0+] svcUnmapPhysicalMemory || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || [5.0.0+] svcGetFutureThreadInfo || X3=timeout || W0=result, bunch of crap&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || svcGetLastThreadInfo || None || W0=result, W1,W2,W3,W4=unk, W5=truncated_u64, W6=bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || svcGetResourceLimitLimitValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || svcGetResourceLimitCurrentValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || svcSetThreadActivity || W0=thread_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || svcGetThreadContext3 || X0=[[#ThreadContext]]*, W1=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [4.0.0+] svcWaitForAddress || X0=ptr, W1=[[#ArbitrationType]], X2=value X3=timeout ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || [4.0.0+] svcSignalToAddress || X0=ptr, W1=[[#SignalType]], X2=value W3=num_to_signal ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x3C || [[#svcDumpInfo]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || [4.0.0+] svcDumpInfoNew || ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || svcCreateSession || W2=is_light, X3=? || W0=result, W1=server_handle, W2=client_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || [[#svcAcceptSession]] || W1=port_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || [[#svcReplyAndReceive]] || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || svcCreateEvent || None || W0=result, W1=wevent_handle, W2=revent_handle&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x48 || [5.0.0+] [[#svcMapPhysicalMemoryUnsafe]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || [5.0.0+] svcUnmapPhysicalMemoryUnsafe || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || [5.0.0+] svcSetUnsafeLimit || X0=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || [4.0.0+] [[#svcCreateCodeMemory]] || X1=addr, X2=size || W0=result, W1=code_memory_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || [4.0.0+] [[#svcControlCodeMemory]] || W0=code_memory_handle, W1=[[#CodeMemoryOperation]], X2=dstaddr, X3=size, W4=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || svcSleepSystem || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || [[#svcReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val || W0=result, W1=out_val&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || svcSetProcessActivity || W0=process_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#svcCreateSharedMemory]] || W1=size, W2=myperm, W3=otherperm || W0=result, W1=shmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || [[#svcMapTransferMemory]] || X0=tmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || [[#svcUnmapTransferMemory]] || W0=tmemhandle, X1=addr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || [[#svcCreateInterruptEvent]] || X1=irq_num, W2=flag || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || [[#svcQueryPhysicalAddress]] || X1=addr || W0=result, X1=physaddr, X2=kerneladdr, X3=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || [[#svcQueryIoMapping]] || X1=physaddr, X2=size || W0=result, X1=virtaddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || [[#svcCreateDeviceAddressSpace]] || X1=dev_as_start_addr, X2=dev_as_end_addr || W0=result, W1=dev_as_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || [[#svcAttachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || [[#svcDetachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || [[#svcMapDeviceAddressSpaceByForce]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || [[#svcMapDeviceAddressSpaceAligned]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || svcMapDeviceAddressSpace || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || [[#svcUnmapDeviceAddressSpace]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || svcInvalidateProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || svcStoreProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || svcFlushProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || svcDebugActiveProcess || X1=pid || W0=result, W1=debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || svcBreakDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || svcTerminateDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || svcGetDebugEvent || X0=[[#DebugEventInfo]]*, W1=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || [[#svcContinueDebugEvent]] || [1.0.0-2.3.0] W0=debug_handle, W1=[[#ContinueDebugFlagsOld]], X2=thread_id &lt;br /&gt;
[3.0.0+] W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id_list(u64 *), W3=num_tids (max 64, 0 means &amp;quot;all threads&amp;quot;)&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out &lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || svcGetThreadList || X1=tids_out_ptr, W2=max_out, W3=debug_handle_or_zero || W0=result, X1=num_out&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || svcGetDebugThreadContext || X0=ThreadContext*, X1=debug_handle, X2=thread_id, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || svcSetDebugThreadContext || W0=debug_handle, X1=thread_id, X2=ThreadContext*, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || svcQueryDebugProcessMemory || X0=[[#MemoryInfo]]*, X2=debug_handle, X3=addr || W0=result, W1=PageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || svcReadDebugProcessMemory || X0=buffer*, X1=debug_handle, X2=src_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || svcWriteDebugProcessMemory || X0=debug_handle, X1=buffer*, X2=dst_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || [[#svcSetHardwareBreakPoint]] || W0=HardwareBreakpointId, X1=watchpoint_flags/breakpoint_flags, X2=watchpoint_value/debug_handle || &lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || svcGetDebugThreadParam || X2=debug_handle, X3=thread_id, W4=[[#DebugThreadParam]] || W0=result, X1=out0, W2=out1&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x6F || [5.0.0+] [[#svcGetSystemInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || svcCreatePort || W2=max_sessions, W3=is_light, X4=name_ptr || W0=result, W1=clientport_handle, W2=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || svcManageNamedPort || X1=name_ptr, W2=max_sessions || W0=result, W1=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || svcConnectToPort || W1=clientport_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || [[#svcSetProcessMemoryPermission]] || W0=process_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || [[#svcMapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || [[#svcUnmapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || [[#svcQueryProcessMemory]] || X0=meminfo_ptr, W2=process_handle, X3=addr || W0=result, W1=pageinfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || [[#svcMapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#svcUnmapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || [[#svcCreateProcess]] || X1=procinfo_ptr, X2=caps_ptr, W3=cap_num ||  W0=result, W1=process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || svcStartProcess || W0=process_handle, W1=main_thread_prio, W2=default_cpuid, W3=main_thread_stacksz || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || svcTerminateProcess || W0=process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || [[#svcGetProcessInfo]] || W0=process_handle, W1=[[#ProcessInfoType]] || W0=result, X1=[[#ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || svcCreateResourceLimit || None || W0=result, W1=reslimit_handle &lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || svcCallSecureMonitor || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args || X0,X1,X2,X3,X4,X5,X6,X7=result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || OutAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000 (2MB).&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d) is written to OutAddr.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than or equal to 4GB.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || Prot&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryAttribute ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || State0&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u32 || State1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change attribute of page-aligned memory region. &lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! State0 || State1 || Action&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Set bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0] This could be used to map into either the Alias Region or the Stack region.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This can only be used to map into the Stack region.&lt;br /&gt;
&lt;br /&gt;
Code can get the range of the Alias region from [[#svcGetInfo]] id0=2,3, and on 2.0.0+ the range of the Stack region via [[#svcGetInfo]] id0=14, 15 (on 1.0.0, the Stack region had hardcoded limits).&lt;br /&gt;
&lt;br /&gt;
When mapped into the Alias region, the mapped memory will have state 0x482907.&lt;br /&gt;
&lt;br /&gt;
When mapped into the Stack region, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps a region that was previously mapped with [[#svcMapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== svcQueryMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Query information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== svcExitProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== svcCreateThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || u32 || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Create a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
Processor_id must be 0,1,2,3 or -2, where -2 uses the default cpuid for process.&lt;br /&gt;
&lt;br /&gt;
== svcStartThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== svcExitThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== svcSleepThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || s64 || Nanoseconds&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Sleep for a specified amount of time, or yield thread.&lt;br /&gt;
&lt;br /&gt;
Setting nanoseconds to 0, -1, or -2 indicates a yielding type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Yielding without core migration&lt;br /&gt;
|-&lt;br /&gt;
| -1 || Yielding with core migration&lt;br /&gt;
|-&lt;br /&gt;
| -2 || Yielding to any other thread&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u32 || In0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || In1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetCurrentProcessorNumber ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0/X0 || u64 || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
Cpu-id is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== svcMapSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== svcCreateTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== svcWaitSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Works with num_handles &amp;lt;= 0x40.&lt;br /&gt;
&lt;br /&gt;
When zero handles are passed, this will wait forever until either timeout or cancellation occurs.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KDebug:&#039;&#039;&#039; signals when there is a new [[#DebugEventInfo|DebugEvent]] (retrievable via [[#svcGetDebugEvent]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KClientPort:&#039;&#039;&#039; signals when the number of sessions is less than the maximum allowed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KProcess:&#039;&#039;&#039; signals when the process undergoes a state change (retrievable via [[#svcGetProcessInfo]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KReadableEvent:&#039;&#039;&#039; signals when the event&#039;s corresponding KWritableEvent has been signaled via svcSignalEvent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerPort:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#svcAcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerSession:&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#svcReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KThread:&#039;&#039;&#039; signals when the thread has exited.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signaled before the timeout expired, or one of the objects is a Session with a closed remote. Handle index is updated to indicate which object signaled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x7601:&#039;&#039;&#039; Thread termination requested. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; Invalid address. Returned when the handles pointer is not a readable address. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signaled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xec01:&#039;&#039;&#039; Interrupted. Returned when another thread uses [[#svcCancelSynchronization]] to cancel this thread. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; Too many handles. Returned when the number of handles passed is &amp;gt; 0x40.&lt;br /&gt;
&lt;br /&gt;
== svcCancelSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the referenced thread is currently in a synchronization call ([[#svcWaitSynchronization]], [[#svcReplyAndReceive]] or [[#svcReplyAndReceiveLight]]), that call will be interrupted and return 0xec01.&lt;br /&gt;
If that thread is not currently executing such a synchronization call, the next call to a synchronization call will return 0xec01.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t take force-pause (activity/debug pause) into account.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The thread was either interrupted or has had its flag set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. The handle given was either invalid or not a thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemTick ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || u64 || Ticks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the value of cntpct_el0.&lt;br /&gt;
&lt;br /&gt;
The frequency is 19200000 Hz (constant from official sw).&lt;br /&gt;
&lt;br /&gt;
Official sw reads cntpct_el0 directly from usermode without using this SVC. [[ExeFS|sdk-nso]] has this SVC, but it&#039;s not known to be called anywhere.&lt;br /&gt;
&lt;br /&gt;
== svcSendSyncRequestWithUserBuffer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || CmdPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and CmdPtr must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xcc01:&#039;&#039;&#039; CmdPtr is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xca01:&#039;&#039;&#039; Size is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xce01:&#039;&#039;&#039; KSessionRequest allocation failed (unlikely) or pointer buffer size exceeded.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Handles does not exist, or handle is not an instance of KClientSession.&lt;br /&gt;
&lt;br /&gt;
== svcBreak ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Break Reason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || Result || 0 (Success)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the process is attached, report the Break event. Then, if svcContinueDebugEvent didn&#039;t apply IgnoreException on the thread: if TPIDR_EL0 is 0, adjust ELR_EL1 to retry to svc instruction (and set TPIDR_EL0 to 1).&lt;br /&gt;
&lt;br /&gt;
Otherwise, if bit31 in reason isn&#039;t set, perform crash reporting (see Exception Handling section below), if it doesn&#039;t terminate the process adjust ELR_EL1 as well.&lt;br /&gt;
&lt;br /&gt;
Otherwise just return 0.&lt;br /&gt;
&lt;br /&gt;
== svcGetInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || AliasRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || AliasRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemoryAvailable. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || TotalMemoryUsage. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || IsCurrentProcessBeingDebugged&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || Returns ResourceLimit handle for current process. Used by [[Process_Manager_services|PM]].&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy from current process. TRNG. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AddressSpaceBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] StackRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] StackRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] PersonalMmHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] PersonalMmHeapUsage&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] TitleId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0-4.1.0] PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0-4.1.0] PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Process || 20 || 0 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 21 || 0 || [6.0.0+] TotalMemoryAvailableWithoutMmHeap&lt;br /&gt;
|-&lt;br /&gt;
| Process || 22 || 0 || [6.0.0+] TotalMemoryUsedWithoutMmHeap&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 0xF0000002 || 0 || Scheduler related.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemory ==&lt;br /&gt;
This is like svcSetHeapSize except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcDumpInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Does nothing, just returns with registers set to all-zero.&lt;br /&gt;
&lt;br /&gt;
== svcAcceptSession ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || Port&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || Session&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== svcReplyAndReceive ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || *Handle&amp;lt;Port or ServerSession&amp;gt; || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTarget&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 (nanoseconds) || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is zero, the TLS should contain a blank message. If this message has a C descriptor, the buffer it points to will be used as the pointer buffer. See [[IPC_Marshalling#IPC_buffers]]. Note that a pointer buffer cannot be specified if ReplyTarget is not zero.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemoryUnsafe ==&lt;br /&gt;
Same as [[#svcMapPhysicalMemory]] except it always uses pool partition 0.&lt;br /&gt;
&lt;br /&gt;
== svcCreateCodeMemory ==&lt;br /&gt;
Takes an address range with backing memory to create the code memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== svcControlCodeMemory ==&lt;br /&gt;
Maps the backing memory for a Code memory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#CodeMemoryOperation|CodeMemoryOperation_UnmapOwner/CodeMemoryOperation_UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the code memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Error 0xE401 is now returned when the process owner of the Code memory object is the same as the current process.&lt;br /&gt;
&lt;br /&gt;
== svcReadWriteRegister ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || RegAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u64 || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1|| u64 || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by smcReadWriteRegister (checked in addition to the whitelist in svcReadWriteRegister), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== svcCreateSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || LocalPerm&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || RemotePerm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
Allocates memory from the current process&#039; pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcMapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The newly mapped pages will have [[#MemoryState]] type 0xE.&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in svcCreateMemoryMirror, otherwise error.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcCreateInterruptEvent ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || IrqNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || bool || Flags&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an event handle for the given IRQ number. Waiting on this handle will wait until the IRQ is triggered. The flags argument configures the triggering. If it is false, the IRQ is active HIGH level sensitive, if it is true it is rising-edge sensitive.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Flags was &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF201:&#039;&#039;&#039; IRQ above 0x3FF or outside the [[NPDM#Kernel_Access_Control|IRQ access mask]] was given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; A SlabHeap was exhausted (too many interrupts created).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF401:&#039;&#039;&#039; IRQ already has an event registered.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD201:&#039;&#039;&#039; The handle table is full. Try closing some handles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcQueryPhysicalAddress ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || KernelAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || u64 || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcQueryIoMapping ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || void* || VirtAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== svcCreateDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || StartAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || EndAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || AddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
dev_as_start_addr is normally set to 0 and dev_as_end_addr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== svcAttachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcDetachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceByForce ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
dev_map_addr is the userspace destination address, while dev_as_addr is the source address between dev_as_start_addr and dev_as_end_addr (passed to [[#svcCreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|MapDeviceAllowed]] bit set. Bit [[SVC#MemoryAttribute|IsDeviceMapped]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceAligned ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#svcMapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|MapDeviceAlignedAllowed]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== svcContinueDebugEvent ==&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The process has been resumed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid debug handle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf401:&#039;&#039;&#039; Process has debug events queued.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 0 || TotalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 1 || TotalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 2 || TotalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 3 || TotalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 0 || CurrentMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 1 || CurrentMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 2 || CurrentMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 3 || CurrentMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 0 || PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 1 || PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetProcessMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || void* || Perm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcQueryProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#svcQueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcCreateProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessInfo]]* || InfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u32* || CapabilitiesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessInfo]] as input.&lt;br /&gt;
CapabilitiesPtr points to an array of [[NPDM#Kernel_Access_Control|kernel capabilities]].&lt;br /&gt;
CapabilitiesNum is a number of capabilities in the CapabilitiesPtr array (number of element, not number of bytes).&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Attempted to map more code pages than available in address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Provided CodeAddr is invalid (make sure it&#039;s in range?)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The resource handle passed is invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE601:&#039;&#039;&#039; Attempt to copy procinfo from user-supplied pointer failed. Attempt to copy capabilities_num from user-supplied pointer failed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE801:&#039;&#039;&#039; Attempted to create a 32-bit process with a 36-bit address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Unused bits are set in mmuflags. Unknown address space type used.&lt;br /&gt;
&lt;br /&gt;
== svcGetProcessInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#ProcessState]] || State&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* svcBreakDebugProcess&lt;br /&gt;
* svcContinueDebugEvent&lt;br /&gt;
* svcWriteDebugProcessMemory&lt;br /&gt;
* svcSetDebugThreadContext&lt;br /&gt;
* svcTerminateDebugProcess&lt;br /&gt;
* svcSetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
svcDebugActiveProcess stops execution of the target process, the normal method for resuming it requires svcContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
== svcSetHardwareBreakPoint ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || u32 || hardware_breakpoint_id&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || flags&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets one of the AArch64 hardware breakpoints. The nintendo switch has 6 hardware breakpoints, and 4 hardware watchpoints. The syscall has two behaviors depending on the value of hardware_breakpoint_id:&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id &amp;lt; 0x10, then it sets one of the AArch64 hardware breakpoints. Flags will go to DBGBCRn_EL1, and value to DBGBVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0x7F01E1. Furthermore, the kernel will or it with 0x4004, in order to set various security flags to guarantee the watchpoints only triggers for code in EL0. If the user asks for a Breakpoint Type of ContextIDR match, the kernel shall use the given debug_handle to set DBGBVRn_EL1 to the ContextID of the debugged process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id is between 0x10 and 0x20 (exclusive), then it sets one of the AArch64 hardware watchpoints. Flags will go to DBGWCRn_EL1, and the value to DBGWVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0xFF0F1FF9. Furthermore, the kernel will or it with 0x104004. This will set various security flags, and set the watchpoint type to be a Linked Watchpoint. This means that you need to link it to a Linked ContextIDR breakpoint. Check the ARM documentation for more information.&lt;br /&gt;
&lt;br /&gt;
Note that hardware_breakpoint_id 0 to 4 match only to Virtual Address, while hardware_breakpoint_id 5 and 6 match against either Virtual Address, ContextID, or VMID. As such, if you are configuring a breakpoint to link for a watchpoint, make sure you use hardware_breakpoint_id 5 or 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more documentation for hardware breakpoints, check out the AArch64 documentation for the [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488h/way1382455558968.html DBGBCRn_EL1 register] and the [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0488h/way1382455560629.html DBGWCRn_EL1 register]&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== ThreadContextRequestFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || NormalContext&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DeviceName_AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeviceName_AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceName_DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeviceName_DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeviceName_HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeviceName_HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || DeviceName_ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeviceName_MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || DeviceName_NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || DeviceName_NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DeviceName_PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || DeviceName_SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || DeviceName_VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DeviceName_VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || DeviceName_XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || DeviceName_XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DeviceName_TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DeviceName_PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DeviceName_DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || DeviceName_SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || DeviceName_SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || DeviceName_SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || DeviceName_SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || DeviceName_ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || DeviceName_GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || DeviceName_GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || DeviceName_PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeviceName_NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DeviceName_APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || DeviceName_SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || DeviceName_NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || DeviceName_HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || DeviceName_SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || DeviceName_AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || DeviceName_ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || DeviceName_TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || DeviceName_TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || DeviceName_TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || DeviceName_NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CodeMemoryOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CodeMemoryOperation_MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CodeMemoryOperation_MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CodeMemoryOperation_UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CodeMemoryOperation_UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LimitableResource_Memory&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LimitableResource_Threads&lt;br /&gt;
|-&lt;br /&gt;
| 2 || LimitableResource_Events&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LimitableResource_TransferMemories&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LimitableResource_Sessions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessInfoType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ProcessState|ProcessInfoType_ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProcessState_Created ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProcessState_CreatedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ProcessState_Started ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ProcessState_Crashed || Processes will not enter this state unless they were created with [[#CreateProcessInfo|EnableDebug]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ProcessState_StartedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ProcessState_Exiting ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ProcessState_Exited ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ProcessState_DebugSuspended ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugThreadParam_DynamicPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugThreadParam_SchedulingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugThreadParam_PreferredCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugThreadParam_CurrentCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugThreadParam_AffinityMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dynamic priority: output in out2&lt;br /&gt;
&lt;br /&gt;
Scheduling status: out1 contains bit0: is debug-suspended, bit1: is user-suspended (svcSetThreadActivity 1 or svcSetProcessActivity 1).&lt;br /&gt;
Out2 contains {suspended, idle, running, terminating} =&amp;gt; {5, 0, 1, 4}&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_PreferredCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_CurrentCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_AffinityMask: output in out1&lt;br /&gt;
&lt;br /&gt;
== CreateProcessInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || IsAarch64&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 || [2.0.0+] EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || UseSystemMemBlocks&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit7 || [4.0.0] ?&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit10-7 || [5.0.0+] PoolPartition (0=Application, 1=Applet, 2=Sysmodule, 3=Nvservices)&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit11 || [7.0.0+] Only allowed in combination with bit6.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle or zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 || || [3.0.0+] PersonalMmHeapNumPages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On [1.0.0] there&#039;s only one pool.&lt;br /&gt;
&lt;br /&gt;
On [2.0.0-4.0.0] PoolPartition is 1 for built-ins and 0 for rest.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] PoolPartition is specified in CreateProcessArgs. There are now 4 pool partitions.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] (maybe lower?) a zero ResourceLimitHandle defaults to sysmodule limits and 0x12300000 bytes of memory.&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Normal_32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal_36Bit || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || WithoutMap_32Bit || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] Normal_39Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || MemoryType: lower 8 bits of [[#MemoryState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || Permission (bit0: R, bit1: W, bit2: X)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsBorrowed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IsIpcMapped: when IpcRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || IsDeviceMapped: when DeviceRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsUncached&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || Type&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#svcSetMemoryPermission|PermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ForceReadWritableByDebugSyscalls&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IpcSendAllowed_Type0&lt;br /&gt;
|-&lt;br /&gt;
| 11 || IpcSendAllowed_Type3&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IpcSendAllowed_Type1&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#svcSetProcessMemoryPermission|ProcessPermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#svcMapMemory|MapAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#svcUnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#svcCreateTransferMemory|TransferMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#svcQueryPhysicalAddress|QueryPhysicalAddressAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || MapDeviceAllowed ([[#svcMapDeviceAddressSpace]] and [[#svcMapDeviceAddressSpaceByForce]])&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#svcMapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#svcSendSyncRequestWithUserBuffer|IpcBufferAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || IsPoolAllocated/IsReferenceCounted&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#svcMapProcessMemory|MapProcessAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#svcSetMemoryAttribute|AttributeChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] CodeMemoryAllowed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || MemoryType_Unmapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| MemoryType_Heap || Mapped using [[#svcSetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] MemoryType_Alias || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|MemoryType_IpcBuffer0]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || MemoryType_Stack || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || MemoryType_Reserved ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|MemoryType_IpcBuffer1]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|MemoryType_IpcBuffer3]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] MemoryType_CodeReadOnly || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] MemoryType_CodeWritable || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArbitrationType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || WaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || DecrementAndWaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || WaitIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignalType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Signal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || SignalAndIncrementIfEqual&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlagsOld ==&lt;br /&gt;
[1.0.0-2.3.0]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: ResumeAllThreads or debug-suspended-thread-id needed)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
[3.0.0+]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: doesn&#039;t need to be set in the same call than Resume)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || DontCatchExceptions&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Resume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || IgnoreOtherThreadsExceptions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren&#039;t in the input list. The affected threads are resumed.&lt;br /&gt;
&lt;br /&gt;
Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.&lt;br /&gt;
&lt;br /&gt;
If the input number of threads is 0, this means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
&lt;br /&gt;
The below table is for the Aarch64 version of the system call. For A32, all u64 fields but title/process/thread id are actually u32, making the structure 0x28-byte-big (0x40 for a64).&lt;br /&gt;
&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32|| Type (0=PausedThread, 1=RunningThread, 2=ExitedProcess, 3=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugEvent_AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugEvent_AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugEvent_ExitProcess&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugEvent_ExitThread&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugEvent_Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Exception_Trap (*)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Exception_InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Exception_DataAbortMisc (**)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Exception_PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception_DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exception_BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exception_UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Exception_DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Exception_BadSvcId&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Exception_SError [not in 1.0.0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Undefined instructions, software breakpoints, some other traps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Data aborts, FP traps, and everything else that doesn&#039;t belong to any of the above.&lt;br /&gt;
&lt;br /&gt;
Trap specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
First of all, a function that might be called by synchronous exception handler and that is called by the SError handler fetches the exception info, adjusts PC, panics on exceptions taken from EL1, then dispatches the exception.&lt;br /&gt;
&lt;br /&gt;
The dispatcher has two mutually exclusive exception reporting methods:&lt;br /&gt;
* by storing information at the start of the process&#039;s TLS memregion (TPIDRRO_EL0) and jumping back to the crt0&lt;br /&gt;
* by using KDebug&lt;br /&gt;
&lt;br /&gt;
KDebug dispatching is used when at least one of the following conditions are met:&lt;br /&gt;
* SMC ConfigItem KernelMemConfig bit 1 is NOT set (it isn&#039;t on retail), unless: this is a software or hardware breakpoint, or a watchpoint, or [4.0.0+?] the process is attached and this is a Google PNaCl trap instruction (see LLVM source)&lt;br /&gt;
* FAR doesn&#039;t point to a valid address in mapped-readable CodeStatic memory (i.e. this is the case for NRO and JIT memory) or this is one of the following exceptions (it particular, that doesn&#039;t include FP exceptions occurring in CodeStatic memory):&lt;br /&gt;
** Uncategorized&lt;br /&gt;
** IllegalState&lt;br /&gt;
** SupervisorCallA32&lt;br /&gt;
** SupervisorCallA64&lt;br /&gt;
** PCAlignment&lt;br /&gt;
** SPAlignment&lt;br /&gt;
** SError&lt;br /&gt;
** BreakpointLowerEl&lt;br /&gt;
** SoftwareStepLowerEl (note: no way set single-step flag; not parsed)&lt;br /&gt;
** WatchpointLowerEl&lt;br /&gt;
** SoftwareBreakpointA32 (note: not parsed)&lt;br /&gt;
** SoftwareBreakpointA64 (note: not parsed)&lt;br /&gt;
    &lt;br /&gt;
In all other cases the userland-handled exception path is taken.&lt;br /&gt;
&lt;br /&gt;
KDebug path:&lt;br /&gt;
&lt;br /&gt;
If the process is attached, the exception is reported to the KDebug. If the thread was continued using flag IgnoreExceptions, it returns from the exception as if nothing happened.&lt;br /&gt;
&lt;br /&gt;
If the latter is not the case, or if the process isn&#039;t attached, proceed to [2.0.0+] crash reporting (or in [1.0.0] just terminate the process): &lt;br /&gt;
if EnableDebug is set, and depending on the process state (more than one crash per process isn&#039;t permitted) it may signal itself with ProcessState_Crashed so that PM asks NS to start creport so that creport attaches to it and reports the crashes. Otherwise, just terminate.&lt;br /&gt;
&lt;br /&gt;
Userland reporting path and svcReturnFromException:&lt;br /&gt;
&lt;br /&gt;
TLS region start (A64):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x148 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x78 || ExceptionFrameA64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA64:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x48 (8*9) || GPRs 0..8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x8 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || pstate &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 0x8 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TLS region start (A32):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x178 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x44 || ExceptionFrameA32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA32:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 (8*4) || GPRs 0..7.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || tpidr_el0 = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || cpsr &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In that case, after storing the regs in the TLS, the exception handler returns to the application&#039;s crt0 (entrypoint), with X0=&amp;lt;error description code&amp;gt; (see below) and X1=SP=frame=&amp;lt;stack top&amp;gt; (see above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Desc. code || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || Instruction abort&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || Misaligned PC&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || Misaligned SP&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || SError [not in 1.0.0?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || Bad SVC&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || Uncategorized, CP15RTTrap, CP15RRTTrap, CP14RTTrap, CP14RRTTrap, IllegalState, SystemRegisterTrap&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || None of the above, EC &amp;lt;= 0x34 and not a breakpoint&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(During normal app boot the process is invoked with X0=0 and X1=main_thread_handle. The crt0 of retail apps determines whether to boot normally or handle an exception if X0 is set to 0 or not)&lt;br /&gt;
&lt;br /&gt;
The application is supposed to promptly update the contents of elr_el1 to a user handler (and any other regs it sees fit) and call svcReturnFromException (error code) to call that handler. The latter is then expected to promptly abort the program.&lt;br /&gt;
&lt;br /&gt;
svcReturnFromException updates the contents of the kernel stack frame with what the user provided in the TLS structure, sets TPIDR_EL0 to 1, then:&lt;br /&gt;
* if the provided error code is 0, gracefully pivots and returns from exception&lt;br /&gt;
* if it is not, replays the exception and pass it to the KDebug (see above). One can pass 0x10001 to prevent process termination. If the process is attached, this also prevents crash-collection/termination (different from the exception handler behavior)&lt;br /&gt;
&lt;br /&gt;
If an exception occurs from the above user handler, the entire exception handling process will repeat with the new exception.&lt;br /&gt;
&lt;br /&gt;
Note that if a thread that wasn&#039;t faulting calls svcReturnFromException, it signals an &amp;quot;invalid syscall&amp;quot; exception&lt;br /&gt;
&lt;br /&gt;
Note that [[SMC|IsDebugMode]] is not used during exception-handling, except for enabling printing a message to UART-A. This UART code causes a system-hang on retail (likely due to a loop that doesn&#039;t exit). This printing doesn&#039;t seem to run when the process is attached for debugging?&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=6161</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=6161"/>
		<updated>2019-01-31T00:04:37Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* META */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| META&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| ACID&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| ACI0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;META&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved (Padding / Unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| MmuFlags, bit0: 64-bit instructions, bits1-3: address space width (1=64-bit, 2=32-bit). Needs to be &amp;lt;= 0xF&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved (Padding / Unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main thread priority (0-63)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| DefaultCpuId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [3.0.0+] System resource size (max size as of 5.x: 534773760). The size of PersonalMmHeap.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| ProcessCategory (0: regular title, 1: kernel built-in). Should be 0 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main entrypoint stack size (Should(?) be page-aligned. In non-nspwn scenarios, values of 0 can also rarely break in Horizon. This might be something auto-adapting or a security feature of some sort?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Title name&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| Product code&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x30&lt;br /&gt;
| Reserved (Padding / Unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature, seems to verify the data starting at 0x100 with the size field from 0x204.&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key, seems to be used for the second [[NCA_Format|NCA]] signature.&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;ACID&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| s32 Size field used with the above signature(?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x4&lt;br /&gt;
| Zeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flags. Bit0 must be 1 on retail, on devunit 0 is also allowed. Bit1 is unknown, set to 1 for ARMS? [5.0.0+] Bit3-2: PoolPartition? For applets set to 0b01, for sysmodules set to 0b10. Exceptions: &amp;quot;starter&amp;quot; is set to 0, &amp;quot;nvservices&amp;quot; is set to 3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Max&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;ACI0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Zeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title id&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved (Not currently used, potentially to be used for lowest title ID in future.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Header =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version? Always 1. Must be non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Data Size (Always 0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of Content Owner ID section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Data size (0x1C) plus Content Owner size&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of Save Data owners section (for applications that wish to share save data?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| (OPTIONAL) Amount of content owner id&#039;s&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8 * Content Owner ID&#039;s&lt;br /&gt;
| Content owner ID&#039;s as uint64&#039;s.&lt;br /&gt;
|-&lt;br /&gt;
| VARIABLE&lt;br /&gt;
| 0x4&lt;br /&gt;
| Amount of save owner id&#039;s&lt;br /&gt;
|-&lt;br /&gt;
| VARIABLE&lt;br /&gt;
| 0x1 * Save data owner accessibilities (?)&lt;br /&gt;
| Sets flags for what save data owners can do with other applications save data (?)&lt;br /&gt;
|-&lt;br /&gt;
| VARIABLE (Pad to nearest 4 bytes)&lt;br /&gt;
| 0x8 * Amount of save owner ID&#039;s&lt;br /&gt;
| Save data owner ID&#039;s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Control =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version? Always 1. Must be non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x20&lt;br /&gt;
| Usually all zeroes for applications&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Filesystem_services#Permissions|Permissions]] bitmask:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| Enables access to [[Filesystem_services|Bis]] partitionID 27 and 28?&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission-types]] which check a bitmask have this bit set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For bit62 in permissions, see [[SPL_services#GetConfig|here]].&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to, with the following structure:&lt;br /&gt;
  +0: control_byte&lt;br /&gt;
  +1: {service-name without nul-terminator}&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x07 in control_byte is the {length of the service-name without nul-terminator} - 1.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x80 in control_byte means service is allowed to be registered.&lt;br /&gt;
&lt;br /&gt;
The service string can contain a wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= Kernel Access Control =&lt;br /&gt;
On Switch, descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Type&lt;br /&gt;
! Fields&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| KernelFlags&lt;br /&gt;
| Bit31-24: Highest allowed cpu id, bit23-16: Lowest allowed cpu id, bit15-10: Highest allowed thread prio, bit9-4: Lowest allowed thread prio&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| SyscallMask&lt;br /&gt;
| Bits 29-31: Syscall mask table index; Bits 5-28: Mask&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| MapIoOrNormalRange&lt;br /&gt;
| Bits 7-30: Alternating start page and number of pages, bit31: Alternating read-only flag then MemoryAttribute 0x2001/0x42002 selector flag&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| MapNormalPage (RW)&lt;br /&gt;
| Bits 8-31: Page&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| InterruptPair&lt;br /&gt;
| Bits 12-21: Irq0, bits 22-31: Irq1, 0x3FF means empty.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| ApplicationType&lt;br /&gt;
| Bit16-14: ApplicationType (0=sysmodule, 1=application, 2=applet), bit16 ignored. Parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| KernelReleaseVersion&lt;br /&gt;
| Bits 15-X: Version. The raw descriptor is compared with 0x80000, when less than an error is returned. This is equivalent to comparing the bits starting at bit15 with 0x10. This enforces a minimum required version, not a maximum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
| Bit25-16: Number of handles the table shall fit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| DebugFlags&lt;br /&gt;
| Bit17: can be debugged, bit18: can debug others&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Ignored&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mapping restrictions ==&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] For IO, this blacklist was abandoned and instead two range checks were added. For Normal mappings it is still applied&lt;br /&gt;
&lt;br /&gt;
== Kernel versions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Minimum Allowed&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0 || 9.3.0 || 3.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit31-19: Major version&lt;br /&gt;
Bit18-15: Minor version&lt;br /&gt;
Bit14-0: Zeroes&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=6134</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=6134"/>
		<updated>2019-01-29T18:39:04Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* svcGetInfo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || [[#svcSetHeapSize]] || W1=size || W0=result, X1=outaddr&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || [[#svcSetMemoryPermission]] || X0=addr, X1=size, W2=prot || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || [[#svcSetMemoryAttribute]] || X0=addr, X1=size, W2=state0, W3=state1 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || [[#svcMapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || [[#svcUnmapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || [[#svcQueryMemory]] || X0=MemoryInfo*, X2=addr || W0=result, W1=PageInfo                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || [[#svcExitProcess]] || None ||&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || [[#svcCreateThread]] || X1=entry, X2=thread_context, X3=stacktop, W4=prio, W5=processor_id  || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || [[#svcStartThread]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || [[#svcExitThread]] || None ||                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0xB || [[#svcSleepThread]] || X0=nano ||&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || [[#svcGetThreadPriority]] || W1=thread_handle || W0=result, W1=prio&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || [[#svcSetThreadPriority]] || W0=thread_handle, W1=prio || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || [[#svcGetThreadCoreMask]] || W2=thread_handle || W0=result, W1=out, X2=out&lt;br /&gt;
|-&lt;br /&gt;
|  0xF || [[#svcSetThreadCoreMask]] || W0=thread_handle, W1=in, X2=in2 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#svcGetCurrentProcessorNumber]] || None || W0/X0=cpuid&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || svcSignalEvent || W0=wevent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || svcClearEvent || W0=wevent_or_revent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || [[#svcMapSharedMemory]] || W0=shmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || svcUnmapSharedMemory || W0=shmem_handle, X1=addr, X2=size || W0=result                                                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || [[#svcCreateTransferMemory]] || X1=addr, X2=size, W3=perm || W0=result, W1=tmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || svcCloseHandle || W0=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || svcResetSignal || W0=revent_or_process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles. X3=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || [[#svcCancelSynchronization]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle ||                                     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || svcArbitrateUnlock || X0=ptr ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || svcWaitProcessWideKeyAtomic || X0=ptr0, X1=ptr, W2=thread_handle, X3=timeout || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || svcSignalProcessWideKey || X0=ptr, W1=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[#svcGetSystemTick]] || None || X0={value of cntpct_el0}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || svcConnectToNamedPort || X1=port_name_str || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || svcSendSyncRequestLight || W0=light_session_handle, X1=? || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || svcSendSyncRequest || X0=normal_session_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || [[#svcSendSyncRequestWithUserBuffer]] || X0=cmdbufptr, X1=size, X2=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || svcSendAsyncRequestWithUserBuffer || X1=cmdbufptr, X2=size, X3=handle || W0=result, W1=revent_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || svcGetProcessId || W1=thread_or_process_or_debug_handle || W0=result, X1=pid&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || svcGetThreadId || W1=thread_handle || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[#svcBreak]] || X0=break_reason,X1,X2=info || W0=result = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || svcOutputDebugString || X0=str, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || svcReturnFromException || X0=result || &lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || [[#svcGetInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || svcFlushEntireDataCache || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [3.0.0+] [[#svcMapPhysicalMemory]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || [3.0.0+] svcUnmapPhysicalMemory || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || [5.0.0+] svcGetFutureThreadInfo || X3=timeout || W0=result, bunch of crap&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || svcGetLastThreadInfo || None || W0=result, W1,W2,W3,W4=unk, W5=truncated_u64, W6=bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || svcGetResourceLimitLimitValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || svcGetResourceLimitCurrentValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || svcSetThreadActivity || W0=thread_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || svcGetThreadContext3 || X0=[[#ThreadContext]]*, W1=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [4.0.0+] svcWaitForAddress || X0=ptr, W1=[[#ArbitrationType]], X2=value X3=timeout ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || [4.0.0+] svcSignalToAddress || X0=ptr, W1=[[#SignalType]], X2=value W3=num_to_signal ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x3C || [[#svcDumpInfo]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || [4.0.0+] svcDumpInfoNew || ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || svcCreateSession || W2=is_light, X3=? || W0=result, W1=server_handle, W2=client_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || [[#svcAcceptSession]] || W1=port_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || [[#svcReplyAndReceive]] || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || svcCreateEvent || None || W0=result, W1=wevent_handle, W2=revent_handle&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x48 || [5.0.0+] [[#svcMapPhysicalMemoryUnsafe]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || [5.0.0+] svcUnmapPhysicalMemoryUnsafe || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || [5.0.0+] svcSetUnsafeLimit || X0=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || [4.0.0+] [[#svcCreateCodeMemory]] || X1=addr, X2=size || W0=result, W1=code_memory_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || [4.0.0+] [[#svcControlCodeMemory]] || W0=code_memory_handle, W1=[[#CodeMemoryOperation]], X2=dstaddr, X3=size, W4=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || svcSleepSystem || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || [[#svcReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val || W0=result, W1=out_val&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || svcSetProcessActivity || W0=process_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#svcCreateSharedMemory]] || W1=size, W2=myperm, W3=otherperm || W0=result, W1=shmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || [[#svcMapTransferMemory]] || X0=tmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || [[#svcUnmapTransferMemory]] || W0=tmemhandle, X1=addr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || [[#svcCreateInterruptEvent]] || X1=irq_num, W2=flag || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || [[#svcQueryPhysicalAddress]] || X1=addr || W0=result, X1=physaddr, X2=kerneladdr, X3=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || [[#svcQueryIoMapping]] || X1=physaddr, X2=size || W0=result, X1=virtaddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || [[#svcCreateDeviceAddressSpace]] || X1=dev_as_start_addr, X2=dev_as_end_addr || W0=result, W1=dev_as_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || [[#svcAttachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || [[#svcDetachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || [[#svcMapDeviceAddressSpaceByForce]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || [[#svcMapDeviceAddressSpaceAligned]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || svcMapDeviceAddressSpace || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || [[#svcUnmapDeviceAddressSpace]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || svcInvalidateProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || svcStoreProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || svcFlushProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || svcDebugActiveProcess || X1=pid || W0=result, W1=debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || svcBreakDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || svcTerminateDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || svcGetDebugEvent || X0=[[#DebugEventInfo]]*, W1=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || [[#svcContinueDebugEvent]] || [1.0.0-2.3.0] W0=debug_handle, W1=[[#ContinueDebugFlagsOld]], X2=thread_id &lt;br /&gt;
[3.0.0+] W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id_list(u64 *), W3=num_tids (max 64, 0 means &amp;quot;all threads&amp;quot;)&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out &lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || svcGetThreadList || X1=tids_out_ptr, W2=max_out, W3=debug_handle_or_zero || W0=result, X1=num_out&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || svcGetDebugThreadContext || X0=ThreadContext*, X1=debug_handle, X2=thread_id, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || svcSetDebugThreadContext || W0=debug_handle, X1=thread_id, X2=ThreadContext*, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || svcQueryDebugProcessMemory || X0=[[#MemoryInfo]]*, X2=debug_handle, X3=addr || W0=result, W1=PageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || svcReadDebugProcessMemory || X0=buffer*, X1=debug_handle, X2=src_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || svcWriteDebugProcessMemory || X0=debug_handle, X1=buffer*, X2=dst_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || [[#svcSetHardwareBreakPoint]] || W0=HardwareBreakpointId, X1=watchpoint_flags/breakpoint_flags, X2=watchpoint_value/debug_handle || &lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || svcGetDebugThreadParam || X2=debug_handle, X3=thread_id, W4=[[#DebugThreadParam]] || W0=result, X1=out0, W2=out1&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x6F || [5.0.0+] [[#svcGetSystemInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || svcCreatePort || W2=max_sessions, W3=is_light, X4=name_ptr || W0=result, W1=clientport_handle, W2=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || svcManageNamedPort || X1=name_ptr, W2=max_sessions || W0=result, W1=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || svcConnectToPort || W1=clientport_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || [[#svcSetProcessMemoryPermission]] || W0=process_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || [[#svcMapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || [[#svcUnmapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || [[#svcQueryProcessMemory]] || X0=meminfo_ptr, W2=process_handle, X3=addr || W0=result, W1=pageinfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || [[#svcMapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#svcUnmapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || [[#svcCreateProcess]] || X1=procinfo_ptr, X2=caps_ptr, W3=cap_num ||  W0=result, W1=process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || svcStartProcess || W0=process_handle, W1=main_thread_prio, W2=default_cpuid, W3=main_thread_stacksz || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || svcTerminateProcess || W0=process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || [[#svcGetProcessInfo]] || W0=process_handle, W1=[[#ProcessInfoType]] || W0=result, X1=[[#ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || svcCreateResourceLimit || None || W0=result, W1=reslimit_handle &lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || svcCallSecureMonitor || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args || X0,X1,X2,X3,X4,X5,X6,X7=result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || OutAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000 (2MB).&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d) is written to OutAddr.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than or equal to 4GB.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || Prot&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryAttribute ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || State0&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u32 || State1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change attribute of page-aligned memory region. &lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! State0 || State1 || Action&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Set bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0] This could be used to map into either the Alias Region or the Stack region.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This can only be used to map into the Stack region.&lt;br /&gt;
&lt;br /&gt;
Code can get the range of the Alias region from [[#svcGetInfo]] id0=2,3, and on 2.0.0+ the range of the Stack region via [[#svcGetInfo]] id0=14, 15 (on 1.0.0, the Stack region had hardcoded limits).&lt;br /&gt;
&lt;br /&gt;
When mapped into the Alias region, the mapped memory will have state 0x482907.&lt;br /&gt;
&lt;br /&gt;
When mapped into the Stack region, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps a region that was previously mapped with [[#svcMapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== svcQueryMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Query information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== svcExitProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== svcCreateThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || u32 || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Create a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
Processor_id must be 0,1,2,3 or -2, where -2 uses the default cpuid for process.&lt;br /&gt;
&lt;br /&gt;
== svcStartThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== svcExitThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== svcSleepThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || s64 || Nanoseconds&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Sleep for a specified amount of time, or yield thread.&lt;br /&gt;
&lt;br /&gt;
Setting nanoseconds to 0, -1, or -2 indicates a yielding type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Yielding without core migration&lt;br /&gt;
|-&lt;br /&gt;
| -1 || Yielding with core migration&lt;br /&gt;
|-&lt;br /&gt;
| -2 || Yielding to any other thread&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u32 || In0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || In1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetCurrentProcessorNumber ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0/X0 || u64 || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
Cpu-id is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== svcMapSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== svcCreateTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== svcWaitSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Works with num_handles &amp;lt;= 0x40.&lt;br /&gt;
&lt;br /&gt;
When zero handles are passed, this will wait forever until either timeout or cancellation occurs.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KDebug:&#039;&#039;&#039; signals when there is a new [[#DebugEventInfo|DebugEvent]] (retrievable via [[#svcGetDebugEvent]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KClientPort:&#039;&#039;&#039; signals when the number of sessions is less than the maximum allowed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KProcess:&#039;&#039;&#039; signals when the process undergoes a state change (retrievable via [[#svcGetProcessInfo]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KReadableEvent:&#039;&#039;&#039; signals when the event&#039;s corresponding KWritableEvent has been signaled via svcSignalEvent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerPort:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#svcAcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerSession:&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#svcReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KThread:&#039;&#039;&#039; signals when the thread has exited.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signaled before the timeout expired, or one of the objects is a Session with a closed remote. Handle index is updated to indicate which object signaled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x7601:&#039;&#039;&#039; Thread termination requested. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; Invalid address. Returned when the handles pointer is not a readable address. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signaled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xec01:&#039;&#039;&#039; Interrupted. Returned when another thread uses [[#svcCancelSynchronization]] to cancel this thread. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; Too many handles. Returned when the number of handles passed is &amp;gt; 0x40.&lt;br /&gt;
&lt;br /&gt;
== svcCancelSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the referenced thread is currently in a synchronization call ([[#svcWaitSynchronization]], [[#svcReplyAndReceive]] or [[#svcReplyAndReceiveLight]]), that call will be interrupted and return 0xec01.&lt;br /&gt;
If that thread is not currently executing such a synchronization call, the next call to a synchronization call will return 0xec01.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t take force-pause (activity/debug pause) into account.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The thread was either interrupted or has had its flag set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. The handle given was either invalid or not a thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemTick ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || u64 || Ticks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the value of cntpct_el0.&lt;br /&gt;
&lt;br /&gt;
The frequency is 19200000 Hz (constant from official sw).&lt;br /&gt;
&lt;br /&gt;
Official sw reads cntpct_el0 directly from usermode without using this SVC. [[ExeFS|sdk-nso]] has this SVC, but it&#039;s not known to be called anywhere.&lt;br /&gt;
&lt;br /&gt;
== svcSendSyncRequestWithUserBuffer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || CmdPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and CmdPtr must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xcc01:&#039;&#039;&#039; CmdPtr is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xca01:&#039;&#039;&#039; Size is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xce01:&#039;&#039;&#039; KSessionRequest allocation failed (unlikely) or pointer buffer size exceeded.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Handles does not exist, or handle is not an instance of KClientSession.&lt;br /&gt;
&lt;br /&gt;
== svcBreak ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Break Reason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || Result || 0 (Success)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the process is attached, report the Break event. Then, if svcContinueDebugEvent didn&#039;t apply IgnoreException on the thread: if TPIDR_EL0 is 0, adjust ELR_EL1 to retry to svc instruction (and set TPIDR_EL0 to 1).&lt;br /&gt;
&lt;br /&gt;
Otherwise, if bit31 in reason isn&#039;t set, perform crash reporting (see Exception Handling section below), if it doesn&#039;t terminate the process adjust ELR_EL1 as well.&lt;br /&gt;
&lt;br /&gt;
Otherwise just return 0.&lt;br /&gt;
&lt;br /&gt;
== svcGetInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || AliasRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || AliasRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemoryAvailable. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || TotalMemoryUsage. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || IsCurrentProcessBeingDebugged&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || Returns ResourceLimit handle for current process. Used by [[Process_Manager_services|PM]].&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy from current process. TRNG. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AddressSpaceBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] StackRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] StackRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] PersonalMmHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] PersonalMmHeapUsage&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] TitleId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0-4.1.0] PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0-4.1.0] PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Process || 20 || 0 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 21 || 0 || [6.0.0+] MemoryUsageSomething0&lt;br /&gt;
|-&lt;br /&gt;
| Process || 22 || 0 || [6.0.0+] MemoryUsageSomething1&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 0xF0000002 || 0 || Performance counter related.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemory ==&lt;br /&gt;
This is like svcSetHeapSize except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcDumpInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Does nothing, just returns with registers set to all-zero.&lt;br /&gt;
&lt;br /&gt;
== svcAcceptSession ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || Port&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || Session&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== svcReplyAndReceive ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || *Handle&amp;lt;Port or ServerSession&amp;gt; || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTarget&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 (nanoseconds) || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is zero, the TLS should contain a blank message. If this message has a C descriptor, the buffer it points to will be used as the pointer buffer. See [[IPC_Marshalling#IPC_buffers]]. Note that a pointer buffer cannot be specified if ReplyTarget is not zero.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemoryUnsafe ==&lt;br /&gt;
Same as [[#svcMapPhysicalMemory]] except it always uses pool partition 0.&lt;br /&gt;
&lt;br /&gt;
== svcCreateCodeMemory ==&lt;br /&gt;
Takes an address range with backing memory to create the code memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== svcControlCodeMemory ==&lt;br /&gt;
Maps the backing memory for a Code memory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#CodeMemoryOperation|CodeMemoryOperation_UnmapOwner/CodeMemoryOperation_UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the code memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Error 0xE401 is now returned when the process owner of the Code memory object is the same as the current process.&lt;br /&gt;
&lt;br /&gt;
== svcReadWriteRegister ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || RegAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u64 || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1|| u64 || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by smcReadWriteRegister (checked in addition to the whitelist in svcReadWriteRegister), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== svcCreateSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || LocalPerm&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || RemotePerm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
Allocates memory from the current process&#039; pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcMapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The newly mapped pages will have [[#MemoryState]] type 0xE.&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in svcCreateMemoryMirror, otherwise error.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcCreateInterruptEvent ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || IrqNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || bool || Flags&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an event handle for the given IRQ number. Waiting on this handle will wait until the IRQ is triggered. The flags argument configures the triggering. If it is false, the IRQ is active HIGH level sensitive, if it is true it is rising-edge sensitive.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Flags was &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF201:&#039;&#039;&#039; IRQ above 0x3FF or outside the [[NPDM#Kernel_Access_Control|IRQ access mask]] was given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; A SlabHeap was exhausted (too many interrupts created).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF401:&#039;&#039;&#039; IRQ already has an event registered.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD201:&#039;&#039;&#039; The handle table is full. Try closing some handles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcQueryPhysicalAddress ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || KernelAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || u64 || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcQueryIoMapping ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || void* || VirtAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== svcCreateDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || StartAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || EndAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || AddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
dev_as_start_addr is normally set to 0 and dev_as_end_addr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== svcAttachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcDetachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceByForce ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
dev_map_addr is the userspace destination address, while dev_as_addr is the source address between dev_as_start_addr and dev_as_end_addr (passed to [[#svcCreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|MapDeviceAllowed]] bit set. Bit [[SVC#MemoryAttribute|IsDeviceMapped]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceAligned ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#svcMapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|MapDeviceAlignedAllowed]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== svcContinueDebugEvent ==&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The process has been resumed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid debug handle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf401:&#039;&#039;&#039; Process has debug events queued.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 0 || TotalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 1 || TotalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 2 || TotalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 3 || TotalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 0 || CurrentMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 1 || CurrentMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 2 || CurrentMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 3 || CurrentMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 0 || PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 1 || PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetProcessMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || void* || Perm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcQueryProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#svcQueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcCreateProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessInfo]]* || InfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u32* || CapabilitiesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessInfo]] as input.&lt;br /&gt;
CapabilitiesPtr points to an array of [[NPDM#Kernel_Access_Control|kernel capabilities]].&lt;br /&gt;
CapabilitiesNum is a number of capabilities in the CapabilitiesPtr array (number of element, not number of bytes).&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Attempted to map more code pages than available in address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Provided CodeAddr is invalid (make sure it&#039;s in range?)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The resource handle passed is invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE601:&#039;&#039;&#039; Attempt to copy procinfo from user-supplied pointer failed. Attempt to copy capabilities_num from user-supplied pointer failed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE801:&#039;&#039;&#039; Attempted to create a 32-bit process with a 36-bit address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Unused bits are set in mmuflags. Unknown address space type used.&lt;br /&gt;
&lt;br /&gt;
== svcGetProcessInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#ProcessState]] || State&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* svcBreakDebugProcess&lt;br /&gt;
* svcContinueDebugEvent&lt;br /&gt;
* svcWriteDebugProcessMemory&lt;br /&gt;
* svcSetDebugThreadContext&lt;br /&gt;
* svcTerminateDebugProcess&lt;br /&gt;
* svcSetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
svcDebugActiveProcess stops execution of the target process, the normal method for resuming it requires svcContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
== svcSetHardwareBreakPoint ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || u32 || hardware_breakpoint_id&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || flags&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets one of the AArch64 hardware breakpoints. The nintendo switch has 6 hardware breakpoints, and 4 hardware watchpoints. The syscall has two behaviors depending on the value of hardware_breakpoint_id:&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id &amp;lt; 0x10, then it sets one of the AArch64 hardware breakpoints. Flags will go to DBGBCRn_EL1, and value to DBGBVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0x7F01E1. Furthermore, the kernel will or it with 0x4004, in order to set various security flags to guarantee the watchpoints only triggers for code in EL0. If the user asks for a Breakpoint Type of ContextIDR match, the kernel shall use the given debug_handle to set DBGBVRn_EL1 to the ContextID of the debugged process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id is between 0x10 and 0x20 (exclusive), then it sets one of the AArch64 hardware watchpoints. Flags will go to DBGWCRn_EL1, and the value to DBGWVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0xFF0F1FF9. Furthermore, the kernel will or it with 0x104004. This will set various security flags, and set the watchpoint type to be a Linked Watchpoint. This means that you need to link it to a Linked ContextIDR breakpoint. Check the ARM documentation for more information.&lt;br /&gt;
&lt;br /&gt;
Note that hardware_breakpoint_id 0 to 4 match only to Virtual Address, while hardware_breakpoint_id 5 and 6 match against either Virtual Address, ContextID, or VMID. As such, if you are configuring a breakpoint to link for a watchpoint, make sure you use hardware_breakpoint_id 5 or 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more documentation for hardware breakpoints, check out the AArch64 documentation for the [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488h/way1382455558968.html DBGBCRn_EL1 register] and the [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0488h/way1382455560629.html DBGWCRn_EL1 register]&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== ThreadContextRequestFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || NormalContext&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DeviceName_AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeviceName_AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceName_DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeviceName_DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeviceName_HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeviceName_HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || DeviceName_ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeviceName_MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || DeviceName_NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || DeviceName_NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DeviceName_PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || DeviceName_SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || DeviceName_VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DeviceName_VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || DeviceName_XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || DeviceName_XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DeviceName_TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DeviceName_PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DeviceName_DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || DeviceName_SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || DeviceName_SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || DeviceName_SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || DeviceName_SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || DeviceName_ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || DeviceName_GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || DeviceName_GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || DeviceName_PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeviceName_NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DeviceName_APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || DeviceName_SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || DeviceName_NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || DeviceName_HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || DeviceName_SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || DeviceName_AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || DeviceName_ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || DeviceName_TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || DeviceName_TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || DeviceName_TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || DeviceName_NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CodeMemoryOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CodeMemoryOperation_MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CodeMemoryOperation_MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CodeMemoryOperation_UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CodeMemoryOperation_UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LimitableResource_Memory&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LimitableResource_Threads&lt;br /&gt;
|-&lt;br /&gt;
| 2 || LimitableResource_Events&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LimitableResource_TransferMemories&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LimitableResource_Sessions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessInfoType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ProcessState|ProcessInfoType_ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProcessState_Created ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProcessState_CreatedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ProcessState_Started ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ProcessState_Crashed || Processes will not enter this state unless they were created with [[#CreateProcessInfo|EnableDebug]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ProcessState_StartedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ProcessState_Exiting ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ProcessState_Exited ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ProcessState_DebugSuspended ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugThreadParam_DynamicPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugThreadParam_SchedulingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugThreadParam_PreferredCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugThreadParam_CurrentCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugThreadParam_AffinityMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dynamic priority: output in out2&lt;br /&gt;
&lt;br /&gt;
Scheduling status: out1 contains bit0: is debug-suspended, bit1: is user-suspended (svcSetThreadActivity 1 or svcSetProcessActivity 1).&lt;br /&gt;
Out2 contains {suspended, idle, running, terminating} =&amp;gt; {5, 0, 1, 4}&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_PreferredCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_CurrentCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_AffinityMask: output in out1&lt;br /&gt;
&lt;br /&gt;
== CreateProcessInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || IsAarch64&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 || [2.0.0+] EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || UseSystemMemBlocks&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit7 || [4.0.0] ?&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit10-7 || [5.0.0+] PoolPartition (0=Application, 1=Applet, 2=Sysmodule, 3=Nvservices)&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit11 || [7.0.0+] Not used? Only allowed in combination with bit6.&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit12 || [7.0.0+] Not used?&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle or zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 || || [3.0.0+] PersonalMmHeapNumPages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On [1.0.0] there&#039;s only one pool.&lt;br /&gt;
&lt;br /&gt;
On [2.0.0-4.0.0] PoolPartition is 1 for built-ins and 0 for rest.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] PoolPartition is specified in CreateProcessArgs. There are now 4 pool partitions.&lt;br /&gt;
&lt;br /&gt;
On [6.0.0] (maybe lower?) a zero ResourceLimitHandle defaults to sysmodule limits and 0x12300000 bytes of memory.&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Normal_32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal_36Bit || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || WithoutMap_32Bit || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] Normal_39Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || MemoryType: lower 8 bits of [[#MemoryState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || Permission (bit0: R, bit1: W, bit2: X)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsBorrowed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IsIpcMapped: when IpcRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || IsDeviceMapped: when DeviceRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsUncached&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || Type&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#svcSetMemoryPermission|PermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ForceReadWritableByDebugSyscalls&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IpcSendAllowed_Type0&lt;br /&gt;
|-&lt;br /&gt;
| 11 || IpcSendAllowed_Type3&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IpcSendAllowed_Type1&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#svcSetProcessMemoryPermission|ProcessPermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#svcMapMemory|MapAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#svcUnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#svcCreateTransferMemory|TransferMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#svcQueryPhysicalAddress|QueryPhysicalAddressAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || MapDeviceAllowed ([[#svcMapDeviceAddressSpace]] and [[#svcMapDeviceAddressSpaceByForce]])&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#svcMapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#svcSendSyncRequestWithUserBuffer|IpcBufferAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || IsPoolAllocated/IsReferenceCounted&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#svcMapProcessMemory|MapProcessAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#svcSetMemoryAttribute|AttributeChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] CodeMemoryAllowed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || MemoryType_Unmapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| MemoryType_Heap || Mapped using [[#svcSetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] MemoryType_Alias || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|MemoryType_IpcBuffer0]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || MemoryType_Stack || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || MemoryType_Reserved ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|MemoryType_IpcBuffer1]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|MemoryType_IpcBuffer3]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] MemoryType_CodeReadOnly || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] MemoryType_CodeWritable || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArbitrationType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || WaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || DecrementAndWaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || WaitIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignalType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Signal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || SignalAndIncrementIfEqual&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlagsOld ==&lt;br /&gt;
[1.0.0-2.3.0]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: ResumeAllThreads or debug-suspended-thread-id needed)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
[3.0.0+]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: doesn&#039;t need to be set in the same call than Resume)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || DontCatchExceptions&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Resume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || IgnoreOtherThreadsExceptions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren&#039;t in the input list. The affected threads are resumed.&lt;br /&gt;
&lt;br /&gt;
Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.&lt;br /&gt;
&lt;br /&gt;
If the input number of threads is 0, this means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
&lt;br /&gt;
The below table is for the Aarch64 version of the system call. For A32, all u64 fields but title/process/thread id are actually u32, making the structure 0x28-byte-big (0x40 for a64).&lt;br /&gt;
&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32|| Type (0=PausedThread, 1=RunningThread, 2=ExitedProcess, 3=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugEvent_AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugEvent_AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugEvent_ExitProcess&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugEvent_ExitThread&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugEvent_Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Exception_Trap (*)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Exception_InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Exception_DataAbortMisc (**)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Exception_PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception_DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exception_BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exception_UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Exception_DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Exception_BadSvcId&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Exception_SError [not in 1.0.0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Undefined instructions, software breakpoints, some other traps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Data aborts, FP traps, and everything else that doesn&#039;t belong to any of the above.&lt;br /&gt;
&lt;br /&gt;
Trap specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
First of all, a function that might be called by synchronous exception handler and that is called by the SError handler fetches the exception info, adjusts PC, panics on exceptions taken from EL1, then dispatches the exception.&lt;br /&gt;
&lt;br /&gt;
The dispatcher has two mutually exclusive exception reporting methods:&lt;br /&gt;
* by storing information at the start of the process&#039;s TLS memregion (TPIDRRO_EL0) and jumping back to the crt0&lt;br /&gt;
* by using KDebug&lt;br /&gt;
&lt;br /&gt;
KDebug dispatching is used when at least one of the following conditions are met:&lt;br /&gt;
* SMC ConfigItem KernelMemConfig bit 1 is NOT set (it isn&#039;t on retail), unless: this is a software or hardware breakpoint, or a watchpoint, or [4.0.0+?] the process is attached and this is a Google PNaCl trap instruction (see LLVM source)&lt;br /&gt;
* FAR doesn&#039;t point to a valid address in mapped-readable CodeStatic memory (i.e. this is the case for NRO and JIT memory) or this is one of the following exceptions (it particular, that doesn&#039;t include FP exceptions occurring in CodeStatic memory):&lt;br /&gt;
** Uncategorized&lt;br /&gt;
** IllegalState&lt;br /&gt;
** SupervisorCallA32&lt;br /&gt;
** SupervisorCallA64&lt;br /&gt;
** PCAlignment&lt;br /&gt;
** SPAlignment&lt;br /&gt;
** SError&lt;br /&gt;
** BreakpointLowerEl&lt;br /&gt;
** SoftwareStepLowerEl (note: no way set single-step flag; not parsed)&lt;br /&gt;
** WatchpointLowerEl&lt;br /&gt;
** SoftwareBreakpointA32 (note: not parsed)&lt;br /&gt;
** SoftwareBreakpointA64 (note: not parsed)&lt;br /&gt;
    &lt;br /&gt;
In all other cases the userland-handled exception path is taken.&lt;br /&gt;
&lt;br /&gt;
KDebug path:&lt;br /&gt;
&lt;br /&gt;
If the process is attached, the exception is reported to the KDebug. If the thread was continued using flag IgnoreExceptions, it returns from the exception as if nothing happened.&lt;br /&gt;
&lt;br /&gt;
If the latter is not the case, or if the process isn&#039;t attached, proceed to [2.0.0+] crash reporting (or in [1.0.0] just terminate the process): &lt;br /&gt;
if EnableDebug is set, and depending on the process state (more than one crash per process isn&#039;t permitted) it may signal itself with ProcessState_Crashed so that PM asks NS to start creport so that creport attaches to it and reports the crashes. Otherwise, just terminate.&lt;br /&gt;
&lt;br /&gt;
Userland reporting path and svcReturnFromException:&lt;br /&gt;
&lt;br /&gt;
TLS region start (A64):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x148 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x78 || ExceptionFrameA64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA64:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x48 (8*9) || GPRs 0..8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x8 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || pstate &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 0x8 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TLS region start (A32):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x178 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x44 || ExceptionFrameA32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA32:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 (8*4) || GPRs 0..7.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || tpidr_el0 = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || cpsr &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In that case, after storing the regs in the TLS, the exception handler returns to the application&#039;s crt0 (entrypoint), with X0=&amp;lt;error description code&amp;gt; (see below) and X1=SP=frame=&amp;lt;stack top&amp;gt; (see above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Desc. code || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || Instruction abort&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || Misaligned PC&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || Misaligned SP&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || SError [not in 1.0.0?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || Bad SVC&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || Uncategorized, CP15RTTrap, CP15RRTTrap, CP14RTTrap, CP14RRTTrap, IllegalState, SystemRegisterTrap&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || None of the above, EC &amp;lt;= 0x34 and not a breakpoint&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(During normal app boot the process is invoked with X0=0 and X1=main_thread_handle. The crt0 of retail apps determines whether to boot normally or handle an exception if X0 is set to 0 or not)&lt;br /&gt;
&lt;br /&gt;
The application is supposed to promptly update the contents of elr_el1 to a user handler (and any other regs it sees fit) and call svcReturnFromException (error code) to call that handler. The latter is then expected to promptly abort the program.&lt;br /&gt;
&lt;br /&gt;
svcReturnFromException updates the contents of the kernel stack frame with what the user provided in the TLS structure, sets TPIDR_EL0 to 1, then:&lt;br /&gt;
* if the provided error code is 0, gracefully pivots and returns from exception&lt;br /&gt;
* if it is not, replays the exception and pass it to the KDebug (see above). One can pass 0x10001 to prevent process termination. If the process is attached, this also prevents crash-collection/termination (different from the exception handler behavior)&lt;br /&gt;
&lt;br /&gt;
If an exception occurs from the above user handler, the entire exception handling process will repeat with the new exception.&lt;br /&gt;
&lt;br /&gt;
Note that if a thread that wasn&#039;t faulting calls svcReturnFromException, it signals an &amp;quot;invalid syscall&amp;quot; exception&lt;br /&gt;
&lt;br /&gt;
Note that [[SMC|IsDebugMode]] is not used during exception-handling, except for enabling printing a message to UART-A. This UART code causes a system-hang on retail (likely due to a loop that doesn&#039;t exit). This printing doesn&#039;t seem to run when the process is attached for debugging?&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=6101</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=6101"/>
		<updated>2019-01-29T02:50:31Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || [[#svcSetHeapSize]] || W1=size || W0=result, X1=outaddr&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || [[#svcSetMemoryPermission]] || X0=addr, X1=size, W2=prot || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || [[#svcSetMemoryAttribute]] || X0=addr, X1=size, W2=state0, W3=state1 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || [[#svcMapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || [[#svcUnmapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || [[#svcQueryMemory]] || X0=MemoryInfo*, X2=addr || W0=result, W1=PageInfo                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || [[#svcExitProcess]] || None ||&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || [[#svcCreateThread]] || X1=entry, X2=thread_context, X3=stacktop, W4=prio, W5=processor_id  || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || [[#svcStartThread]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || [[#svcExitThread]] || None ||                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0xB || [[#svcSleepThread]] || X0=nano ||&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || [[#svcGetThreadPriority]] || W1=thread_handle || W0=result, W1=prio&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || [[#svcSetThreadPriority]] || W0=thread_handle, W1=prio || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || [[#svcGetThreadCoreMask]] || W2=thread_handle || W0=result, W1=out, X2=out&lt;br /&gt;
|-&lt;br /&gt;
|  0xF || [[#svcSetThreadCoreMask]] || W0=thread_handle, W1=in, X2=in2 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#svcGetCurrentProcessorNumber]] || None || W0/X0=cpuid&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || svcSignalEvent || W0=wevent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || svcClearEvent || W0=wevent_or_revent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || [[#svcMapSharedMemory]] || W0=shmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || svcUnmapSharedMemory || W0=shmem_handle, X1=addr, X2=size || W0=result                                                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || [[#svcCreateTransferMemory]] || X1=addr, X2=size, W3=perm || W0=result, W1=tmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || svcCloseHandle || W0=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || svcResetSignal || W0=revent_or_process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles. X3=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || [[#svcCancelSynchronization]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle ||                                     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || svcArbitrateUnlock || X0=ptr ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || svcWaitProcessWideKeyAtomic || X0=ptr0, X1=ptr, W2=thread_handle, X3=timeout || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || svcSignalProcessWideKey || X0=ptr, W1=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[#svcGetSystemTick]] || None || X0={value of cntpct_el0}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || svcConnectToNamedPort || X1=port_name_str || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || svcSendSyncRequestLight || W0=light_session_handle, X1=? || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || svcSendSyncRequest || X0=normal_session_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || [[#svcSendSyncRequestWithUserBuffer]] || X0=cmdbufptr, X1=size, X2=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || svcSendAsyncRequestWithUserBuffer || X1=cmdbufptr, X2=size, X3=handle || W0=result, W1=revent_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || svcGetProcessId || W1=thread_or_process_or_debug_handle || W0=result, X1=pid&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || svcGetThreadId || W1=thread_handle || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[#svcBreak]] || X0=break_reason,X1,X2=info || W0=result = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || svcOutputDebugString || X0=str, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || svcReturnFromException || X0=result || &lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || [[#svcGetInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || svcFlushEntireDataCache || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [3.0.0+] [[#svcMapPhysicalMemory]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || [3.0.0+] svcUnmapPhysicalMemory || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || [5.0.0+] svcGetFutureThreadInfo || X3=timeout || W0=result, bunch of crap&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || svcGetLastThreadInfo || None || W0=result, W1,W2,W3,W4=unk, W5=truncated_u64, W6=bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || svcGetResourceLimitLimitValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || svcGetResourceLimitCurrentValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || svcSetThreadActivity || W0=thread_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || svcGetThreadContext3 || X0=[[#ThreadContext]]*, W1=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [4.0.0+] svcWaitForAddress || X0=ptr, W1=[[#ArbitrationType]], X2=value X3=timeout ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || [4.0.0+] svcSignalToAddress || X0=ptr, W1=[[#SignalType]], X2=value W3=num_to_signal ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x3C || [[#svcDumpInfo]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || [4.0.0+] svcDumpInfoNew || ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || svcCreateSession || W2=is_light, X3=? || W0=result, W1=server_handle, W2=client_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || [[#svcAcceptSession]] || W1=port_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || [[#svcReplyAndReceive]] || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || svcCreateEvent || None || W0=result, W1=wevent_handle, W2=revent_handle&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x48 || [5.0.0+] [[#svcMapPhysicalMemoryUnsafe]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || [5.0.0+] svcUnmapPhysicalMemoryUnsafe || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || [5.0.0+] svcSetUnsafeLimit || X0=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || [4.0.0+] [[#svcCreateCodeMemory]] || X1=addr, X2=size || W0=result, W1=code_memory_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || [4.0.0+] [[#svcControlCodeMemory]] || W0=code_memory_handle, W1=[[#CodeMemoryOperation]], X2=dstaddr, X3=size, W4=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || svcSleepSystem || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || [[#svcReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val || W0=result, W1=out_val&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || svcSetProcessActivity || W0=process_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#svcCreateSharedMemory]] || W1=size, W2=myperm, W3=otherperm || W0=result, W1=shmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || [[#svcMapTransferMemory]] || X0=tmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || [[#svcUnmapTransferMemory]] || W0=tmemhandle, X1=addr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || [[#svcCreateInterruptEvent]] || X1=irq_num, W2=flag || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || [[#svcQueryPhysicalAddress]] || X1=addr || W0=result, X1=physaddr, X2=kerneladdr, X3=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || [[#svcQueryIoMapping]] || X1=physaddr, X2=size || W0=result, X1=virtaddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || [[#svcCreateDeviceAddressSpace]] || X1=dev_as_start_addr, X2=dev_as_end_addr || W0=result, W1=dev_as_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || [[#svcAttachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || [[#svcDetachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || [[#svcMapDeviceAddressSpaceByForce]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || [[#svcMapDeviceAddressSpaceAligned]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || svcMapDeviceAddressSpace || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || [[#svcUnmapDeviceAddressSpace]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || svcInvalidateProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || svcStoreProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || svcFlushProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || svcDebugActiveProcess || X1=pid || W0=result, W1=debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || svcBreakDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || svcTerminateDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || svcGetDebugEvent || X0=[[#DebugEventInfo]]*, W1=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || [[#svcContinueDebugEvent]] || [1.0.0-2.3.0] W0=debug_handle, W1=[[#ContinueDebugFlagsOld]], X2=thread_id &lt;br /&gt;
[3.0.0+] W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id_list(u64 *), W3=num_tids (max 64, 0 means &amp;quot;all threads&amp;quot;)&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out &lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || svcGetThreadList || X1=tids_out_ptr, W2=max_out, W3=debug_handle_or_zero || W0=result, X1=num_out&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || svcGetDebugThreadContext || X0=ThreadContext*, X1=debug_handle, X2=thread_id, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || svcSetDebugThreadContext || W0=debug_handle, X1=thread_id, X2=ThreadContext*, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || svcQueryDebugProcessMemory || X0=[[#MemoryInfo]]*, X2=debug_handle, X3=addr || W0=result, W1=PageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || svcReadDebugProcessMemory || X0=buffer*, X1=debug_handle, X2=src_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || svcWriteDebugProcessMemory || X0=debug_handle, X1=buffer*, X2=dst_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || [[#svcSetHardwareBreakPoint]] || W0=HardwareBreakpointId, X1=watchpoint_flags/breakpoint_flags, X2=watchpoint_value/debug_handle || &lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || svcGetDebugThreadParam || X2=debug_handle, X3=thread_id, W4=[[#DebugThreadParam]] || W0=result, X1=out0, W2=out1&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x6F || [5.0.0+] [[#svcGetSystemInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || svcCreatePort || W2=max_sessions, W3=is_light, X4=name_ptr || W0=result, W1=clientport_handle, W2=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || svcManageNamedPort || X1=name_ptr, W2=max_sessions || W0=result, W1=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || svcConnectToPort || W1=clientport_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || [[#svcSetProcessMemoryPermission]] || W0=process_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || [[#svcMapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || [[#svcUnmapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || [[#svcQueryProcessMemory]] || X0=meminfo_ptr, W2=process_handle, X3=addr || W0=result, W1=pageinfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || [[#svcMapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#svcUnmapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || [[#svcCreateProcess]] || X1=procinfo_ptr, X2=caps_ptr, W3=cap_num ||  W0=result, W1=process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || svcStartProcess || W0=process_handle, W1=main_thread_prio, W2=default_cpuid, W3=main_thread_stacksz || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || svcTerminateProcess || W0=process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || [[#svcGetProcessInfo]] || W0=process_handle, W1=[[#ProcessInfoType]] || W0=result, X1=[[#ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || svcCreateResourceLimit || None || W0=result, W1=reslimit_handle &lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || svcCallSecureMonitor || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args || X0,X1,X2,X3,X4,X5,X6,X7=result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || OutAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000 (2MB).&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d) is written to OutAddr.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than or equal to 4GB.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || Prot&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryAttribute ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || State0&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u32 || State1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change attribute of page-aligned memory region. &lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! State0 || State1 || Action&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Set bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0] This could be used to map into either the Alias Region or the Stack region.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This can only be used to map into the Stack region.&lt;br /&gt;
&lt;br /&gt;
Code can get the range of the Alias region from [[#svcGetInfo]] id0=2,3, and on 2.0.0+ the range of the Stack region via [[#svcGetInfo]] id0=14, 15 (on 1.0.0, the Stack region had hardcoded limits).&lt;br /&gt;
&lt;br /&gt;
When mapped into the Alias region, the mapped memory will have state 0x482907.&lt;br /&gt;
&lt;br /&gt;
When mapped into the Stack region, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps a region that was previously mapped with [[#svcMapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== svcQueryMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Query information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== svcExitProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== svcCreateThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || u32 || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Create a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
Processor_id must be 0,1,2,3 or -2, where -2 uses the default cpuid for process.&lt;br /&gt;
&lt;br /&gt;
== svcStartThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== svcExitThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== svcSleepThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || s64 || Nanoseconds&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Sleep for a specified amount of time, or yield thread.&lt;br /&gt;
&lt;br /&gt;
Setting nanoseconds to 0, -1, or -2 indicates a yielding type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Yielding without core migration&lt;br /&gt;
|-&lt;br /&gt;
| -1 || Yielding with core migration&lt;br /&gt;
|-&lt;br /&gt;
| -2 || Yielding to any other thread&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u32 || In0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || In1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetCurrentProcessorNumber ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0/X0 || u64 || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
Cpu-id is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== svcMapSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== svcCreateTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== svcWaitSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Works with num_handles &amp;lt;= 0x40.&lt;br /&gt;
&lt;br /&gt;
When zero handles are passed, this will wait forever until either timeout or cancellation occurs.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KDebug:&#039;&#039;&#039; signals when there is a new [[#DebugEventInfo|DebugEvent]] (retrievable via [[#svcGetDebugEvent]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KClientPort:&#039;&#039;&#039; signals when the number of sessions is less than the maximum allowed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KProcess:&#039;&#039;&#039; signals when the process undergoes a state change (retrievable via [[#svcGetProcessInfo]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KReadableEvent:&#039;&#039;&#039; signals when the event&#039;s corresponding KWritableEvent has been signaled via svcSignalEvent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerPort:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#svcAcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerSession:&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#svcReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KThread:&#039;&#039;&#039; signals when the thread has exited.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signaled before the timeout expired, or one of the objects is a Session with a closed remote. Handle index is updated to indicate which object signaled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x7601:&#039;&#039;&#039; Thread termination requested. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; Invalid address. Returned when the handles pointer is not a readable address. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signaled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xec01:&#039;&#039;&#039; Interrupted. Returned when another thread uses [[#svcCancelSynchronization]] to cancel this thread. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; Too many handles. Returned when the number of handles passed is &amp;gt; 0x40.&lt;br /&gt;
&lt;br /&gt;
== svcCancelSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the referenced thread is currently in a synchronization call ([[#svcWaitSynchronization]], [[#svcReplyAndReceive]] or [[#svcReplyAndReceiveLight]]), that call will be interrupted and return 0xec01.&lt;br /&gt;
If that thread is not currently executing such a synchronization call, the next call to a synchronization call will return 0xec01.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t take force-pause (activity/debug pause) into account.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The thread was either interrupted or has had its flag set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. The handle given was either invalid or not a thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemTick ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || u64 || Ticks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the value of cntpct_el0.&lt;br /&gt;
&lt;br /&gt;
The frequency is 19200000 Hz (constant from official sw).&lt;br /&gt;
&lt;br /&gt;
Official sw reads cntpct_el0 directly from usermode without using this SVC. [[ExeFS|sdk-nso]] has this SVC, but it&#039;s not known to be called anywhere.&lt;br /&gt;
&lt;br /&gt;
== svcSendSyncRequestWithUserBuffer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || CmdPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and CmdPtr must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xcc01:&#039;&#039;&#039; CmdPtr is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xca01:&#039;&#039;&#039; Size is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xce01:&#039;&#039;&#039; KSessionRequest allocation failed (unlikely) or pointer buffer size exceeded.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Handles does not exist, or handle is not an instance of KClientSession.&lt;br /&gt;
&lt;br /&gt;
== svcBreak ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Break Reason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || Result || 0 (Success)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the process is attached, report the Break event. Then, if svcContinueDebugEvent didn&#039;t apply IgnoreException on the thread: if TPIDR_EL0 is 0, adjust ELR_EL1 to retry to svc instruction (and set TPIDR_EL0 to 1).&lt;br /&gt;
&lt;br /&gt;
Otherwise, if bit31 in reason isn&#039;t set, perform crash reporting (see Exception Handling section below), if it doesn&#039;t terminate the process adjust ELR_EL1 as well.&lt;br /&gt;
&lt;br /&gt;
Otherwise just return 0.&lt;br /&gt;
&lt;br /&gt;
== svcGetInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || AliasRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || AliasRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemoryAvailable. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || TotalMemoryUsage. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || IsCurrentProcessBeingDebugged&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || Returns ResourceLimit handle for current process. Used by [[Process_Manager_services|PM]].&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy from current process. TRNG. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AddressSpaceBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] StackRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] StackRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] PersonalMmHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] PersonalMmHeapUsage&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] TitleId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0-4.1.0] PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0-4.1.0] PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Process || 20 || 0 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 21 || 0 || [7.0.0+] MemoryUsageSomething0&lt;br /&gt;
|-&lt;br /&gt;
| Process || 22 || 0 || [7.0.0+] MemoryUsageSomething1&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 0xF0000002 || 0 || Performance counter related.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemory ==&lt;br /&gt;
This is like svcSetHeapSize except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcDumpInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Does nothing, just returns with registers set to all-zero.&lt;br /&gt;
&lt;br /&gt;
== svcAcceptSession ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || Port&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || Session&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== svcReplyAndReceive ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || *Handle&amp;lt;Port or ServerSession&amp;gt; || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTarget&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 (nanoseconds) || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is zero, the TLS should contain a blank message. If this message has a C descriptor, the buffer it points to will be used as the pointer buffer. See [[IPC_Marshalling#IPC_buffers]]. Note that a pointer buffer cannot be specified if ReplyTarget is not zero.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemoryUnsafe ==&lt;br /&gt;
Same as [[#svcMapPhysicalMemory]] except it always uses pool partition 0.&lt;br /&gt;
&lt;br /&gt;
== svcCreateCodeMemory ==&lt;br /&gt;
Takes an address range with backing memory to create the code memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== svcControlCodeMemory ==&lt;br /&gt;
Maps the backing memory for a Code memory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#CodeMemoryOperation|CodeMemoryOperation_UnmapOwner/CodeMemoryOperation_UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the code memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Error 0xE401 is now returned when the process owner of the Code memory object is the same as the current process.&lt;br /&gt;
&lt;br /&gt;
== svcReadWriteRegister ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || RegAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u64 || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1|| u64 || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by smcReadWriteRegister (checked in addition to the whitelist in svcReadWriteRegister), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== svcCreateSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || LocalPerm&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || RemotePerm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
Allocates memory from the current process&#039; pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcMapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The newly mapped pages will have [[#MemoryState]] type 0xE.&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in svcCreateMemoryMirror, otherwise error.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcCreateInterruptEvent ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || IrqNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || bool || Flags&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an event handle for the given IRQ number. Waiting on this handle will wait until the IRQ is triggered. The flags argument configures the triggering. If it is false, the IRQ is active HIGH level sensitive, if it is true it is rising-edge sensitive.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Flags was &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF201:&#039;&#039;&#039; IRQ above 0x3FF or outside the [[NPDM#Kernel_Access_Control|IRQ access mask]] was given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; A SlabHeap was exhausted (too many interrupts created).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF401:&#039;&#039;&#039; IRQ already has an event registered.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD201:&#039;&#039;&#039; The handle table is full. Try closing some handles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== svcQueryPhysicalAddress ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || KernelAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || u64 || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcQueryIoMapping ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || void* || VirtAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== svcCreateDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || StartAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || EndAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || AddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
dev_as_start_addr is normally set to 0 and dev_as_end_addr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== svcAttachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcDetachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceByForce ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
dev_map_addr is the userspace destination address, while dev_as_addr is the source address between dev_as_start_addr and dev_as_end_addr (passed to [[#svcCreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|MapDeviceAllowed]] bit set. Bit [[SVC#MemoryAttribute|IsDeviceMapped]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceAligned ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#svcMapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|MapDeviceAlignedAllowed]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== svcContinueDebugEvent ==&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The process has been resumed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid debug handle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf401:&#039;&#039;&#039; Process has debug events queued.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 0 || TotalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 1 || TotalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 2 || TotalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 3 || TotalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 0 || CurrentMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 1 || CurrentMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 2 || CurrentMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 3 || CurrentMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 0 || PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 1 || PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetProcessMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || void* || Perm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcQueryProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#svcQueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcCreateProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessInfo]]* || InfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u32* || CapabilitiesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessInfo]] as input.&lt;br /&gt;
CapabilitiesPtr points to an array of [[NPDM#Kernel_Access_Control|kernel capabilities]].&lt;br /&gt;
CapabilitiesNum is a number of capabilities in the CapabilitiesPtr array (number of element, not number of bytes).&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Attempted to map more code pages than available in address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Provided CodeAddr is invalid (make sure it&#039;s in range?)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The resource handle passed is invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE601:&#039;&#039;&#039; Attempt to copy procinfo from user-supplied pointer failed. Attempt to copy capabilities_num from user-supplied pointer failed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE801:&#039;&#039;&#039; Attempted to create a 32-bit process with a 36-bit address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Unused bits are set in mmuflags. Unknown address space type used.&lt;br /&gt;
&lt;br /&gt;
== svcGetProcessInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#ProcessState]] || State&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* svcBreakDebugProcess&lt;br /&gt;
* svcContinueDebugEvent&lt;br /&gt;
* svcWriteDebugProcessMemory&lt;br /&gt;
* svcSetDebugThreadContext&lt;br /&gt;
* svcTerminateDebugProcess&lt;br /&gt;
* svcSetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
svcDebugActiveProcess stops execution of the target process, the normal method for resuming it requires svcContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
== svcSetHardwareBreakPoint ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || u32 || hardware_breakpoint_id&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || flags&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets one of the AArch64 hardware breakpoints. The nintendo switch has 6 hardware breakpoints, and 4 hardware watchpoints. The syscall has two behaviors depending on the value of hardware_breakpoint_id:&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id &amp;lt; 0x10, then it sets one of the AArch64 hardware breakpoints. Flags will go to DBGBCRn_EL1, and value to DBGBVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0x7F01E1. Furthermore, the kernel will or it with 0x4004, in order to set various security flags to guarantee the watchpoints only triggers for code in EL0. If the user asks for a Breakpoint Type of ContextIDR match, the kernel shall use the given debug_handle to set DBGBVRn_EL1 to the ContextID of the debugged process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id is between 0x10 and 0x20 (exclusive), then it sets one of the AArch64 hardware watchpoints. Flags will go to DBGWCRn_EL1, and the value to DBGWVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0xFF0F1FF9. Furthermore, the kernel will or it with 0x104004. This will set various security flags, and set the watchpoint type to be a Linked Watchpoint. This means that you need to link it to a Linked ContextIDR breakpoint. Check the ARM documentation for more information.&lt;br /&gt;
&lt;br /&gt;
Note that hardware_breakpoint_id 0 to 4 match only to Virtual Address, while hardware_breakpoint_id 5 and 6 match against either Virtual Address, ContextID, or VMID. As such, if you are configuring a breakpoint to link for a watchpoint, make sure you use hardware_breakpoint_id 5 or 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more documentation for hardware breakpoints, check out the AArch64 documentation for the [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488h/way1382455558968.html DBGBCRn_EL1 register] and the [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0488h/way1382455560629.html DBGWCRn_EL1 register]&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== ThreadContextRequestFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || NormalContext&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DeviceName_AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeviceName_AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceName_DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeviceName_DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeviceName_HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeviceName_HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || DeviceName_ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeviceName_MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || DeviceName_NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || DeviceName_NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DeviceName_PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || DeviceName_SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || DeviceName_VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DeviceName_VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || DeviceName_XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || DeviceName_XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DeviceName_TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DeviceName_PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DeviceName_DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || DeviceName_SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || DeviceName_SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || DeviceName_SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || DeviceName_SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || DeviceName_ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || DeviceName_GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || DeviceName_GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || DeviceName_PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeviceName_NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DeviceName_APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || DeviceName_SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || DeviceName_NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || DeviceName_HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || DeviceName_SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || DeviceName_AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || DeviceName_ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || DeviceName_TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || DeviceName_TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || DeviceName_TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || DeviceName_NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CodeMemoryOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CodeMemoryOperation_MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CodeMemoryOperation_MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CodeMemoryOperation_UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CodeMemoryOperation_UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LimitableResource_Memory&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LimitableResource_Threads&lt;br /&gt;
|-&lt;br /&gt;
| 2 || LimitableResource_Events&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LimitableResource_TransferMemories&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LimitableResource_Sessions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessInfoType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ProcessState|ProcessInfoType_ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProcessState_Created ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProcessState_CreatedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ProcessState_Started ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ProcessState_Crashed || Processes will not enter this state unless they were created with [[#CreateProcessInfo|EnableDebug]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ProcessState_StartedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ProcessState_Exiting ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ProcessState_Exited ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ProcessState_DebugSuspended ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugThreadParam_DynamicPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugThreadParam_SchedulingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugThreadParam_PreferredCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugThreadParam_CurrentCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugThreadParam_AffinityMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dynamic priority: output in out2&lt;br /&gt;
&lt;br /&gt;
Scheduling status: out1 contains bit0: is debug-suspended, bit1: is user-suspended (svcSetThreadActivity 1 or svcSetProcessActivity 1).&lt;br /&gt;
Out2 contains {suspended, idle, running, terminating} =&amp;gt; {5, 0, 1, 4}&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_PreferredCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_CurrentCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_AffinityMask: output in out1&lt;br /&gt;
&lt;br /&gt;
== CreateProcessInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || IsAarch64&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 || [2.0.0+] EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || UseSystemMemBlocks&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit7 || [4.0.0] ?&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit10-7 || [5.0.0+] PoolPartition (0=Application, 1=Applet, 2=Sysmodule, 3=Nvservices)&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit11 || [7.0.0+] Not used? Only allowed in combination with bit6.&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit12 || [7.0.0+] Not used?&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle or zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 || || [3.0.0+] PersonalMmHeapNumPages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On [1.0.0] there&#039;s only one pool.&lt;br /&gt;
&lt;br /&gt;
On [2.0.0-4.0.0] PoolPartition is 1 for built-ins and 0 for rest.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] PoolPartition is specified in CreateProcessArgs. There are now 4 pool partitions.&lt;br /&gt;
&lt;br /&gt;
On [6.0.0] (maybe lower?) a zero ResourceLimitHandle defaults to sysmodule limits and 0x12300000 bytes of memory.&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Normal_32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal_36Bit || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || WithoutMap_32Bit || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] Normal_39Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || MemoryType: lower 8 bits of [[#MemoryState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || Permission (bit0: R, bit1: W, bit2: X)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsBorrowed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IsIpcMapped: when IpcRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || IsDeviceMapped: when DeviceRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsUncached&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || Type&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#svcSetMemoryPermission|PermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ForceReadWritableByDebugSyscalls&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IpcSendAllowed_Type0&lt;br /&gt;
|-&lt;br /&gt;
| 11 || IpcSendAllowed_Type3&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IpcSendAllowed_Type1&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#svcSetProcessMemoryPermission|ProcessPermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#svcMapMemory|MapAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#svcUnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#svcCreateTransferMemory|TransferMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#svcQueryPhysicalAddress|QueryPhysicalAddressAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || MapDeviceAllowed ([[#svcMapDeviceAddressSpace]] and [[#svcMapDeviceAddressSpaceByForce]])&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#svcMapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#svcSendSyncRequestWithUserBuffer|IpcBufferAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || IsPoolAllocated/IsReferenceCounted&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#svcMapProcessMemory|MapProcessAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#svcSetMemoryAttribute|AttributeChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] CodeMemoryAllowed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || MemoryType_Unmapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| MemoryType_Heap || Mapped using [[#svcSetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] MemoryType_Alias || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|MemoryType_IpcBuffer0]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || MemoryType_Stack || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || MemoryType_Reserved ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|MemoryType_IpcBuffer1]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|MemoryType_IpcBuffer3]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] MemoryType_CodeReadOnly || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] MemoryType_CodeWritable || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArbitrationType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || WaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || DecrementAndWaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || WaitIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignalType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Signal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || SignalAndIncrementIfEqual&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlagsOld ==&lt;br /&gt;
[1.0.0-2.3.0]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: ResumeAllThreads or debug-suspended-thread-id needed)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
[3.0.0+]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: doesn&#039;t need to be set in the same call than Resume)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || DontCatchExceptions&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Resume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || IgnoreOtherThreadsExceptions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren&#039;t in the input list. The affected threads are resumed.&lt;br /&gt;
&lt;br /&gt;
Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.&lt;br /&gt;
&lt;br /&gt;
If the input number of threads is 0, this means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
&lt;br /&gt;
The below table is for the Aarch64 version of the system call. For A32, all u64 fields but title/process/thread id are actually u32, making the structure 0x28-byte-big (0x40 for a64).&lt;br /&gt;
&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32|| Type (0=PausedThread, 1=RunningThread, 2=ExitedProcess, 3=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugEvent_AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugEvent_AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugEvent_ExitProcess&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugEvent_ExitThread&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugEvent_Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Exception_Trap (*)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Exception_InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Exception_DataAbortMisc (**)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Exception_PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception_DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exception_BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exception_UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Exception_DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Exception_BadSvcId&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Exception_SError [not in 1.0.0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Undefined instructions, software breakpoints, some other traps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Data aborts, FP traps, and everything else that doesn&#039;t belong to any of the above.&lt;br /&gt;
&lt;br /&gt;
Trap specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
First of all, a function that might be called by synchronous exception handler and that is called by the SError handler fetches the exception info, adjusts PC, panics on exceptions taken from EL1, then dispatches the exception.&lt;br /&gt;
&lt;br /&gt;
The dispatcher has two mutually exclusive exception reporting methods:&lt;br /&gt;
* by storing information at the start of the process&#039;s TLS memregion (TPIDRRO_EL0) and jumping back to the crt0&lt;br /&gt;
* by using KDebug&lt;br /&gt;
&lt;br /&gt;
KDebug dispatching is used when at least one of the following conditions are met:&lt;br /&gt;
* SMC ConfigItem KernelMemConfig bit 1 is NOT set (it isn&#039;t on retail), unless: this is a software or hardware breakpoint, or a watchpoint, or [4.0.0+?] the process is attached and this is a Google PNaCl trap instruction (see LLVM source)&lt;br /&gt;
* FAR doesn&#039;t point to a valid address in mapped-readable CodeStatic memory (i.e. this is the case for NRO and JIT memory) or this is one of the following exceptions (it particular, that doesn&#039;t include FP exceptions occurring in CodeStatic memory):&lt;br /&gt;
** Uncategorized&lt;br /&gt;
** IllegalState&lt;br /&gt;
** SupervisorCallA32&lt;br /&gt;
** SupervisorCallA64&lt;br /&gt;
** PCAlignment&lt;br /&gt;
** SPAlignment&lt;br /&gt;
** SError&lt;br /&gt;
** BreakpointLowerEl&lt;br /&gt;
** SoftwareStepLowerEl (note: no way set single-step flag; not parsed)&lt;br /&gt;
** WatchpointLowerEl&lt;br /&gt;
** SoftwareBreakpointA32 (note: not parsed)&lt;br /&gt;
** SoftwareBreakpointA64 (note: not parsed)&lt;br /&gt;
    &lt;br /&gt;
In all other cases the userland-handled exception path is taken.&lt;br /&gt;
&lt;br /&gt;
KDebug path:&lt;br /&gt;
&lt;br /&gt;
If the process is attached, the exception is reported to the KDebug. If the thread was continued using flag IgnoreExceptions, it returns from the exception as if nothing happened.&lt;br /&gt;
&lt;br /&gt;
If the latter is not the case, or if the process isn&#039;t attached, proceed to [2.0.0+] crash reporting (or in [1.0.0] just terminate the process): &lt;br /&gt;
if EnableDebug is set, and depending on the process state (more than one crash per process isn&#039;t permitted) it may signal itself with ProcessState_Crashed so that PM asks NS to start creport so that creport attaches to it and reports the crashes. Otherwise, just terminate.&lt;br /&gt;
&lt;br /&gt;
Userland reporting path and svcReturnFromException:&lt;br /&gt;
&lt;br /&gt;
TLS region start (A64):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x148 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x78 || ExceptionFrameA64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA64:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x48 (8*9) || GPRs 0..8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x8 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || pstate &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 0x8 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TLS region start (A32):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x178 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x44 || ExceptionFrameA32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA32:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 (8*4) || GPRs 0..7.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || tpidr_el0 = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || cpsr &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In that case, after storing the regs in the TLS, the exception handler returns to the application&#039;s crt0 (entrypoint), with X0=&amp;lt;error description code&amp;gt; (see below) and X1=SP=frame=&amp;lt;stack top&amp;gt; (see above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Desc. code || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || Instruction abort&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || Misaligned PC&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || Misaligned SP&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || SError [not in 1.0.0?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || Bad SVC&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || Uncategorized, CP15RTTrap, CP15RRTTrap, CP14RTTrap, CP14RRTTrap, IllegalState, SystemRegisterTrap&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || None of the above, EC &amp;lt;= 0x34 and not a breakpoint&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(During normal app boot the process is invoked with X0=0 and X1=main_thread_handle. The crt0 of retail apps determines whether to boot normally or handle an exception if X0 is set to 0 or not)&lt;br /&gt;
&lt;br /&gt;
The application is supposed to promptly update the contents of elr_el1 to a user handler (and any other regs it sees fit) and call svcReturnFromException (error code) to call that handler. The latter is then expected to promptly abort the program.&lt;br /&gt;
&lt;br /&gt;
svcReturnFromException updates the contents of the kernel stack frame with what the user provided in the TLS structure, sets TPIDR_EL0 to 1, then:&lt;br /&gt;
* if the provided error code is 0, gracefully pivots and returns from exception&lt;br /&gt;
* if it is not, replays the exception and pass it to the KDebug (see above). One can pass 0x10001 to prevent process termination. If the process is attached, this also prevents crash-collection/termination (different from the exception handler behavior)&lt;br /&gt;
&lt;br /&gt;
If an exception occurs from the above user handler, the entire exception handling process will repeat with the new exception.&lt;br /&gt;
&lt;br /&gt;
Note that if a thread that wasn&#039;t faulting calls svcReturnFromException, it signals an &amp;quot;invalid syscall&amp;quot; exception&lt;br /&gt;
&lt;br /&gt;
Note that [[SMC|IsDebugMode]] is not used during exception-handling, except for enabling printing a message to UART-A. This UART code causes a system-hang on retail (likely due to a loop that doesn&#039;t exit). This printing doesn&#039;t seem to run when the process is attached for debugging?&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6037</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6037"/>
		<updated>2019-01-13T20:50:43Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* Operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_UNK_3C&lt;br /&gt;
| 0x5450103C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_UNK_D4&lt;br /&gt;
| 0x545010D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_UNK_D8&lt;br /&gt;
| 0x545010D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_UNK_DC&lt;br /&gt;
| 0x545010DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_UNK_E0&lt;br /&gt;
| 0x545010E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL_STAT|FALCON_SCTL_STAT]]&lt;br /&gt;
| 0x54501244&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_UNK_248&lt;br /&gt;
| 0x54501248&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_UNK_24C&lt;br /&gt;
| 0x5450124C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_UNK_250&lt;br /&gt;
| 0x54501250&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_IMEM|FALCON_SPROT_IMEM]]&lt;br /&gt;
| 0x54501280&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_DMEM|FALCON_SPROT_DMEM]]&lt;br /&gt;
| 0x54501284&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_CPUCTL|FALCON_SPROT_CPUCTL]]&lt;br /&gt;
| 0x54501288&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_MISC|FALCON_SPROT_MISC]]&lt;br /&gt;
| 0x5450128C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_IRQ|FALCON_SPROT_IRQ]]&lt;br /&gt;
| 0x54501290&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_MTHD|FALCON_SPROT_MTHD]]&lt;br /&gt;
| 0x54501294&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_SCTL|FALCON_SPROT_SCTL]]&lt;br /&gt;
| 0x54501298&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_WDTMR|FALCON_SPROT_WDTMR]]&lt;br /&gt;
| 0x5450129C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_UNK_2E0&lt;br /&gt;
| 0x545012E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL0|TSEC_SCP_CTL0]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL1|TSEC_SCP_CTL1]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_LOCK|TSEC_SCP_CTL_LOCK]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK_10&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_CTL|TSEC_SCP_SEQ_CTL]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_VAL|TSEC_SCP_SEQ_VAL]]&lt;br /&gt;
| 0x54501424&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AUTH_STAT|TSEC_SCP_AUTH_STAT]]&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK_70&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_RES&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_04&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_CTL&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_CFG0&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_SEED0&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_CFG1&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_SEED1&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_28&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_2C&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_00&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_08&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_0C&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_30&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_40&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_44|TSEC_TFBIF_44]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_48|TSEC_TFBIF_48]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CFG|TSEC_DMA_CFG]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_24&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_28&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_2C&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&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-19&lt;br /&gt;
| PC that originated the exception&lt;br /&gt;
|-&lt;br /&gt;
| 20-23&lt;br /&gt;
| Exception type&lt;br /&gt;
 0x00: Trap 0&lt;br /&gt;
 0x01: Trap 1&lt;br /&gt;
 0x02: Trap 2&lt;br /&gt;
 0x03: Trap 3&lt;br /&gt;
 0x08: Invalid opcode&lt;br /&gt;
 0x09: Authentication failure&lt;br /&gt;
 0x0A: Page fault (no hit)&lt;br /&gt;
 0x0B: Page fault (multi hit)&lt;br /&gt;
 0x0F: Breakpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU_SECURE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_SCTL_OLD_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Initialize the transition to LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL_STAT ===&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;
| 31&lt;br /&gt;
| Set on memory protection violation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_IMEM ===&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-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to Falcon IMEM.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_DMEM ===&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-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to Falcon DMEM.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_CPUCTL ===&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-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the [[#FALCON_CPUCTL|FALCON_CPUCTL]] register.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_MISC ===&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-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the following registers:&lt;br /&gt;
* FALCON_VM_SUPERVISOR&lt;br /&gt;
* FALCON_SUBENGINE_RESET&lt;br /&gt;
* FALCON_HOST_IO_INDEX&lt;br /&gt;
* [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
* FALCON_TLB_CMD&lt;br /&gt;
* FALCON_TLB_CMD_RES&lt;br /&gt;
* FALCON_UNK_250&lt;br /&gt;
* FALCON_UNK_2E0&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_IRQ ===&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-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the following registers:&lt;br /&gt;
* [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
* [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
* [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
* [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
* FALCON_GPTMR_PERIOD&lt;br /&gt;
* FALCON_GPTMR_TIME&lt;br /&gt;
* FALCON_GPTMR_ENABLE&lt;br /&gt;
* FALCON_UNK_3C&lt;br /&gt;
* FALCON_UNK_E0&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_MTHD ===&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-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the following registers:&lt;br /&gt;
* [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
* FALCON_CURCTX&lt;br /&gt;
* FALCON_NXTCTX&lt;br /&gt;
* FALCON_CMDCTX&lt;br /&gt;
* FALCON_MTHD_DATA&lt;br /&gt;
* FALCON_MTHD_CMD&lt;br /&gt;
* FALCON_MTHD_DATA_WR&lt;br /&gt;
* FALCON_MTHD_OCCUPIED&lt;br /&gt;
* FALCON_MTHD_ACK&lt;br /&gt;
* FALCON_MTHD_LIMIT&lt;br /&gt;
* FALCON_DEBUG1&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_SCTL ===&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-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the [[#FALCON_SCTL|FALCON_SCTL]] register.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_WDTMR ===&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-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the following registers:&lt;br /&gt;
* FALCON_WDTMR_TIME&lt;br /&gt;
* FALCON_WDTMR_ENABLE&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL0 ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL1 ===&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;
| 11&lt;br /&gt;
| Enable TRNG testing mode&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_LOCK ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Locks accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_CTL ===&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-3&lt;br /&gt;
| Sequence&#039;s instruction index&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Target and control flags&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| Sequence&#039;s size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls the last crypto sequence (cs0 or cs1) created.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_VAL ===&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-3&lt;br /&gt;
| Sequence instruction&#039;s first operand&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| Sequence instruction&#039;s second operand&lt;br /&gt;
|-&lt;br /&gt;
| 10-14&lt;br /&gt;
| Sequence instruction&#039;s opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) created.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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-3&lt;br /&gt;
| Destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-13&lt;br /&gt;
| Source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Operation&lt;br /&gt;
 0x0:  nop (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crnd (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AUTH_STAT ===&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;
| Signature comparison result (3=succeeded, 2=failed)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last authentication attempt.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigauth)&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Wrong access level (during csigauth)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK_44 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK_48 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x20 or 0x140 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CFG ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Authenticated Mode ===&lt;br /&gt;
==== Entry ====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
==== Exit ====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ_CTL|TSEC_SCP_SEQ_CTL]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || N/A || N/A || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || N/A || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY); ACL(X) = ACL(active_key_idx) &amp;amp; ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY); ACL(X) = ACL(active_key_idx) &amp;amp; ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || N/A || N/A || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) { $cX = aes_enc($cY, current_sig); ACL(X) = 0x13; }&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== csigauth ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
==== csigclr ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
==== cchmod ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value which represents the [[#ACL|ACL]] mask to set.&lt;br /&gt;
&lt;br /&gt;
==== crnd ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crnd $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK_00.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK_2C.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL1|TSEC_SCP_CTL1]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x13 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Loading a secret into $cX sets a per-secret ACL, unconditionally.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is encrypted&lt;br /&gt;
|-&lt;br /&gt;
| 18 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 24-31 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
All secrets appear to be common across Falcon units of the same version, with the exception of secret 0x3F. This secret is effectively empty (all zeros), but is configured to be overwritten with the KFUSE private key once the KFUSE clock is enabled. The KFUSE private key is console-unique.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || ACL || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x13 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0x10 || Used by nvhost_nvdec_bl020_prod firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x11 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x10 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0x13 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x11 || Used by [6.0.0+] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x13 || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x10 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x13 || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x11 || Used by [1.0.0-5.1.0] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x13 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x10 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]] and [[TSEC_Firmware#SecureBoot|SecureBoot]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x13 || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x10 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6012</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6012"/>
		<updated>2019-01-09T22:20:07Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* cauth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_START_SCP_LS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_SCTL_OLD_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Initialize the transition to LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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-3&lt;br /&gt;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-13&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  nop (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crnd (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Authenticated Mode ===&lt;br /&gt;
==== Entry ====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
==== Exit ====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || N/A || N/A || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || N/A || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || N/A || N/A || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== csigauth ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
==== csigclr ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
==== cchmod ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value which represents the [[#ACL|ACL]] mask to set.&lt;br /&gt;
&lt;br /&gt;
==== crnd ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crnd $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x13 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Loading a secret into $cX sets a per-secret ACL, unconditionally.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is encrypted (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 24-31 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || ACL || Console-unique || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x13 || No || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0x10 || No || Used by nvhost_nvdec_bl020_prod firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x11 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0x13 || No || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x11 || No || Used by [6.0.0+] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x11 || No || Used by [1.0.0-5.1.0] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x13 || No || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x10 || No || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x10 || Yes || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6011</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6011"/>
		<updated>2019-01-09T21:36:27Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* cauth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_START_SCP_LS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_SCTL_OLD_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Initialize the transition to LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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-3&lt;br /&gt;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-13&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  nop (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crnd (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Authenticated Mode ===&lt;br /&gt;
==== Entry ====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
==== Exit ====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || N/A || N/A || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || N/A || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || N/A || N/A || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== csigauth ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
==== csigclr ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
==== cchmod ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value which represents the [[#ACL|ACL]] mask to set.&lt;br /&gt;
&lt;br /&gt;
==== crnd ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crnd $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x13 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Loading a secret into $cX sets a per-secret ACL, unconditionally.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is encrypted (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 24-31 || Size of region to authenticate (in 0x100 pages), must be &amp;gt;= 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || ACL || Console-unique || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x13 || No || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0x10 || No || Used by nvhost_nvdec_bl020_prod firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x11 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0x13 || No || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x11 || No || Used by [6.0.0+] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x11 || No || Used by [1.0.0-5.1.0] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x13 || No || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x10 || No || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x10 || Yes || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6010</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6010"/>
		<updated>2019-01-09T21:05:13Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* Secrets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_START_SCP_LS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_SCTL_OLD_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Initialize the transition to LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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-3&lt;br /&gt;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-13&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  nop (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crnd (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Authenticated Mode ===&lt;br /&gt;
==== Entry ====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
==== Exit ====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || N/A || N/A || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || N/A || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || N/A || N/A || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== csigauth ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
==== csigclr ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
==== cchmod ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value which represents the [[#ACL|ACL]] mask to set.&lt;br /&gt;
&lt;br /&gt;
==== crnd ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crnd $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x13 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Loading a secret into $cX sets a per-secret ACL, unconditionally.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is encrypted (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 24-31 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || ACL || Console-unique || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x13 || No || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0x10 || No || Used by nvhost_nvdec_bl020_prod firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x11 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0x13 || No || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x11 || No || Used by [6.0.0+] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x11 || No || Used by [1.0.0-5.1.0] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x13 || No || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x10 || No || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x10 || Yes || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6009</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6009"/>
		<updated>2019-01-09T20:52:02Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* Secrets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_START_SCP_LS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_SCTL_OLD_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Initialize the transition to LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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-3&lt;br /&gt;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-13&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  nop (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crnd (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Authenticated Mode ===&lt;br /&gt;
==== Entry ====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
==== Exit ====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || N/A || N/A || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || N/A || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || N/A || N/A || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== csigauth ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
==== csigclr ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
==== cchmod ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value which represents the [[#ACL|ACL]] mask to set.&lt;br /&gt;
&lt;br /&gt;
==== crnd ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crnd $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x13 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Loading a secret into $cX sets a per-secret ACL, unconditionally.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is encrypted (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 24-31 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || ACL || Console-unique || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x13 || No || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x10 || No || Used by nvhost_nvdec_bl020_prod firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x11 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x13 || No || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x11 || No || Used by [6.0.0+] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x11 || No || Used by [1.0.0-5.1.0] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x13 || No || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x10 || No || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x10 || Yes || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6008</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6008"/>
		<updated>2019-01-09T20:51:42Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* Secrets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_START_SCP_LS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_SCTL_OLD_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Initialize the transition to LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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-3&lt;br /&gt;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-13&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  nop (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crnd (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Authenticated Mode ===&lt;br /&gt;
==== Entry ====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
==== Exit ====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || N/A || N/A || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || N/A || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || N/A || N/A || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== csigauth ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
==== csigclr ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
==== cchmod ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value which represents the [[#ACL|ACL]] mask to set.&lt;br /&gt;
&lt;br /&gt;
==== crnd ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crnd $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x13 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Loading a secret into $cX sets a per-secret ACL, unconditionally.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is encrypted (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 24-31 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || ACL || Console-unique || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x07 || No || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x10 || No || Used by nvhost_nvdec_bl020_prod firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x11 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x13 || No || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x11 || No || Used by [6.0.0+] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x11 || No || Used by [1.0.0-5.1.0] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x13 || No || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x10 || No || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x10 || Yes || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6007</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6007"/>
		<updated>2019-01-09T20:45:14Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_START_SCP_LS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_SCTL_OLD_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Initialize the transition to LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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-3&lt;br /&gt;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-13&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  nop (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crnd (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Authenticated Mode ===&lt;br /&gt;
==== Entry ====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
==== Exit ====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || N/A || N/A || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || N/A || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || N/A || N/A || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== csigauth ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
==== csigclr ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
==== cchmod ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value which represents the [[#ACL|ACL]] mask to set.&lt;br /&gt;
&lt;br /&gt;
==== crnd ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crnd $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x13 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Loading a secret into $cX sets a per-secret ACL, unconditionally.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is encrypted (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 24-31 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || ACL || Console-unique || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x07 || No || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0x01 || No || Used by nvhost_nvdec_bl020_prod firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x05 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. &lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x01 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0x07 || No || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. &lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x05 || No || Used by [6.0.0+] nvhost_tsec firmware. &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x07 || No || Used by nvhost_tsec firmware. &lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x01 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x07 || No || Used by nvhost_tsec firmware. &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x05 || No || Used by [1.0.0-5.1.0] nvhost_tsec firmware. &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x07 || No || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. &lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x01 || No || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x07 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x07 || No || Used by nvhost_tsec firmware. &lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x05 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x01 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x01 || Yes || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6003</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6003"/>
		<updated>2019-01-08T21:36:23Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* Initial values */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x13 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value.&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6002</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6002"/>
		<updated>2019-01-08T20:29:07Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* csigauth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x3 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value.&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6001</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6001"/>
		<updated>2019-01-08T20:28:35Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* cchmod */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x3 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value.&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6000</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6000"/>
		<updated>2019-01-08T20:25:51Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* ACL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x3 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5999</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5999"/>
		<updated>2019-01-08T20:18:47Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* Initial values */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x3 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5998</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5998"/>
		<updated>2019-01-08T20:09:17Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5997</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5997"/>
		<updated>2019-01-08T16:59:58Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;if (immY &amp;amp; 3) ACL(X) = (ACL(X) &amp;amp; immY) &amp;amp;#124; 1; else ACL(X) = 0;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Readable as key. This is forced set if bit1 is set, the only way to clear it is to clear *both* bit0 and bit1.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Readable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5996</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5996"/>
		<updated>2019-01-08T16:59:23Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;if (immY &amp;amp; 3) ACL(X) = (ACL(X) &amp;amp; immY) &amp;amp;#124; 1; else ACL(X) = 0;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Readable as key. This is forced set if bit1 is set, the only way to clear it is to clear *both* bit0 and bit1.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Readable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5995</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5995"/>
		<updated>2019-01-07T22:40:48Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;if (immY &amp;amp; 3) ACL(X) = (ACL(X) &amp;amp; immY) &amp;amp;#124; 1; else ACL(X) = 0;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Readable as key. This is forced set if bit1 is set, the only way to clear it is to clear *both* bit0 and bit1.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Readable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5994</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5994"/>
		<updated>2019-01-07T22:38:13Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;if (immY &amp;amp; 3) ACL(X) = (ACL(X) &amp;amp; immY) &amp;amp;#124; 1; else ACL(X) = 0;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || || || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc(current_sig, $cY);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Readable as key. This is forced set if bit1 is set, the only way to clear it is to clear *both* bit0 and bit1.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Readable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5989</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5989"/>
		<updated>2019-01-06T12:36:23Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;if (immY &amp;amp; 3) ACL(X) = (ACL(X) &amp;amp; immY) &amp;amp;#124; 1; else ACL(X) = 0;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Readable as key. This is forced set if bit1 is set, the only way to clear it is to clear *both* bit0 and bit1.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Readable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5988</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5988"/>
		<updated>2019-01-06T12:32:34Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* ACL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;if (immY &amp;amp; 3) ACL(X) = (ACL(X) &amp;amp; immY) &amp;amp;#124; 1; else ACL(X) = 0;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Readable as key. This is forced set if bit1 is set, the only way to clear it is to clear *both* bit0 and bit1.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Readable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5987</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5987"/>
		<updated>2019-01-06T12:26:02Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;if (immY &amp;amp; 3) ACL(X) = (ACL(X) &amp;amp; immY) &amp;amp;#124; 1; else ACL(X) = 0;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Present. This is forced set if bit1 is set, the only way to clear it is to clear *both* bit0 and bit1.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Allowed as input&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5986</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5986"/>
		<updated>2019-01-06T09:50:57Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* ACL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL(X) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL(X) = ACL(Y) &amp;amp;#124; 1;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y) &amp;amp;#124; 1;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Allowed key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Allowed input (also key)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5985</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5985"/>
		<updated>2019-01-06T09:49:35Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL(X) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL(X) = ACL(Y) &amp;amp;#124; 1;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y) &amp;amp;#124; 1;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5984</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5984"/>
		<updated>2019-01-06T09:47:49Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL(X) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL(X) = ACL(Y) | 1;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y) | 1;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5983</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5983"/>
		<updated>2019-01-06T09:28:50Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL(X) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5982</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5982"/>
		<updated>2019-01-06T09:27:07Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5981</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5981"/>
		<updated>2019-01-06T09:16:23Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* Authenticated Mode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5980</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5980"/>
		<updated>2019-01-06T09:14:27Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* csigauth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5979</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5979"/>
		<updated>2019-01-06T09:13:59Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* ACL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x1F.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5978</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5978"/>
		<updated>2019-01-06T09:08:21Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* crng */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
When loading into $cX using xdst instruction, ACL($cX) is set to at least 3 (probably 0x1F?).&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5977</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5977"/>
		<updated>2019-01-06T09:05:55Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
When loading into $cX using xdst instruction, ACL($cX) is set to at least 3 (probably 0x1F?).&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5976</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5976"/>
		<updated>2019-01-06T09:05:31Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* Register ACLs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || (ACL($cY) &amp;amp; 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || (ACL($cY) &amp;amp; 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
When loading into $cX using xdst instruction, ACL($cX) is set to at least 3 (probably 0x1F?).&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5975</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5975"/>
		<updated>2019-01-06T09:05:07Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* ACL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Register ACLs ===&lt;br /&gt;
Falcon tracks permission metadata about each crypto reg. Permissions include read/write ability per execution mode, as well as ability to use the reg for encrypt/decrypt, among other permissions. Permissions are propagated when registers are referenced by instructions (e.g. moving a value from read-protected $cX to $cY will result in $cY also being read-protected).&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || (ACL($cY) &amp;amp; 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || (ACL($cY) &amp;amp; 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
When loading into $cX using xdst instruction, ACL($cX) is set to at least 3 (probably 0x1F?).&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5974</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5974"/>
		<updated>2019-01-06T09:02:39Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Register ACLs ===&lt;br /&gt;
Falcon tracks permission metadata about each crypto reg. Permissions include read/write ability per execution mode, as well as ability to use the reg for encrypt/decrypt, among other permissions. Permissions are propagated when registers are referenced by instructions (e.g. moving a value from read-protected $cX to $cY will result in $cY also being read-protected).&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || (ACL($cY) &amp;amp; 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || (ACL($cY) &amp;amp; 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
When loading a key into $cX using xdst instruction, its ACL is set to at least 3 (probably 0x1F?).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5973</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5973"/>
		<updated>2019-01-06T08:53:44Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Register ACLs ===&lt;br /&gt;
Falcon tracks permission metadata about each crypto reg. Permissions include read/write ability per execution mode, as well as ability to use the reg for encrypt/decrypt, among other permissions. Permissions are propagated when registers are referenced by instructions (e.g. moving a value from read-protected $cX to $cY will result in $cY also being read-protected).&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || (ACL($cY) &amp;amp; 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || (ACL($cY) &amp;amp; 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5972</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5972"/>
		<updated>2019-01-06T08:48:04Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Register ACLs ===&lt;br /&gt;
Falcon tracks permission metadata about each crypto reg. Permissions include read/write ability per execution mode, as well as ability to use the reg for encrypt/decrypt, among other permissions. Permissions are propagated when registers are referenced by instructions (e.g. moving a value from read-protected $cX to $cY will result in $cY also being read-protected).&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; || TODO&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; || TODO&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL($cX) &amp;amp; 3) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5971</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5971"/>
		<updated>2019-01-06T08:32:11Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* SCP operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Register ACLs ===&lt;br /&gt;
Falcon tracks permission metadata about each crypto reg. Permissions include read/write ability per execution mode, as well as ability to use the reg for encrypt/decrypt, among other permissions. Permissions are propagated when registers are referenced by instructions (e.g. moving a value from read-protected $cX to $cY will result in $cY also being read-protected).&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;if ((ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)) $cX ^= $cY;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;if (ACL($cX) &amp;amp; 2) $cX += immY;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;if ((ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)) $cX &amp;amp;= $cY;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($Y);&amp;lt;/code&amp;gt; TODO: ACL&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($Y);&amp;lt;/code&amp;gt; TODO: ACL&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;if (ACL($cX) &amp;amp; 3) $cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; TODO: ACL for cY&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;if (ACL($cX) &amp;amp; 3) $cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; TODO: ACL for cY&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5970</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5970"/>
		<updated>2019-01-06T08:23:24Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Register ACLs ===&lt;br /&gt;
Falcon tracks permission metadata about each crypto reg. Permissions include read/write ability per execution mode, as well as ability to use the reg for encrypt/decrypt, among other permissions. Permissions are propagated when registers are referenced by instructions (e.g. moving a value from read-protected $cX to $cY will result in $cY also being read-protected).&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP operations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Valid key&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Valid data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL($cX) = ???;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL($cX) = ???;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ? || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || &amp;lt;code&amp;gt;ACL($cX) &amp;amp;= immY;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;if ((ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)) $cX ^= $cY;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;if (ACL($cX) &amp;amp; 2) $cX += immY;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;if ((ACL($cX) &amp;amp; 2) &amp;amp;&amp;amp; (ACL($cY) &amp;amp; 2)) $cX &amp;amp;= $cY;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = reverse($cY); ACL($cX) = ACL($cY);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || pre_cmac || || || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL($cX) = load_secret_acl(immY);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5969</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=5969"/>
		<updated>2019-01-06T07:42:59Z</updated>

		<summary type="html">&lt;p&gt;Qlutoo: /* TSEC_SCP_INSN_STAT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &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;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK3&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK4&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK5&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK6&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK7&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&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;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&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;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&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;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&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;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&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;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&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;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&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;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&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;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&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;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&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;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&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;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&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;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&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;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_SCP_UNK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&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-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&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;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&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;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&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;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&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;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&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-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&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-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&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;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_ACCESS ===&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;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_TRNG ===&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;
| 11&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&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;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_MODE ===&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;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&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;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&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;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&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;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&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;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  none (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crng (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&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;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&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;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&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;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigunk)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&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;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&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;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&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;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Authenticated Mode ==&lt;br /&gt;
===== Entry =====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
===== Exit =====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
== Crypto processing ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Register ACLs ===&lt;br /&gt;
Falcon tracks permission metadata about each crypto reg. Permissions include read/write ability per execution mode, as well as ability to use the reg for encrypt/decrypt, among other permissions. Permissions are propagated when registers are referenced by instructions (e.g. moving a value from read-protected $cX to $cY will result in $cY also being read-protected).&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&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-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is signed and encrypted and double the size (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31-24 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== csigauth ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret.&lt;br /&gt;
&lt;br /&gt;
Under certain circumstances, it is possible to observe this instruction being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively. Also, via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== csigclr ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
=== cchmod ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value. It appears to set the [[#Register ACLs|crypto registers&#039; ACL]] bits as follows:&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;
| Allow register to be used as key in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Allow register to be used as key in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Set register as readable in NS or LS mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Set register as readable in HS mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set register as writable in NS or LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== crng ===&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crng $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK7.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL_TRNG|TSEC_SCP_CTL_TRNG]].&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || Notes || Console-unique&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Used by nvhost_nvdec_bl020_prod firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Used by [6.0.0+] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Used by [1.0.0-5.1.0] nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]]. || No&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || Used by nvhost_tsec firmware. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares. || Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Qlutoo</name></author>
	</entry>
</feed>