TSEC: Difference between revisions
No edit summary |
|||
(10 intermediate revisions by the same user not shown) | |||
Line 49: | Line 49: | ||
| [[#TSEC_THI_CONT_SYNCPT_L1|TSEC_THI_CONT_SYNCPT_L1]] | | [[#TSEC_THI_CONT_SYNCPT_L1|TSEC_THI_CONT_SYNCPT_L1]] | ||
| 0x5450002C | | 0x5450002C | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
Line 307: | Line 295: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_FALCON_SIRQMASK|TSEC_FALCON_SIRQMASK]] | ||
| 0x545010E0 | | 0x545010E0 | ||
| 0x04 | | 0x04 | ||
Line 547: | Line 535: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| [[# | | [[#TSEC_FALCON_SERRSTAT|TSEC_FALCON_SERRSTAT]] | ||
| 0x54501244 | | 0x54501244 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_FALCON_SERRVAL|TSEC_FALCON_SERRVAL]] | ||
| 0x54501248 | |||
| 0x04 | |||
|- | |||
| [[#TSEC_FALCON_SERRADDR|TSEC_FALCON_SERRADDR]] | |||
| 0x5450124C | |||
| 0x04 | |||
|- | |||
| [[#TSEC_FALCON_SCTL1|TSEC_FALCON_SCTL1]] | |||
| 0x54501250 | | 0x54501250 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_FALCON_STEST|TSEC_FALCON_STEST]] | ||
| 0x54501258 | |||
| 0x04 | |||
|- | |||
| [[#TSEC_FALCON_SICD|TSEC_FALCON_SICD]] | |||
| 0x54501260 | | 0x54501260 | ||
| 0x04 | | 0x04 | ||
Line 809: | Line 809: | ||
| [[#TSEC_TFBIF_DBG_R128COUNT|TSEC_TFBIF_DBG_R128COUNT]] | | [[#TSEC_TFBIF_DBG_R128COUNT|TSEC_TFBIF_DBG_R128COUNT]] | ||
| 0x5450162C | | 0x5450162C | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]] | | [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]] | ||
| 0x54501634 | | 0x54501634 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
Line 833: | Line 825: | ||
| [[#TSEC_TFBIF_REGIONCFG|TSEC_TFBIF_REGIONCFG]] | | [[#TSEC_TFBIF_REGIONCFG|TSEC_TFBIF_REGIONCFG]] | ||
| 0x54501648 | | 0x54501648 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
Line 883: | Line 847: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_VERSION|TSEC_VERSION]] | ||
| 0x54501800 | | 0x54501800 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCRATCH0|TSEC_SCRATCH0]] | ||
| 0x54501804 | | 0x54501804 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCRATCH1|TSEC_SCRATCH1]] | ||
| 0x54501808 | | 0x54501808 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCRATCH2|TSEC_SCRATCH2]] | ||
| 0x5450180C | | 0x5450180C | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCRATCH3|TSEC_SCRATCH3]] | ||
| 0x54501810 | | 0x54501810 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCRATCH4|TSEC_SCRATCH4]] | ||
| 0x54501814 | | 0x54501814 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCRATCH5|TSEC_SCRATCH5]] | ||
| 0x54501818 | | 0x54501818 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCRATCH6|TSEC_SCRATCH6]] | ||
| 0x5450181C | | 0x5450181C | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCRATCH7|TSEC_SCRATCH7]] | ||
| 0x54501820 | | 0x54501820 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_GPTMRINT|TSEC_GPTMRINT]] | ||
| 0x54501824 | | 0x54501824 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_GPTMRVAL|TSEC_GPTMRVAL]] | ||
| 0x54501828 | | 0x54501828 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_GPTMRCTL|TSEC_GPTMRCTL]] | ||
| 0x5450182C | | 0x5450182C | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_ITFEN|TSEC_ITFEN]] | ||
| 0x54501830 | | 0x54501830 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_ITFSTAT|TSEC_ITFSTAT]] | ||
| 0x54501834 | | 0x54501834 | ||
| 0x04 | | 0x04 | ||
Line 1,079: | Line 1,043: | ||
|} | |} | ||
=== | === TSEC_THI_METHOD0 === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-11 | ||
| | | TSEC_THI_METHOD0_OFFSET | ||
|} | |} | ||
Used to encode and send a method's ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X's channel opcode submission. | |||
The following methods are available: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! | ! ID | ||
! | ! Method | ||
|- | |- | ||
| 0x100 | |||
| NOP | |||
| 0x100 | |||
| NOP | |||
|- | |- | ||
| 0x140 | | 0x140 | ||
Line 2,058: | Line 1,989: | ||
| 16 | | 16 | ||
| TSEC_FALCON_DEBUG1_CTXSW_MODE | | TSEC_FALCON_DEBUG1_CTXSW_MODE | ||
|} | |} | ||
Line 2,341: | Line 2,269: | ||
=== TSEC_FALCON_RSTAT3 === | === TSEC_FALCON_RSTAT3 === | ||
Mirror of the [[#TSEC_FALCON_ICD_RDATA|ICD status register 3]]. | Mirror of the [[#TSEC_FALCON_ICD_RDATA|ICD status register 3]]. | ||
=== TSEC_FALCON_SIRQMASK === | |||
Unofficial name. | |||
Same as [[#TSEC_FALCON_IRQMASK|TSEC_FALCON_IRQMASK]], but for LS mode. | |||
=== TSEC_FALCON_CPUCTL === | === TSEC_FALCON_CPUCTL === | ||
Line 3,312: | Line 3,245: | ||
|- | |- | ||
| 4-5 | | 4-5 | ||
| Current access level | |||
|- | |||
| 8-9 | |||
| Unknown access level | |||
|- | |||
| 12 | |||
| Unknown | | Unknown | ||
|- | |- | ||
| | | 13 | ||
| Unknown | | Unknown | ||
|- | |- | ||
Line 3,321: | Line 3,260: | ||
|} | |} | ||
=== | === TSEC_FALCON_SERRSTAT === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |||
| 0-23 | |||
| Unknown | |||
|- | |- | ||
| 30 | | 30 | ||
Line 3,333: | Line 3,275: | ||
|} | |} | ||
=== | Unofficial name. | ||
Used for detecting invalid CSB accesses in LS mode. | |||
=== TSEC_FALCON_SERRVAL === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-31 | ||
| | | Error code | ||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_FALCON_SERRADDR === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-31 | ||
| | | Error address | ||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_FALCON_SCTL1 === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-1 | ||
| | | CSB access level | ||
|- | |- | ||
| | | 2-3 | ||
| | | Unknown access level | ||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_FALCON_STEST === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-31 | ||
| | | Unknown | ||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_FALCON_SICD === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0-3 | | 0 | ||
| | | Enable access to ICD command STOP | ||
|- | |||
| 1 | |||
| Enable access to ICD command RUN | |||
|- | |||
| 2 | |||
| Enable access to ICD command RUNB | |||
|- | |||
| 3 | |||
| Enable access to ICD command STEP | |||
|- | |- | ||
| 4 | | 4 | ||
| | | Enable access to ICD command EMASK | ||
|- | |||
| 5 | |||
| Enable access to ICD command RREG (only for SPRs) | |||
|- | |||
| 6 | |||
| Enable access to ICD command RSTAT | |||
|- | |||
| 7 | |||
| Enable access to IBRKPT registers | |||
|- | |- | ||
| | | 8 | ||
| | | Enable access to ICD command RREG (only for GPRs) | ||
|- | |- | ||
| | | 9 | ||
| | | Enable access to ICD command RDM | ||
|} | |} | ||
Controls | Unofficial name. | ||
Controls access to the ICD in LS mode. | |||
=== | === TSEC_FALCON_SPROT_IMEM === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-2 | ||
| Read access level | | Read access level | ||
|- | |- | ||
| 4- | | 3 | ||
| Set on memory read access violation | |||
|- | |||
| 4-6 | |||
| Write access level | | Write access level | ||
|- | |||
| 7 | |||
| Set on memory write access violation | |||
|} | |} | ||
Controls accesses to | Unofficial name. | ||
Controls accesses to Falcon IMEM. | |||
=== | === TSEC_FALCON_SPROT_DMEM === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-2 | ||
| Read access level | | Read access level | ||
|- | |- | ||
| 4- | | 3 | ||
| Set on memory read access violation | |||
|- | |||
| 4-6 | |||
| Write access level | | Write access level | ||
|- | |||
| 7 | |||
| Set on memory write access violation | |||
|} | |} | ||
Controls accesses to | Unofficial name. | ||
Controls accesses to Falcon DMEM. | |||
=== | === TSEC_FALCON_SPROT_CPUCTL === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-2 | ||
| | | Read access level | ||
| | |- | ||
| 3 | |||
| Set on memory read access violation | |||
|- | |- | ||
| | | 4-6 | ||
| | | Write access level | ||
|- | |- | ||
| | | 7 | ||
| | | Set on memory write access violation | ||
|} | |} | ||
=== | Unofficial name. | ||
Controls accesses to the [[#TSEC_FALCON_CPUCTL|TSEC_FALCON_CPUCTL]] register. | |||
=== TSEC_FALCON_SPROT_MISC === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-2 | ||
| | | Read access level | ||
|- | |||
| 3 | |||
| Set on memory read access violation | |||
|- | |||
| 4-6 | |||
| Write access level | |||
|- | |||
| 7 | |||
| Set on memory write access violation | |||
|} | |} | ||
=== | Unofficial name. | ||
Controls accesses to the following registers: | |||
* [[#TSEC_FALCON_PRIVSTATE|TSEC_FALCON_PRIVSTATE]] | |||
* [[#TSEC_FALCON_SFTRESET|TSEC_FALCON_SFTRESET]] | |||
* [[#TSEC_FALCON_ADDR|TSEC_FALCON_ADDR]] | |||
* [[#TSEC_FALCON_DMACTL|TSEC_FALCON_DMACTL]] | |||
* [[#TSEC_FALCON_IMCTL|TSEC_FALCON_IMCTL]] | |||
* [[#TSEC_FALCON_IMSTAT|TSEC_FALCON_IMSTAT]] | |||
* [[#TSEC_FALCON_SCTL1|TSEC_FALCON_SCTL1]] | |||
* [[#TSEC_FALCON_DMAINFO_CTL|TSEC_FALCON_DMAINFO_CTL]] | |||
=== TSEC_FALCON_SPROT_IRQ === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-2 | ||
| | | Read access level | ||
|- | |||
| 3 | |||
| Set on memory read access violation | |||
|- | |||
| 4-6 | |||
| Write access level | |||
|- | |- | ||
| | | 7 | ||
| | | Set on memory write access violation | ||
|} | |} | ||
=== | Unofficial name. | ||
Controls accesses to the following registers: | |||
* [[#TSEC_FALCON_IRQMODE|TSEC_FALCON_IRQMODE]] | |||
* [[#TSEC_FALCON_IRQMSET|TSEC_FALCON_IRQMSET]] | |||
* [[#TSEC_FALCON_IRQMCLR|TSEC_FALCON_IRQMCLR]] | |||
* [[#TSEC_FALCON_IRQDEST|TSEC_FALCON_IRQDEST]] | |||
* [[#TSEC_FALCON_GPTMRINT|TSEC_FALCON_GPTMRINT]] | |||
* [[#TSEC_FALCON_GPTMRVAL|TSEC_FALCON_GPTMRVAL]] | |||
* [[#TSEC_FALCON_GPTMRCTL|TSEC_FALCON_GPTMRCTL]] | |||
* [[#TSEC_FALCON_IRQDEST2|TSEC_FALCON_IRQDEST2]] | |||
* [[#TSEC_FALCON_SIRQMASK|TSEC_FALCON_SIRQMASK]] | |||
=== TSEC_FALCON_SPROT_MTHD === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-2 | ||
| | | Read access level | ||
|- | |||
| 3 | |||
| Set on memory read access violation | |||
|- | |||
| 4-6 | |||
| Write access level | |||
|- | |||
| 7 | |||
| Set on memory write access violation | |||
|} | |} | ||
=== | Unofficial name. | ||
Controls accesses to the following registers: | |||
* [[#TSEC_FALCON_ITFEN|TSEC_FALCON_ITFEN]] | |||
* [[#TSEC_FALCON_CURCTX|TSEC_FALCON_CURCTX]] | |||
* [[#TSEC_FALCON_NXTCTX|TSEC_FALCON_NXTCTX]] | |||
* [[#TSEC_FALCON_CTXACK|TSEC_FALCON_CTXACK]] | |||
* [[#TSEC_FALCON_MTHDDATA|TSEC_FALCON_MTHDDATA]] | |||
* [[#TSEC_FALCON_MTHDID|TSEC_FALCON_MTHDID]] | |||
* [[#TSEC_FALCON_MTHDWDAT|TSEC_FALCON_MTHDWDAT]] | |||
* [[#TSEC_FALCON_MTHDCOUNT|TSEC_FALCON_MTHDCOUNT]] | |||
* [[#TSEC_FALCON_MTHDPOP|TSEC_FALCON_MTHDPOP]] | |||
* [[#TSEC_FALCON_MTHDRAMSZ|TSEC_FALCON_MTHDRAMSZ]] | |||
* [[#TSEC_FALCON_DEBUG1|TSEC_FALCON_DEBUG1]] | |||
=== TSEC_FALCON_SPROT_SCTL === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-2 | ||
| | | Read access level | ||
|- | |||
| 3 | |||
| Set on memory read access violation | |||
|- | |||
| 4-6 | |||
| Write access level | |||
|- | |- | ||
| | | 7 | ||
| | | Set on memory write access violation | ||
|} | |} | ||
=== | Unofficial name. | ||
Controls accesses to the [[#TSEC_FALCON_SCTL|TSEC_FALCON_SCTL]] register. | |||
=== TSEC_FALCON_SPROT_WDTMR === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0-31 | | 0-2 | ||
| | | Read access level | ||
|- | |||
| 3 | |||
| Set on memory read access violation | |||
|- | |||
| 4-6 | |||
| Write access level | |||
|- | |||
| 7 | |||
| Set on memory write access violation | |||
|} | |||
Unofficial name. | |||
Controls accesses to the following registers: | |||
* [[#TSEC_FALCON_WDTMRVAL|TSEC_FALCON_WDTMRVAL]] | |||
* [[#TSEC_FALCON_WDTMRCTL|TSEC_FALCON_WDTMRCTL]] | |||
=== TSEC_FALCON_DMAINFO_FINISHED_FBRD_LOW === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-31 | |||
| TSEC_FALCON_DMAINFO_FINISHED_FBRD_LOW_VAL | |||
|} | |} | ||
=== | === TSEC_FALCON_DMAINFO_FINISHED_FBRD_HIGH === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 3,553: | Line 3,587: | ||
|- | |- | ||
| 0-30 | | 0-30 | ||
| | | TSEC_FALCON_DMAINFO_FINISHED_FBRD_HIGH_VAL | ||
|- | |- | ||
| 31 | | 31 | ||
| | | TSEC_FALCON_DMAINFO_FINISHED_FBRD_HIGH_OBIT | ||
|} | |} | ||
=== | === TSEC_FALCON_DMAINFO_FINISHED_FBWR_LOW === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-31 | ||
| TSEC_FALCON_DMAINFO_FINISHED_FBWR_LOW_VAL | |||
| | |||
|} | |} | ||
=== | === TSEC_FALCON_DMAINFO_FINISHED_FBWR_HIGH === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0-30 | ||
| | | TSEC_FALCON_DMAINFO_FINISHED_FBWR_HIGH_VAL | ||
|- | |- | ||
| | | 31 | ||
| | | TSEC_FALCON_DMAINFO_FINISHED_FBWR_HIGH_OBIT | ||
|} | |} | ||
=== | === TSEC_FALCON_DMAINFO_CURRENT_FBRD_LOW === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-31 | ||
| TSEC_FALCON_DMAINFO_CURRENT_FBRD_LOW_VAL | |||
| | |||
|} | |} | ||
=== | === TSEC_FALCON_DMAINFO_CURRENT_FBRD_HIGH === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0-30 | ||
| | | TSEC_FALCON_DMAINFO_CURRENT_FBRD_HIGH_VAL | ||
|- | |||
| 31 | |||
| TSEC_FALCON_DMAINFO_CURRENT_FBRD_HIGH_OBIT | |||
|} | |} | ||
=== | === TSEC_FALCON_DMAINFO_CURRENT_FBWR_LOW === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-31 | ||
| | | TSEC_FALCON_DMAINFO_CURRENT_FBWR_LOW_VAL | ||
|} | |||
=== TSEC_FALCON_DMAINFO_CURRENT_FBWR_HIGH === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-30 | |||
| TSEC_FALCON_DMAINFO_CURRENT_FBWR_HIGH_VAL | |||
|- | |- | ||
| | | 31 | ||
| | | TSEC_FALCON_DMAINFO_CURRENT_FBWR_HIGH_OBIT | ||
|} | |} | ||
=== TSEC_FALCON_DMAINFO_CTL === | |||
=== | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 3,648: | Line 3,662: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | TSEC_FALCON_DMAINFO_CTL_CLR_FBRD | ||
|- | |- | ||
| 1 | | 1 | ||
| | | TSEC_FALCON_DMAINFO_CTL_CLR_FBWR | ||
|} | |||
=== TSEC_SCP_CTL0 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 10 | |||
| Enable [[#LOAD|Falcon<->LOAD]] interface | |||
|- | |- | ||
| | | 12 | ||
| | | Enable [[#STORE|Falcon<->STORE]] interface | ||
|- | |- | ||
| | | 14 | ||
| | | Enable [[#CMD|Falcon<->CMD]] interface | ||
|- | |- | ||
| | | 16 | ||
| | | Enable [[#SEQ|SEQ]] | ||
|- | |- | ||
| | | 20 | ||
| | | Enable [[#CTL|CTL]] | ||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCP_CTL1 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 3,692: | Line 3,697: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | Clear [[#SEQ|SEQ]] | ||
|- | |||
| 8 | |||
| Clear [[#SCP|SCP]]'s internal pipeline | |||
|- | |||
| 11 | |||
| Enable [[#RNG|RNG]]'s test mode | |||
|- | |||
| 12 | |||
| Enable [[#RNG|RNG]] | |||
|- | |||
| 16 | |||
| Enable [[#LOAD|Falcon<->LOAD]] interface's dummy mode (all reads return 0) | |||
|- | |||
| 20 | |||
| Enable [[#LOAD|Falcon<->LOAD]] interface bypassing (all reads are dropped) | |||
|- | |- | ||
| | | 24 | ||
| | | Enable [[#STORE|Falcon<->STORE]] interface bypassing (all writes are dropped) | ||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCP_CTL_STAT === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| | | 20 | ||
| | | TSEC_SCP_CTL_STAT_DEBUG_MODE | ||
|} | |} | ||
=== | === TSEC_SCP_CTL_LOCK === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 3,718: | Line 3,735: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | Enable lockdown mode (locks IMEM and DMEM) | ||
|- | |||
| 1 | |||
| Lockdown has pending exit request | |||
|- | |||
| 2 | |||
| Lockdown has been enabled before | |||
|- | |- | ||
| 4 | | 4 | ||
| | | Enable SCP lockdown mode (locks [[#SCP|SCP]]'s MMIO register space) | ||
|- | |- | ||
| | | 6 | ||
| | | SCP lockdown has been enabled before | ||
|} | |} | ||
=== | Unofficial name. | ||
Controls lockdown mode. Can only be cleared in HS mode. | |||
=== TSEC_SCP_CFG === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0 | ||
| | | Endianness for ADD | ||
0: Little | |||
1: Big | |||
|- | |||
| 1 | |||
| Endianness for GFMUL | |||
0: Little | |||
1: Big | |||
|- | |- | ||
| | | 2 | ||
| | | Endianness for [[#LOAD|LOAD]] | ||
0: Little | |||
1: Big | |||
|- | |- | ||
| | | 3 | ||
| | | Endianness for [[#STORE|STORE]] | ||
0: | 0: Little | ||
1: | 1: Big | ||
|- | |- | ||
| | | 4 | ||
| [[# | | Endianness for [[#AES|AES]] | ||
0: Little | |||
1: Big | |||
|- | |- | ||
| | | 8 | ||
| [[# | | Flush [[#CMD|CMD]] | ||
|- | |- | ||
| | | 12-13 | ||
| | | Carry chain's size | ||
0: 32 bits | |||
1: 64 bits | |||
2: 96 bits | |||
3: 128 bits | |||
|- | |- | ||
| | | 16-31 | ||
| [[#SCP|SCP]]'s internal pipeline stall timeout value | |||
| [[# | |||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_SCP_CTL_SCP === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0 | ||
| | | Swap [[#SCP|SCP]]'s master | ||
|- | |||
| 1 | |||
| Current [[#SCP|SCP]]'s master | |||
0: Falcon | |||
1: External | |||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_SCP_CTL_PKEY === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0-1 | | 0 | ||
| | | TSEC_SCP_CTL_PKEY_REQUEST_RELOAD | ||
|- | |||
| 1 | |||
| TSEC_SCP_CTL_PKEY_LOADED | |||
|} | |||
=== TSEC_SCP_CTL_DBG === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| 4 | | 4 | ||
| | | Disable lockdown mode | ||
|- | |- | ||
| | | 8 | ||
| | | Disable SCP lockdown mode | ||
|} | |} | ||
Unofficial name. | |||
Overrides lockdown mode. Can only be set in debug mode. | |||
=== | === TSEC_SCP_DBG0 === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 3,822: | Line 3,850: | ||
|- | |- | ||
| 0-3 | | 0-3 | ||
| | | Index | ||
|- | |- | ||
| | | 4 | ||
| | | Auto-increment | ||
|- | |||
| 5-6 | |||
| Target | |||
0: None | |||
1: STORE | |||
2: LOAD | |||
3: SEQ | |||
|- | |- | ||
| | | 8-12 | ||
| | | [[#SEQ|SEQ]]'s current sequence's size | ||
|- | |- | ||
| | | 13-16 | ||
| [[# | | [[#SEQ|SEQ]]'s current instruction's address | ||
|- | |- | ||
| | | 17 | ||
| [[# | | [[#SEQ|SEQ]]'s current instruction is valid | ||
|- | |- | ||
| | | 18 | ||
| [[# | | [[#SEQ|SEQ]] is running in HS mode | ||
|- | |- | ||
| | | 19-22 | ||
| [[# | | [[#LOAD|LOAD]]'s queue's size | ||
|- | |- | ||
| | | 23 | ||
| [[# | | [[#LOAD|LOAD]]'s current operation is valid | ||
|- | |- | ||
| | | 24 | ||
| [[# | | [[#LOAD|LOAD]] is running in HS mode | ||
|- | |- | ||
| | | 25-26 | ||
| [[# | | [[#STORE|STORE]]'s queue's size | ||
|- | |- | ||
| | | 30 | ||
| [[# | | [[#STORE|STORE]]'s current operation is valid | ||
|- | |- | ||
| | | 31 | ||
| [[# | | [[#STORE|STORE]] is running in HS mode | ||
|} | |} | ||
Unofficial name. | |||
Used for debugging the [[#LOAD|LOAD]], [[#STORE|STORE]] and [[#SEQ|SEQ]] blocks. | |||
=== | === TSEC_SCP_DBG1 === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-31 | ||
| | | Data | ||
0: | If target is SEQ: | ||
Bits 0-3: current instruction's first operand | |||
Bits 4-9: current instruction's second operand | |||
Bits 10-14: current instruction's opcode | |||
|} | |||
Unofficial name. | |||
Used for retrieving debug data. Contains information on the last crypto sequence created when debugging the [[#SEQ|SEQ]] block. | |||
=== TSEC_SCP_DBG2 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 0-1 | ||
| [[# | | [[#SEQ|SEQ]]'s state | ||
0: Idle | |||
1: Recording (cs0begin/cs1begin) | |||
2: Executing (cs0exec/cs1exec) | |||
|- | |- | ||
| | | 4-7 | ||
| [[# | | Number of cycles left for [[#SEQ|SEQ]]'s current sequence | ||
|- | |- | ||
| 12-15 | |||
| Active crypto key register (ckeyreg) | |||
| 12 | |||
| | |||
|} | |} | ||
Unofficial name. | |||
Used for retrieving additional debug data associated with the [[#SEQ|SEQ]] block. | |||
=== | === TSEC_SCP_CMD === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-3 | ||
| | | Destination register | ||
|- | |- | ||
| | | 8-13 | ||
| | | Source register or immediate value | ||
|- | |- | ||
| | | 20-24 | ||
| | | Command opcode | ||
0x0: nop (fuc5 opcode 0x00) | |||
0x1: cmov (fuc5 opcode 0x84) | |||
0x2: cxsin (fuc5 opcode 0x88) or xdst (with cxset) | |||
0x3: cxsout (fuc5 opcode 0x8C) or xdld (with cxset) | |||
0x4: crnd (fuc5 opcode 0x90) | |||
0x5: cs0begin (fuc5 opcode 0x94) | |||
0x6: cs0exec (fuc5 opcode 0x98) | |||
0x7: cs1begin (fuc5 opcode 0x9C) | |||
0x8: cs1exec (fuc5 opcode 0xA0) | |||
0x9: invalid (fuc5 opcode 0xA4) | |||
0xA: cchmod (fuc5 opcode 0xA8) | |||
0xB: cxor (fuc5 opcode 0xAC) | |||
0xC: cadd (fuc5 opcode 0xB0) | |||
0xD: cand (fuc5 opcode 0xB4) | |||
0xE: crev (fuc5 opcode 0xB8) | |||
0xF: cgfmul (fuc5 opcode 0xBC) | |||
0x10: csecret (fuc5 opcode 0xC0) | |||
0x11: ckeyreg (fuc5 opcode 0xC4) | |||
0x12: ckexp (fuc5 opcode 0xC8) | |||
0x13: ckrexp (fuc5 opcode 0xCC) | |||
0x14: cenc (fuc5 opcode 0xD0) | |||
0x15: cdec (fuc5 opcode 0xD4) | |||
0x16: csigcmp (fuc5 opcode 0xD8) | |||
0x17: csigenc (fuc5 opcode 0xDC) | |||
0x18: csigclr (fuc5 opcode 0xE0) | |||
|- | |- | ||
| | | 28 | ||
| | | [[#CMD|CMD]]'s current instruction is valid | ||
|- | |- | ||
| | | 31 | ||
| [[# | | [[#CMD|CMD]] is running in HS mode | ||
|} | |} | ||
Contains the | Unofficial name. | ||
Contains information on the last crypto command executed. | |||
=== | === TSEC_SCP_STAT0 === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 3,977: | Line 3,992: | ||
|- | |- | ||
| 0 | | 0 | ||
| [[# | | [[#SCP|SCP]] is active | ||
|- | |- | ||
| | | 2 | ||
| | | [[#CMD|CMD]] is active | ||
|- | |- | ||
| | | 4 | ||
| | | [[#STORE|STORE]] is active | ||
|- | |- | ||
| | | 6 | ||
| | | [[#SEQ|SEQ]] is active | ||
|- | |- | ||
| | | 8 | ||
| | | [[#CTL|CTL]] is active | ||
| | |||
|- | |- | ||
| | | 10 | ||
| | | [[#LOAD|LOAD]] is active | ||
|- | |||
| 14 | |||
| [[#AES|AES]] is active | |||
|- | |- | ||
| 16 | | 16 | ||
| | | [[#RNG|RNG]] is active | ||
|} | |} | ||
=== | Unofficial name. | ||
Contains the statuses of hardware blocks. | |||
=== TSEC_SCP_STAT1 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-1 | ||
| | | Signature comparison result | ||
0: None | |||
1: Running | |||
2: Failed | |||
3: Succeeded | |||
|- | |- | ||
| | | 4 | ||
| | | [[#LOAD|Falcon<->LOAD]] interface is running in HS mode | ||
|- | |- | ||
| | | 6 | ||
| | | [[#LOAD|Falcon<->LOAD]] interface is ready | ||
|- | |- | ||
| | | 8 | ||
| [[# | | [[#STORE|Falcon<->STORE]] interface is running in HS mode | ||
|- | |- | ||
| | | 10 | ||
| | | [[#STORE|Falcon<->STORE]] interface received a valid operation | ||
|- | |- | ||
| | | 12 | ||
| [[# | | [[#CMD|Falcon<->CMD]] interface is running in HS mode | ||
|- | |- | ||
| | | 14 | ||
| | | [[#CMD|Falcon<->CMD]] interface received a valid instruction | ||
|} | |} | ||
=== | Unofficial name. | ||
Contains the statuses of hardware interfaces and the result of the last authentication attempt. | |||
=== TSEC_SCP_STAT2 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-4 | ||
| [[# | | Current opcode in [[#SEQ|SEQ]] | ||
|- | |||
| 5-9 | |||
| Current opcode in [[#CMD|Falcon<->CMD]] interface | |||
|- | |||
| 10-14 | |||
| Pending opcode in [[#CMD|CMD]] | |||
|- | |- | ||
| | | 15-16 | ||
| | | Current opcode in [[#AES|AES]] | ||
0: Encryption | |||
1: Decryption | |||
2: Key expansion | |||
3: Key reverse expansion | |||
|- | |- | ||
| | | 24 | ||
| | | [[#SCP|SCP]]'s internal pipeline is stalled on hazard | ||
|- | |- | ||
| | | 25 | ||
| [[# | | [[#STORE|STORE]] is stalled | ||
|- | |- | ||
| | | 26 | ||
| | | [[#LOAD|LOAD]] is stalled | ||
|- | |- | ||
| | | 27 | ||
| [[# | | [[#RNG|RNG]] is stalled | ||
|- | |- | ||
| 28 | | 28 | ||
| | | [[#SCP|SCP]]'s internal pipeline is stalled on writeback | ||
|- | |||
| 29 | |||
| [[#AES|AES]] is stalled | |||
|} | |} | ||
=== | Unofficial name. | ||
Contains the status of crypto operations. | |||
=== TSEC_SCP_RNG_STAT0 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 4,064: | Line 4,105: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | [[#RND|RND]] is ready | ||
|- | |||
| 4-7 | |||
| Unknown | |||
|- | |||
| 8-11 | |||
| Unknown | |||
|- | |||
| 16 | |||
| Unknown | |||
|- | |- | ||
| | | 20 | ||
| | | Unknown | ||
|} | |||
Unofficial name. | |||
=== TSEC_SCP_RNG_STAT1 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 0-15 | ||
| | | Unknown | ||
|- | |- | ||
| 31 | | 16-31 | ||
| | | Unknown | ||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_SCP_IRQSTAT === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 4,084: | Line 4,142: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | [[#RND|RND]] ready | ||
|- | |- | ||
| | | 8 | ||
| | | ACL error | ||
|- | |- | ||
| | | 12 | ||
| | | SEC error | ||
|- | |- | ||
| 16 | | 16 | ||
| | | [[#CMD|CMD]] error | ||
| | |||
|- | |- | ||
| 20 | | 20 | ||
| | | Single step | ||
|- | |- | ||
| 24 | | 24 | ||
| | | [[#RND|RND]] clock trigger | ||
|- | |- | ||
| | | 28 | ||
| | | Stall timeout | ||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_SCP_IRQMASK === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 4,135: | Line 4,171: | ||
|- | |- | ||
| 0 | | 0 | ||
| [[# | | [[#RND|RND]] ready | ||
|- | |- | ||
| 8 | | 8 | ||
| | | ACL error | ||
|- | |- | ||
| 12 | | 12 | ||
| | | SEC error | ||
|- | |- | ||
| 16 | | 16 | ||
| | | [[#CMD|CMD]] error | ||
|- | |- | ||
| 20 | | 20 | ||
| | | Single step | ||
|- | |- | ||
| 24 | | 24 | ||
| | | [[#RND|RND]] clock trigger | ||
|- | |||
| 28 | |||
| Stall timeout | |||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_SCP_ACL_ERR === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0 | ||
| | | Writing to a crypto register without the correct ACL | ||
| | |- | ||
| 4 | |||
| Reading from a crypto register without the correct ACL | |||
|- | |- | ||
| | | 8 | ||
| | | Invalid ACL change (cchmod) | ||
|- | |- | ||
| | | 31 | ||
| | | ACL error occurred | ||
|} | |} | ||
Unofficial name. | |||
Contains information on errors generated by the [[#TSEC_SCP_IRQSTAT|ACL error]] IRQ. | |||
| | |||
=== | === TSEC_SCP_SEC_ERR === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0 | ||
| | | Security mode changed during sequence execution (cs0exec/cs1exec) | ||
|- | |- | ||
| 16 | | 1-2 | ||
| | | Security mode at the beginning of sequence execution | ||
0: Non-secure | |||
1: Heavy Secure | |||
|- | |||
| 4 | |||
| Security mode changed during sequence recording (cs0begin/cs1begin) | |||
|- | |||
| 5-6 | |||
| Security mode at the beginning of sequence recording | |||
0: Non-secure | |||
1: Heavy Secure | |||
|- | |||
| 16 | |||
| Security mode changed while reading from crypto register/stream (cxsout or xdld) | |||
|- | |||
| 17-18 | |||
| Security mode at the beginning of reading from crypto register/stream | |||
0: Non-secure | |||
1: Heavy Secure | |||
|- | |||
| 20 | |||
| Security mode and memory source changed while writing to crypto register/stream (cxsin or xdst) | |||
|- | |||
| 21-22 | |||
| Security mode when memory source changed while writing to crypto register/stream | |||
0: Non-secure | |||
1: Heavy Secure | |||
|- | |||
| 24 | |||
| Security mode changed while writing to crypto register/stream (cxsin or xdst) | |||
|- | |||
| 25-26 | |||
| Security mode at the beginning of writing to crypto register/stream | |||
0: Non-secure | |||
1: Heavy Secure | |||
|- | |||
| 31 | |||
| SEC error occurred | |||
|} | |} | ||
=== | Unofficial name. | ||
Contains information on errors generated by the [[#TSEC_SCP_IRQSTAT|SEC error]] IRQ. | |||
=== TSEC_SCP_CMD_ERR === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0 | ||
| | | [[#CMD|CMD]]'s instruction is invalid | ||
|- | |||
| 4 | |||
| [[#SEQ|SEQ]]'s sequence is empty | |||
|- | |||
| 8 | |||
| [[#SEQ|SEQ]]'s sequence is too long | |||
|- | |||
| 12 | |||
| [[#SEQ|SEQ]]'s sequence was not finished | |||
|- | |||
| 16 | |||
| Forbidden signature operation (csigcmp, csigenc or csigclr in NS mode) | |||
|- | |||
| 20 | |||
| Invalid signature operation (csigcmp in HS mode) | |||
|- | |||
| 24 | |||
| Forbidden ACL change (cchmod in NS mode) | |||
|} | |} | ||
=== | Unofficial name. | ||
Contains information on errors generated by the [[#TSEC_SCP_IRQSTAT|CMD error]] IRQ. | |||
=== TSEC_SCP_RND_CTL0 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 4,215: | Line 4,306: | ||
|- | |- | ||
| 0-31 | | 0-31 | ||
| | | [[#RND|RND]] clock trigger's lower limit | ||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCP_RND_CTL1 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-15 | ||
| | | [[#RND|RND]] clock trigger's upper limit | ||
|- | |||
| 16-31 | |||
| [[#RND|RND]] clock trigger's mask | |||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCP_RND_CTL2 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-15 | ||
| | | Unknown | ||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCP_RND_CTL3 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| | | 12 | ||
| | | Trigger first LFSR | ||
|- | |- | ||
| 16 | | 16 | ||
| | | Trigger second LFSR | ||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCP_RND_CTL4 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-31 | ||
| | | First LFSR's polynomial for [[#RNG|RNG]]'s test mode | ||
|} | |||
Unofficial name. | |||
=== TSEC_SCP_RND_CTL5 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 0-31 | ||
| | | First LFSR's initial state for [[#RNG|RNG]]'s test mode | ||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCP_RND_CTL6 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-31 | ||
| | | Second LFSR's polynomial for [[#RNG|RNG]]'s test mode | ||
|} | |||
Unofficial name. | |||
=== TSEC_SCP_RND_CTL7 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 0-31 | ||
| | | Second LFSR's initial state for [[#RNG|RNG]]'s test mode | ||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCP_RND_CTL8 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-15 | ||
| Unknown | |||
|- | |||
| 16-31 | |||
| Unknown | |||
|} | |||
Unofficial name. | |||
=== TSEC_SCP_RND_CTL9 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-15 | |||
| Unknown | |||
|- | |||
| 16-31 | |||
| Unknown | |||
|} | |||
Unofficial name. | |||
=== TSEC_SCP_RND_CTL10 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-15 | |||
| Unknown | |||
|- | |||
| 16-31 | |||
| Unknown | |||
|} | |||
Unofficial name. | |||
=== TSEC_SCP_RND_CTL11 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Unknown | | Unknown | ||
|- | |- | ||
Line 4,321: | Line 4,485: | ||
| Unknown | | Unknown | ||
|} | |} | ||
Unofficial name. | |||
=== TSEC_TFBIF_CTL === | === TSEC_TFBIF_CTL === | ||
Line 4,556: | Line 4,722: | ||
|} | |} | ||
=== | === TSEC_TFBIF_SPROT_EMEM === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-2 | ||
| | | Read access level | ||
|- | |||
| 3 | |||
| Set on memory read access violation | |||
|- | |- | ||
| | | 4-6 | ||
| | | Write access level | ||
|- | |||
| 7 | |||
| Set on memory write access violation | |||
|} | |} | ||
Unofficial name. | |||
Controls accesses to external memory regions. Accessible in HS mode only. | Controls accesses to external memory regions. Accessible in HS mode only. | ||
Line 4,674: | Line 4,836: | ||
[6.0.0+] The nvhost_tsec firmware sets this register to 0x20 or 0x140 before reading memory from the GPU UCODE carveout. | [6.0.0+] The nvhost_tsec firmware sets this register to 0x20 or 0x140 before reading memory from the GPU UCODE carveout. | ||
=== | === TSEC_CG === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-5 | ||
| | | TSEC_CG_IDLE_CG_DLY_CNT | ||
|- | |- | ||
| | | 6 | ||
| | | TSEC_CG_IDLE_CG_EN | ||
|- | |- | ||
| | | 16-18 | ||
| | | TSEC_CG_WAKEUP_DLY_CNT | ||
|- | |- | ||
| | | 19 | ||
| | | TSEC_CG_WAKEUP_DLY_EN | ||
|} | |} | ||
=== TSEC_BAR0_CTL === | |||
=== | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 4,700: | Line 4,860: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | TSEC_BAR0_CTL_READ | ||
|- | |- | ||
| 1 | | 1 | ||
| | | TSEC_BAR0_CTL_WRITE | ||
|- | |- | ||
| | | 4-7 | ||
| | | TSEC_BAR0_CTL_BYTE_MASK | ||
|- | |- | ||
| | | 12-13 | ||
| | | TSEC_BAR0_CTL_STATUS | ||
0: Idle | |||
1: Busy | |||
2: Error | |||
3: Disabled | |||
|- | |- | ||
| | | 16-17 | ||
| | | TSEC_BAR0_CTL_SEC_MODE | ||
0: Non-secure | |||
1: Invalid | |||
2: Light Secure | |||
3: Heavy Secure | |||
|- | |- | ||
| | | 31 | ||
| | | TSEC_BAR0_CTL_INIT | ||
|} | |} | ||
Unofficial name. | |||
Controls DMA transfers between TSEC and HOST1X (master and clients). | |||
Starting a transfer over BAR0 automatically sets TSEC_BAR0_CTL_SEC_MODE to the current Falcon security mode. Once set, any attempts to start a transfer from a lower security level will fail. | |||
=== | === TSEC_BAR0_ADDR === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 4,732: | Line 4,898: | ||
|- | |- | ||
| 0-31 | | 0-31 | ||
| | | TSEC_BAR0_ADDR_VAL | ||
|} | |} | ||
Unofficial name. | |||
Takes the address for DMA transfers between TSEC and HOST1X (master and clients). | |||
=== | === TSEC_BAR0_DATA === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-31 | ||
| TSEC_BAR0_DATA_VAL | |||
| | |||
|} | |} | ||
Unofficial name. | |||
Takes the data for DMA transfers between TSEC and HOST1X (master and clients). | |||
=== | === TSEC_BAR0_TIMEOUT === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-31 | ||
| TSEC_BAR0_TIMEOUT_VAL | |||
| | |||
|} | |} | ||
Unofficial name. | |||
=== | Takes the timeout value for DMA transfers between TSEC and HOST1X (master and clients). | ||
=== TSEC_VERSION === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 4,795: | Line 4,937: | ||
|- | |- | ||
| 0-31 | | 0-31 | ||
| | | Version | ||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_SCRATCH0 === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-31 | ||
| | | Value | ||
|} | |||
Unofficial name. | |||
=== TSEC_SCRATCH1 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 0-31 | ||
| | | Value | ||
|} | |||
Unofficial name. | |||
=== TSEC_SCRATCH2 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 0-31 | ||
| | | Value | ||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCRATCH3 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-31 | ||
| | | Value | ||
|} | |||
Unofficial name. | |||
=== TSEC_SCRATCH4 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 0-31 | ||
| | | Value | ||
|} | |||
Unofficial name. | |||
=== TSEC_SCRATCH5 === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 0-31 | ||
| | | Value | ||
|} | |} | ||
=== | Unofficial name. | ||
=== TSEC_SCRATCH6 === | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-31 | ||
| Value | |||
| | |||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_SCRATCH7 === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
Line 4,875: | Line 5,025: | ||
|- | |- | ||
| 0-31 | | 0-31 | ||
| | | Value | ||
|} | |} | ||
Unofficial name. | |||
=== TSEC_GPTMRINT === | |||
Unofficial name. | |||
Same as [[#TSEC_FALCON_GPTMRINT|TSEC_FALCON_GPTMRINT]], but for an unknown hardware block. | |||
=== TSEC_GPTMRVAL === | |||
Unofficial name. | |||
Same as [[#TSEC_FALCON_GPTMRVAL|TSEC_FALCON_GPTMRVAL]], but for an unknown hardware block. | |||
=== TSEC_GPTMRCTL === | |||
Unofficial name. | |||
Same as [[#TSEC_FALCON_GPTMRCTL|TSEC_FALCON_GPTMRCTL]], but for an unknown hardware block. | |||
=== | === TSEC_ITFEN === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0 | ||
| | | Enable [[#TSEC_GPTMRINT|TSEC_GPTMRINT]] | ||
|- | |||
| 1 | |||
| Unknown | |||
|- | |||
| 2 | |||
| Unknown | |||
|- | |||
| 3 | |||
| Unknown | |||
|} | |} | ||
Unofficial name. | |||
=== | === TSEC_ITFSTAT === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0 | ||
| | | [[#TSEC_GPTMRINT|TSEC_GPTMRINT]] is enabled | ||
|- | |||
| 1 | |||
| Unknown | |||
|- | |||
| 2 | |||
| Unknown | |||
|- | |||
| 3 | |||
| Unknown | |||
|} | |} | ||
Unofficial name. | |||
=== TSEC_TEGRA_CTL === | === TSEC_TEGRA_CTL === | ||
Line 5,209: | Line 5,392: | ||
| 2 || xsin || $cX || N/A || <code><nowiki>$cX = read_from_stream();</nowiki></code> || N/A || <code><nowiki>ACL($cX) = is_mode_hs ? 0x3 : 0x1F;</nowiki></code> | | 2 || xsin || $cX || N/A || <code><nowiki>$cX = read_from_stream();</nowiki></code> || N/A || <code><nowiki>ACL($cX) = is_mode_hs ? 0x3 : 0x1F;</nowiki></code> | ||
|- | |- | ||
| 3 || xsout || $cX || N/A || <code><nowiki>write_to_stream($cX);</nowiki></code> || <code><nowiki>(is_mode_hs && (ACL($cX) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0xA))</nowiki></code> || N/A | | 3 || xsout || $cX || N/A || <code><nowiki>write_to_stream($cX);</nowiki></code> || <code><nowiki>((is_mode_hs && (ACL($cX) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0xA)))</nowiki></code> || N/A | ||
|- | |- | ||
| 4 || [[#rnd|rnd]] || $cX || N/A || <code><nowiki>$cX = read_from_rnd();</nowiki></code> || N/A || <code><nowiki>ACL($cX) = is_mode_hs ? 0x3 : 0x1F;</nowiki></code> | | 4 || [[#rnd|rnd]] || $cX || N/A || <code><nowiki>$cX = read_from_rnd();</nowiki></code> || N/A || <code><nowiki>ACL($cX) = is_mode_hs ? 0x3 : 0x1F;</nowiki></code> | ||
Line 5,225: | Line 5,408: | ||
| 0xA || [[#chmod|chmod]] || $cX || immY || <code><nowiki>ACL($cX) = immY;</nowiki></code> || See [[#ACLs|ACLs]] || N/A | | 0xA || [[#chmod|chmod]] || $cX || immY || <code><nowiki>ACL($cX) = immY;</nowiki></code> || See [[#ACLs|ACLs]] || N/A | ||
|- | |- | ||
| 0xB || xor || $cX || $cY || <code><nowiki>$cX ^= $cY;</nowiki></code> || <code><nowiki>(is_mode_hs && (ACL($cX) & 0x2) && (ACL($cY) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0x1A) && (ACL($cY) & 0xA))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | | 0xB || xor || $cX || $cY || <code><nowiki>$cX ^= $cY;</nowiki></code> || <code><nowiki>((is_mode_hs && (ACL($cX) & 0x2) && (ACL($cY) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0x1A) && (ACL($cY) & 0xA)))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | ||
|- | |- | ||
| 0xC || add || $cX || immY || <code><nowiki>$cX += immY;</nowiki></code> || <code><nowiki>(is_mode_hs && (ACL($cX) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0x1A))</nowiki></code> || N/A | | 0xC || add || $cX || immY || <code><nowiki>$cX += immY;</nowiki></code> || <code><nowiki>((is_mode_hs && (ACL($cX) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0x1A)))</nowiki></code> || N/A | ||
|- | |- | ||
| 0xD || and || $cX || $cY || <code><nowiki>$cX &= $cY;</nowiki></code> || <code><nowiki>(is_mode_hs && (ACL($cX) & 0x2) && (ACL($cY) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0x1A) && (ACL($cY) & 0xA))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | | 0xD || and || $cX || $cY || <code><nowiki>$cX &= $cY;</nowiki></code> || <code><nowiki>((is_mode_hs && (ACL($cX) & 0x2) && (ACL($cY) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0x1A) && (ACL($cY) & 0xA)))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | ||
|- | |- | ||
| 0xE || rev || $cX || $cY || <code><nowiki>$cX = endian_swap128($cY);</nowiki></code> || <code><nowiki>(!is_mode_hs && (ACL($cX) & 0x10))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | | 0xE || rev || $cX || $cY || <code><nowiki>$cX = endian_swap128($cY);</nowiki></code> || <code><nowiki>(is_mode_hs || (!is_mode_hs && (ACL($cX) & 0x10)))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | ||
|- | |- | ||
| 0xF || gfmul || $cX || $cY || <code><nowiki>$cX = gfmul($cY);</nowiki></code>|| <code><nowiki>(is_mode_hs && (ACL($cX) & 0x2) && (ACL($cY) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0x1A) && (ACL($cY) & 0xA))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | | 0xF || gfmul || $cX || $cY || <code><nowiki>$cX = gfmul($cY);</nowiki></code>|| <code><nowiki>((is_mode_hs && (ACL($cX) & 0x2) && (ACL($cY) & 0x2)) || (!is_mode_hs && (ACL($cX) & 0x1A) && (ACL($cY) & 0xA)))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | ||
|- | |- | ||
| 0x10 || secret || $cX || immY || <code><nowiki>$cX = load_secret(immY);</nowiki></code> || N/A || <code><nowiki>ACL($cX) = load_secret_acl(immY);</nowiki></code> | | 0x10 || secret || $cX || immY || <code><nowiki>$cX = load_secret(immY);</nowiki></code> || N/A || <code><nowiki>ACL($cX) = load_secret_acl(immY);</nowiki></code> | ||
Line 5,239: | Line 5,422: | ||
| 0x11 || keyreg || $cX || N/A || <code><nowiki>active_key = $cX;</nowiki></code> || N/A || N/A | | 0x11 || keyreg || $cX || N/A || <code><nowiki>active_key = $cX;</nowiki></code> || N/A || N/A | ||
|- | |- | ||
| 0x12 || kexp || $cX || $cY || <code><nowiki>$cX = aes_key_expand($cY);</nowiki></code> || <code><nowiki>(!is_mode_hs && (ACL($cX) & 0x10))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | | 0x12 || kexp || $cX || $cY || <code><nowiki>$cX = aes_key_expand($cY);</nowiki></code> || <code><nowiki>(is_mode_hs || (!is_mode_hs && (ACL($cX) & 0x10)))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | ||
|- | |- | ||
| 0x13 || krexp || $cX || $cY || <code><nowiki>$cX = aes_key_reverse_expand($cY);</nowiki></code> || <code><nowiki>(!is_mode_hs && (ACL($cX) & 0x10))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | | 0x13 || krexp || $cX || $cY || <code><nowiki>$cX = aes_key_reverse_expand($cY);</nowiki></code> || <code><nowiki>(is_mode_hs || (!is_mode_hs && (ACL($cX) & 0x10)))</nowiki></code> || <code><nowiki>ACL($cX) = ACL($cY);</nowiki></code> | ||
|- | |- | ||
| 0x14 || enc || $cX || $cY || <code><nowiki>$cX = aes_enc(active_key, $cY);</nowiki></code> || N/A || <code><nowiki>ACL($cX) = (ACL(active_key) & ACL($cY));</nowiki></code> | | 0x14 || enc || $cX || $cY || <code><nowiki>$cX = aes_enc(active_key, $cY);</nowiki></code> || N/A || <code><nowiki>ACL($cX) = (ACL(active_key) & ACL($cY));</nowiki></code> | ||
Line 5,247: | Line 5,430: | ||
| 0x15 || dec || $cX || $cY || <code><nowiki>$cX = aes_dec(active_key, $cY);</nowiki></code> || N/A || <code><nowiki>ACL($cX) = (ACL(active_key) & ACL($cY));</nowiki></code> | | 0x15 || dec || $cX || $cY || <code><nowiki>$cX = aes_dec(active_key, $cY);</nowiki></code> || N/A || <code><nowiki>ACL($cX) = (ACL(active_key) & ACL($cY));</nowiki></code> | ||
|- | |- | ||
| 0x16 || [[#sigcmp|sigcmp]] || $cX || $cY || <code><nowiki>current_sig = memcmp($cX, $cY) ? NULL : $cX;</nowiki></code> || <code><nowiki> | | 0x16 || [[#sigcmp|sigcmp]] || $cX || $cY || <code><nowiki>current_sig = memcmp($cX, $cY) ? NULL : $cX;</nowiki></code> || <code><nowiki>(is_mode_secure_bootrom && (ACL($cY) & 0x2))</nowiki></code> || <code><nowiki>is_mode_hs = has_sig = (current_sig != NULL);</nowiki></code> | ||
|- | |- | ||
| 0x17 || sigenc || $cX || $cY || <code><nowiki>$cX = aes_enc($cY, current_sig);</nowiki></code> || <code><nowiki>has_sig</nowiki></code> || <code><nowiki>ACL($cX) = 0x3;</nowiki></code> | | 0x17 || sigenc || $cX || $cY || <code><nowiki>$cX = aes_enc($cY, current_sig);</nowiki></code> || <code><nowiki>(is_mode_hs && has_sig)</nowiki></code> || <code><nowiki>ACL($cX) = 0x3;</nowiki></code> | ||
|- | |- | ||
| 0x18 || [[#sigclr|sigclr]] || N/A || N/A || <code><nowiki>current_sig = NULL;</nowiki></code> || <code><nowiki>has_sig</nowiki></code> || <code><nowiki>has_sig = false;</nowiki></code> | | 0x18 || [[#sigclr|sigclr]] || N/A || N/A || <code><nowiki>current_sig = NULL;</nowiki></code> || <code><nowiki>(is_mode_hs && has_sig)</nowiki></code> || <code><nowiki>has_sig = false;</nowiki></code> | ||
|} | |} | ||
Line 5,302: | Line 5,485: | ||
On boot, every crypto register has an ACL value of 0x1F. | On boot, every crypto register has an ACL value of 0x1F. | ||
In HS mode, [[#STORE|STORE]] can always write to a crypto register | In HS mode, [[#STORE|STORE]] can always write to a crypto register. In NS and LS modes, [[#STORE|STORE]] can only write to a crypto register if it has the [[#Insecure Writeable|Insecure Writeable]] access mode. | ||
In HS mode, [[#LOAD|LOAD]] can only retrieve a crypto register's value if it has the [[#Secure Readable|Secure Readable]] access mode. In NS | In HS mode, [[#LOAD|LOAD]] can only retrieve a crypto register's value if it has the [[#Secure Readable|Secure Readable]] access mode. In NS and LS modes, [[#LOAD|LOAD]] can only retrieve a crypto register's value if it has the [[#Insecure Readable|Insecure Readable]] and [[#Secure Readable|Secure Readable]] access modes. | ||
Loading a secret into a crypto register sets a per-secret ACL, unconditionally. | Loading a secret into a crypto register sets a per-secret ACL, unconditionally. | ||
Line 5,319: | Line 5,502: | ||
==== Insecure Keyable ==== | ==== Insecure Keyable ==== | ||
Controls if a crypto register can be used as key in NS | Controls if a crypto register can be used as key in NS and LS modes. | ||
Forced set if the crypto register has [[#Secure Readable|Insecure Readable]] access. This access mode cannot be set if the crypto register doesn't have [[#Secure Keyable|Secure Keyable]] access. | Forced set if the crypto register has [[#Secure Readable|Insecure Readable]] access. This access mode cannot be set if the crypto register doesn't have [[#Secure Keyable|Secure Keyable]] access. | ||
==== Insecure Readable ==== | ==== Insecure Readable ==== | ||
Controls if a crypto register can be read in NS | Controls if a crypto register can be read in NS and LS modes. | ||
This access mode cannot be set if the crypto register doesn't have [[#Secure Keyable|Secure Readable]] access. | This access mode cannot be set if the crypto register doesn't have [[#Secure Keyable|Secure Readable]] access. | ||
==== Insecure Writeable ==== | ==== Insecure Writeable ==== | ||
Controls if a crypto register can be written to in NS | Controls if a crypto register can be written to in NS and LS modes. | ||
This access mode has no effect in HS mode. | This access mode has no effect in HS mode. |