TSEC: Difference between revisions
No edit summary |
|||
Line 103: | Line 103: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_GPTMR_PERIOD | ||
| 0x54501020 | | 0x54501020 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_GPTMR_TIME | ||
| 0x54501024 | | 0x54501024 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_GPTMR_ENABLE | ||
| 0x54501028 | | 0x54501028 | ||
| 0x04 | | 0x04 | ||
Line 123: | Line 123: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_WDTMR_TIME | ||
| 0x54501034 | | 0x54501034 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_WDTMR_ENABLE | ||
| 0x54501038 | | 0x54501038 | ||
| 0x04 | | 0x04 | ||
Line 167: | Line 167: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_MTHD_DATA | ||
| 0x54501064 | | 0x54501064 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_MTHD_CMD | ||
| 0x54501068 | | 0x54501068 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_MTHD_DATA_WR | ||
| 0x5450106C | | 0x5450106C | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_MTHD_OCCUPIED | ||
| 0x54501070 | | 0x54501070 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_MTHD_ACK | ||
| 0x54501074 | | 0x54501074 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | FALCON_MTHD_LIMIT | ||
| 0x54501078 | | 0x54501078 | ||
| 0x04 | | 0x04 | ||
Line 279: | Line 279: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| FALCON_DMATRFSTAT | | [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]] | ||
| 0x54501120 | | 0x54501120 | ||
| 0x04 | | 0x04 | ||
Line 291: | Line 291: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#FALCON_HWCFG2|FALCON_HWCFG2]] | ||
| 0x5450112C | | 0x5450112C | ||
| 0x04 | | 0x04 | ||
Line 423: | Line 423: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| FALCON_ICD_CMD | | [[#FALCON_ICD_CMD|FALCON_ICD_CMD]] | ||
| 0x54501200 | | 0x54501200 | ||
| 0x04 | | 0x04 | ||
Line 439: | Line 439: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| FALCON_SCTL | | [[#FALCON_SCTL|FALCON_SCTL]] | ||
| 0x54501240 | | 0x54501240 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCP_CTL_ACCESS|TSEC_SCP_CTL_ACCESS]] | ||
| 0x54501400 | | 0x54501400 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | TSEC_SCP_UNK0 | ||
| 0x54501404 | | 0x54501404 | ||
| 0x04 | | 0x04 | ||
Line 455: | Line 455: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]] | ||
| 0x5450140C | | 0x5450140C | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | TSEC_SCP_UNK1 | ||
| 0x54501410 | | 0x54501410 | ||
| 0x04 | | 0x04 | ||
Line 467: | Line 467: | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | TSEC_SCP_UNK2 | ||
| 0x54501420 | | 0x54501420 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]] | ||
| 0x54501428 | | 0x54501428 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| [[# | | [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] | ||
| 0x54501430 | | 0x54501430 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | TSEC_SCP_UNK3 | ||
| 0x54501454 | | 0x54501454 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | TSEC_SCP_AES_STAT | ||
| 0x54501458 | | 0x54501458 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | TSEC_SCP_UNK4 | ||
| 0x54501470 | | 0x54501470 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]] | ||
| 0x54501480 | | 0x54501480 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| | | [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]] | ||
| 0x54501484 | |||
| 0x04 | |||
|- | |||
| TSEC_SCP_UNK5 | |||
| 0x54501490 | | 0x54501490 | ||
| 0x04 | | 0x04 | ||
|- | |- | ||
| [[# | | [[#TSEC_SCP_ERR|TSEC_SCP_ERR]] | ||
| 0x54501498 | | 0x54501498 | ||
| 0x04 | | 0x04 | ||
Line 1,185: | Line 1,189: | ||
| 9-17 | | 9-17 | ||
| FALCON_HWCFG_DMEM_SIZE | | FALCON_HWCFG_DMEM_SIZE | ||
|- | |||
| 18-25 | |||
| FALCON_HWCFG_MTHD_SIZE | |||
|- | |||
| 26-31 | |||
| FALCON_HWCFG_DMATRF_SLOTS | |||
|} | |} | ||
Line 1,248: | Line 1,258: | ||
Takes the offset for Falcon's target memory being transferred. | Takes the offset for Falcon's target memory being transferred. | ||
=== | === FALCON_DMATRFSTAT === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0 | ||
| | | FALCON_DMATRFSTAT_PENDING | ||
|- | |||
| 16-18 | |||
| FALCON_DMATRFSTAT_NUM_STORES_PENDING | |||
|- | |- | ||
| | | 24-26 | ||
| | | FALCON_DMATRFSTAT_NUM_LOADS_PENDING | ||
|} | |} | ||
=== | === FALCON_HWCFG2 === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0-3 | ||
| | | FALCON_HWCFG2_VERSION | ||
|- | |||
| 4-5 | |||
| FALCON_HWCFG2_SCP_MODE | |||
|- | |||
| 6-7 | |||
| FALCON_HWCFG2_SUBVERSION | |||
|- | |||
| 8-11 | |||
| FALCON_HWCFG2_IMEM_PORTS | |||
|- | |||
| 12-15 | |||
| FALCON_HWCFG2_DMEM_PORTS | |||
|- | |||
| 16-19 | |||
| FALCON_HWCFG2_VM_PAGES_LOG2 | |||
|} | |} | ||
=== | === FALCON_ICD_CMD === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0-3 | ||
| | | FALCON_ICD_CMD_OPC | ||
0x0: BREAK | |||
0x1: CONTINUE_FROM_PC | |||
0x2: CONTINUE_FROM_ADDR | |||
0x3: CONTINUE_UNK1_FROM_PC | |||
0x4: CONTINUE_UNK1_FROM_ADDR | |||
0x5: SINGLE_STEP_FROM_PC | |||
0x6: SINGLE_STEP_FROM_ADDR | |||
0x7: SET_BREAK_MASK | |||
0x8: REG_READ | |||
0x9: REG_WRITE | |||
0xA: DATA_READ | |||
0xB: DATA_WRITE | |||
0xC: IO_READ | |||
0xD: IO_WRITE | |||
0xE: STATUS_READ | |||
|- | |||
| 6-7 | |||
| FALCON_ICD_CMD_DATA_SIZE | |||
|- | |||
| 8-12 | |||
| FALCON_ICD_CMD_IDX | |||
|- | |||
| 14 | |||
| FALCON_ICD_CMD_ERROR | |||
|- | |||
| 15 | |||
| FALCON_ICD_CMD_DONE | |||
|- | |- | ||
| | | 16-31 | ||
| | | FALCON_ICD_CMD_BREAK_MASK | ||
|} | |} | ||
=== | === FALCON_SCTL === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0- | | 0-1 | ||
| | | FALCON_SCTL_SEC_MODE | ||
0: Non-secure | |||
1: Light Secure | |||
2: Heavy Secure | |||
|} | |||
=== TSEC_SCP_CTL_ACCESS === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 20 | ||
| | | Enable TSEC_SCP_INSN_STAT register | ||
|} | |||
=== TSEC_SCP_CTL_STAT === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |- | ||
| | | 20 | ||
| | | TSEC_SCP_CTL_STAT_DEBUG_MODE | ||
|} | |||
=== TSEC_SCP_CTL_MODE === | |||
|} | |||
=== | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |||
| 0 | |||
| Disable reads for the UNK register block | |||
|- | |||
| 1 | |||
| Disable reads for the TFBIF register block | |||
|- | |||
| 2 | |||
| Disable reads for the DMA register block | |||
|- | |||
| 3 | |||
| Disable reads for the TEGRA register block | |||
|- | |||
| 4 | |||
| Disable writes for the UNK register block | |||
|- | |||
| 5 | |||
| Disable writes for the TFBIF register block | |||
|- | |||
| 6 | |||
| Disable writes for the DMA register block | |||
|- | |||
| 7 | |||
| Disable writes for the TEGRA register block | |||
|} | |||
Controls accesses to the other sub-engines and can only be cleared in Heavy Secure mode. | |||
=== TSEC_SCP_CTL_PKEY === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD | |||
|- | |||
| 1 | |||
| TSEC_SCP_CTL_PKEY_LOADED | |||
|} | |||
=== TSEC_SCP_SEQ_STAT === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Set if crypto sequence recording (cs0begin/cs1begin) is active | |||
|- | |||
| 4-7 | |||
| Number of instructions left for the crypto sequence | |||
|- | |||
| 12-15 | |||
| Active crypto key register | |||
|} | |||
Contains information on the last crypto sequence (cs0 or cs1) executed. | |||
=== TSEC_SCP_INSN_STAT === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0-7 | |||
| Crypto fuc5 destination register or immediate value | |||
|- | |||
| 8-15 | |||
| Crypto fuc5 source register or immediate value | |||
|- | |||
| 16-30 | |||
| Crypto fuc5 operation | |||
0x0000: none (fuc5 opcode 0x00) | |||
0x0010: cmov (fuc5 opcode 0x84) | |||
0x0020: xdst (with cxset) or cxsin (fuc5 opcode 0x88) | |||
0x0030: xdld (with cxset) or cxsout (fuc5 opcode 0x8C) | |||
0x0040: csrng (fuc5 opcode 0x90) | |||
0x0050: cs0begin (fuc5 opcode 0x94) | |||
0x0060: cs0exec (fuc5 opcode 0x98) | |||
0x0070: cs1begin (fuc5 opcode 0x9C) | |||
0x0080: cs1exec (fuc5 opcode 0xA0) | |||
0x0090: (fuc5 opcode 0xA4) | |||
0x00A0: (fuc5 opcode 0xA8) | |||
0x00B0: cxor (fuc5 opcode 0xAC) | |||
0x00C0: cadd (fuc5 opcode 0xB0) | |||
0x00D0: cand (fuc5 opcode 0xB4) | |||
0x00E0: crev (fuc5 opcode 0xB8) | |||
0x00F0: cprecmac (fuc5 opcode 0xBC) | |||
0x0100: csecret (fuc5 opcode 0xC0) | |||
0x0110: ckeyreg (fuc5 opcode 0xC4) | |||
0x0120: ckexp (fuc5 opcode 0xC8) | |||
0x0130: ckrexp (fuc5 opcode 0xCC) | |||
0x0140: cenc (fuc5 opcode 0xD0) | |||
0x0150: cdec (fuc5 opcode 0xD4) | |||
0x0160: (fuc5 opcode 0xD8) | |||
0x0170: csigenc (fuc5 opcode 0xDC) | |||
0x0180: cchmod (fuc5 opcode 0xE0) | |||
|- | |||
| 31 | |||
| Set if running in secure mode (cauth) | |||
|} | |||
Contains information on the last crypto instruction executed. | |||
=== TSEC_SCP_IRQSTAT === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 1 | |||
| Unknown | |||
|- | |||
| 8 | |||
| TSEC_SCP_IRQSTAT_HALT | |||
|- | |||
| 12 | |||
| Unknown | |||
|- | |||
| 16 | |||
| TSEC_SCP_IRQSTAT_BAD_INSN | |||
|- | |||
| 20 | |||
| TSEC_SCP_IRQSTAT_SINGLE_STEP | |||
|- | |||
| 24 | |||
| Unknown | |||
|- | |||
| 28 | |||
| Unknown | |||
|} | |||
Used for getting the status of crypto IRQs. | |||
=== TSEC_SCP_IRQMASK === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 1 | |||
| Unknown | |||
|- | |||
| 8 | |||
| TSEC_SCP_IRQMASK_HALT | |||
|- | |||
| 12 | |||
| Unknown | |||
|- | |||
| 16 | |||
| TSEC_SCP_IRQMASK_BAD_INSN | |||
|- | |||
| 20 | |||
| TSEC_SCP_IRQMASK_SINGLE_STEP | |||
|- | |||
| 24 | |||
| Unknown | |||
|- | |||
| 28 | |||
| Unknown | |||
|} | |||
Used for getting the value of the mask for crypto IRQs. | |||
=== TSEC_SCP_ERR === | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| Invalid instruction | |||
|- | |||
| 4 | |||
| Empty crypto sequence | |||
|- | |||
| 8 | |||
| Crypto sequence is too long | |||
|- | |||
| 12 | |||
| Crypto sequence was not finished | |||
|- | |||
| 16 | |||
| Bad signature for cauth | |||
|- | |- | ||
| 24 | | 24 | ||
| | | Wrong permission | ||
|} | |} | ||
Contains information on crypto | Contains information on crypto errors. | ||
=== TSEC_TFBIF_MCCIF_FIFOCTRL === | === TSEC_TFBIF_MCCIF_FIFOCTRL === | ||
Line 2,688: | Line 2,907: | ||
Entry to Authenticated Mode always sets $pc to the address supplied in $cauth (ie the base of the signature-checked region). This takes effect when trying to branch to any address within the range covered by $cauth. Entry to Authenticated Mode (also called "Secure Mode") computes a MAC over the $cauth region and compares it to $c6 in order to perform the signature check. | Entry to Authenticated Mode always sets $pc to the address supplied in $cauth (ie the base of the signature-checked region). This takes effect when trying to branch to any address within the range covered by $cauth. Entry to Authenticated Mode (also called "Secure Mode") computes a MAC over the $cauth region and compares it to $c6 in order to perform the signature check. | ||
Exit from Authenticated Mode must poke a special register before leaving authenticated code pages and a failure to do this would result in the Falcon core halting. Every Falcon based unit (TSEC, NVDEC, VIC) must map this register in their engine-specific subset of registers. In TSEC's case, the register is | Exit from Authenticated Mode must poke a special register before leaving authenticated code pages and a failure to do this would result in the Falcon core halting. Every Falcon based unit (TSEC, NVDEC, VIC) must map this register in their engine-specific subset of registers. In TSEC's case, the register is [[#TSEC_SCP_CTL_MODE|TSEC_SCP_CTL_MODE]]. | ||
=== Unknown Instructions === | === Unknown Instructions === |