mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 19:31:12 +00:00
Name hardcoded TSEC regs
This commit is contained in:
parent
1ac7f61f49
commit
1b075c91bd
1 changed files with 33 additions and 16 deletions
|
@ -36,7 +36,7 @@ static int _tsec_dma_wait_idle()
|
||||||
{
|
{
|
||||||
u32 timeout = get_tmr_ms() + 10000;
|
u32 timeout = get_tmr_ms() + 10000;
|
||||||
|
|
||||||
while (!(TSEC(0x1118) & 2))
|
while (!(TSEC(TSEC_DMATRFCMD) & TSEC_DMATRFCMD_IDLE))
|
||||||
if (get_tmr_ms() > timeout)
|
if (get_tmr_ms() > timeout)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -48,13 +48,13 @@ static int _tsec_dma_pa_to_internal_100(int not_imem, int i_offset, int pa_offse
|
||||||
u32 cmd;
|
u32 cmd;
|
||||||
|
|
||||||
if (not_imem)
|
if (not_imem)
|
||||||
cmd = 0x600; // DMA 0x100 bytes
|
cmd = TSEC_DMATRFCMD_SIZE_256B; // DMA 256 bytes
|
||||||
else
|
else
|
||||||
cmd = 0x10; // dma imem
|
cmd = TSEC_DMATRFCMD_IMEM; // DMA IMEM (Instruction memmory)
|
||||||
|
|
||||||
TSEC(0x1114) = i_offset; // tsec_dmatrfmoffs_r
|
TSEC(TSEC_DMATRFMOFFS) = i_offset;
|
||||||
TSEC(0x111C) = pa_offset; // tsec_dmatrffboffs_r
|
TSEC(TSEC_DMATRFFBOFFS) = pa_offset;
|
||||||
TSEC(0x1118) = cmd; // tsec_dmatrfcmd_r
|
TSEC(TSEC_DMATRFCMD) = cmd;
|
||||||
|
|
||||||
return _tsec_dma_wait_idle();
|
return _tsec_dma_wait_idle();
|
||||||
}
|
}
|
||||||
|
@ -74,10 +74,21 @@ int tsec_query(u8 *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
clock_enable_kfuse();
|
clock_enable_kfuse();
|
||||||
|
|
||||||
//Configure Falcon.
|
//Configure Falcon.
|
||||||
TSEC(0x110C) = 0; // tsec_dmactl_r
|
TSEC(TSEC_DMACTL) = 0;
|
||||||
TSEC(0x1010) = 0xFFF2; // tsec_irqmset_r
|
TSEC(TSEC_IRQMSET) =
|
||||||
TSEC(0x101C) = 0xFFF0; // tsec_irqdest_r
|
TSEC_IRQMSET_EXT(0xFF) |
|
||||||
TSEC(0x1048) = 3; // tsec_itfen_r
|
TSEC_IRQMSET_WDTMR |
|
||||||
|
TSEC_IRQMSET_HALT |
|
||||||
|
TSEC_IRQMSET_EXTERR |
|
||||||
|
TSEC_IRQMSET_SWGEN0 |
|
||||||
|
TSEC_IRQMSET_SWGEN1;
|
||||||
|
TSEC(TSEC_IRQDEST) =
|
||||||
|
TSEC_IRQDEST_EXT(0xFF) |
|
||||||
|
TSEC_IRQDEST_HALT |
|
||||||
|
TSEC_IRQDEST_EXTERR |
|
||||||
|
TSEC_IRQDEST_SWGEN0 |
|
||||||
|
TSEC_IRQDEST_SWGEN1;
|
||||||
|
TSEC(TSEC_ITFEN) = TSEC_ITFEN_CTXEN | TSEC_ITFEN_MTHDEN;
|
||||||
if (!_tsec_dma_wait_idle())
|
if (!_tsec_dma_wait_idle())
|
||||||
{
|
{
|
||||||
res = -1;
|
res = -1;
|
||||||
|
@ -122,6 +133,9 @@ int tsec_query(u8 *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
// Fuse driver.
|
// Fuse driver.
|
||||||
fuse = page_alloc(1);
|
fuse = page_alloc(1);
|
||||||
memcpy((void *)&fuse[0x800/4], (void *)FUSE_BASE, 0x400);
|
memcpy((void *)&fuse[0x800/4], (void *)FUSE_BASE, 0x400);
|
||||||
|
fuse[0x82C / 4] = 0;
|
||||||
|
fuse[0x9E0 / 4] = (1 << (kb + 2)) - 1;
|
||||||
|
fuse[0x9E4 / 4] = (1 << (kb + 2)) - 1;
|
||||||
smmu_map(pdir, (FUSE_BASE - 0x800), (u32)fuse, 1, _READABLE | _NONSECURE);
|
smmu_map(pdir, (FUSE_BASE - 0x800), (u32)fuse, 1, _READABLE | _NONSECURE);
|
||||||
|
|
||||||
// Power management controller.
|
// Power management controller.
|
||||||
|
@ -156,10 +170,10 @@ int tsec_query(u8 *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
|
|
||||||
//Execute firmware.
|
//Execute firmware.
|
||||||
HOST1X(0x3300) = 0x34C2E1DA;
|
HOST1X(0x3300) = 0x34C2E1DA;
|
||||||
TSEC(0x1044) = 0;
|
TSEC(TSEC_STATUS) = 0;
|
||||||
TSEC(0x1040) = rev;
|
TSEC(TSEC_BOOTKEYVER) = tsec_ctxt->key_ver;
|
||||||
TSEC(0x1104) = 0; // tsec_bootvec_r
|
TSEC(TSEC_BOOTVEC) = 0;
|
||||||
TSEC(0x1100) = 2; // tsec_cpuctl_r
|
TSEC(TSEC_CPUCTL) = TSEC_CPUCTL_STARTCPU;
|
||||||
|
|
||||||
if (kb <= KB_FIRMWARE_VERSION_600)
|
if (kb <= KB_FIRMWARE_VERSION_600)
|
||||||
{
|
{
|
||||||
|
@ -169,13 +183,13 @@ int tsec_query(u8 *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
u32 timeout = get_tmr_ms() + 2000;
|
u32 timeout = get_tmr_ms() + 2000;
|
||||||
while (!TSEC(0x1044))
|
while (!TSEC(TSEC_STATUS))
|
||||||
if (get_tmr_ms() > timeout)
|
if (get_tmr_ms() > timeout)
|
||||||
{
|
{
|
||||||
res = -4;
|
res = -4;
|
||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
if (TSEC(0x1044) != 0xB0B0B0B0)
|
if (TSEC(TSEC_STATUS) != 0xB0B0B0B0)
|
||||||
{
|
{
|
||||||
res = -5;
|
res = -5;
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
@ -210,6 +224,9 @@ int tsec_query(u8 *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
k = se[SE_KEYTABLE_DATA0_REG_OFFSET / 4];
|
k = se[SE_KEYTABLE_DATA0_REG_OFFSET / 4];
|
||||||
key[kidx++] = k;
|
key[kidx++] = k;
|
||||||
|
|
||||||
|
// Failsafe.
|
||||||
|
if ((u32)get_tmr_us() - start > 500000)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kidx != 8)
|
if (kidx != 8)
|
||||||
|
|
Loading…
Reference in a new issue