mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 11:21:23 +00:00
tsec: change kb to type
Now the path taken is decided by tsec fw type instead of mkey version
This commit is contained in:
parent
9541d1bbd3
commit
9cf0b0f484
2 changed files with 26 additions and 9 deletions
|
@ -33,7 +33,8 @@
|
||||||
// #include <gfx_utils.h>
|
// #include <gfx_utils.h>
|
||||||
|
|
||||||
#define PKG11_MAGIC 0x31314B50
|
#define PKG11_MAGIC 0x31314B50
|
||||||
#define KB_TSEC_FW_EMU_COMPAT 6 // KB ID for HOS 6.2.0.
|
|
||||||
|
#define TSEC_HOS_KB_620 6
|
||||||
|
|
||||||
static int _tsec_dma_wait_idle()
|
static int _tsec_dma_wait_idle()
|
||||||
{
|
{
|
||||||
|
@ -62,10 +63,11 @@ static int _tsec_dma_pa_to_internal_100(int not_imem, int i_offset, int pa_offse
|
||||||
return _tsec_dma_wait_idle();
|
return _tsec_dma_wait_idle();
|
||||||
}
|
}
|
||||||
|
|
||||||
int tsec_query(void *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
int tsec_query(void *tsec_keys, tsec_ctxt_t *tsec_ctxt)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
u8 *fwbuf = NULL;
|
u8 *fwbuf = NULL;
|
||||||
|
u32 type = tsec_ctxt->type;
|
||||||
u32 *pdir, *car, *fuse, *pmc, *flowctrl, *se, *mc, *iram, *evec;
|
u32 *pdir, *car, *fuse, *pmc, *flowctrl, *se, *mc, *iram, *evec;
|
||||||
u32 *pkg11_magic_off;
|
u32 *pkg11_magic_off;
|
||||||
|
|
||||||
|
@ -83,6 +85,9 @@ int tsec_query(void *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
|
|
||||||
kfuse_wait_ready();
|
kfuse_wait_ready();
|
||||||
|
|
||||||
|
if (type == TSEC_FW_TYPE_NEW)
|
||||||
|
mc_enable_ahb_redirect(true);
|
||||||
|
|
||||||
// Configure Falcon.
|
// Configure Falcon.
|
||||||
TSEC(TSEC_DMACTL) = 0;
|
TSEC(TSEC_DMACTL) = 0;
|
||||||
TSEC(TSEC_IRQMSET) =
|
TSEC(TSEC_IRQMSET) =
|
||||||
|
@ -106,7 +111,7 @@ int tsec_query(void *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load firmware or emulate memio environment for newer TSEC fw.
|
// Load firmware or emulate memio environment for newer TSEC fw.
|
||||||
if (kb == KB_TSEC_FW_EMU_COMPAT)
|
if (type == TSEC_FW_TYPE_EMU)
|
||||||
TSEC(TSEC_DMATRFBASE) = (u32)tsec_ctxt->fw >> 8;
|
TSEC(TSEC_DMATRFBASE) = (u32)tsec_ctxt->fw >> 8;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -125,7 +130,7 @@ int tsec_query(void *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kb == KB_TSEC_FW_EMU_COMPAT)
|
if (type == TSEC_FW_TYPE_EMU)
|
||||||
{
|
{
|
||||||
// Init SMMU translation for TSEC.
|
// Init SMMU translation for TSEC.
|
||||||
pdir = smmu_init_for_tsec();
|
pdir = smmu_init_for_tsec();
|
||||||
|
@ -144,8 +149,8 @@ int tsec_query(void *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
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[0x82C / 4] = 0;
|
||||||
fuse[0x9E0 / 4] = (1 << (kb + 2)) - 1;
|
fuse[0x9E0 / 4] = (1 << (TSEC_HOS_KB_620 + 2)) - 1;
|
||||||
fuse[0x9E4 / 4] = (1 << (kb + 2)) - 1;
|
fuse[0x9E4 / 4] = (1 << (TSEC_HOS_KB_620 + 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.
|
||||||
|
@ -187,7 +192,7 @@ int tsec_query(void *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
TSEC(TSEC_BOOTVEC) = 0;
|
TSEC(TSEC_BOOTVEC) = 0;
|
||||||
TSEC(TSEC_CPUCTL) = TSEC_CPUCTL_STARTCPU;
|
TSEC(TSEC_CPUCTL) = TSEC_CPUCTL_STARTCPU;
|
||||||
|
|
||||||
if (kb == KB_TSEC_FW_EMU_COMPAT)
|
if (type == TSEC_FW_TYPE_EMU)
|
||||||
{
|
{
|
||||||
u32 start = get_tmr_us();
|
u32 start = get_tmr_us();
|
||||||
u32 k = se[SE_CRYPTO_KEYTABLE_DATA_REG / 4];
|
u32 k = se[SE_CRYPTO_KEYTABLE_DATA_REG / 4];
|
||||||
|
@ -286,5 +291,8 @@ out:;
|
||||||
bpmp_mmu_enable();
|
bpmp_mmu_enable();
|
||||||
bpmp_clk_rate_set(prev_fid);
|
bpmp_clk_rate_set(prev_fid);
|
||||||
|
|
||||||
|
if (type == TSEC_FW_TYPE_NEW)
|
||||||
|
mc_disable_ahb_redirect();
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
* Copyright (c) 2018 CTCaer
|
* Copyright (c) 2018-2021 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
@ -20,15 +20,24 @@
|
||||||
|
|
||||||
#include <utils/types.h>
|
#include <utils/types.h>
|
||||||
|
|
||||||
|
enum tsec_fw_type
|
||||||
|
{
|
||||||
|
// Retail Hovi Keygen.
|
||||||
|
TSEC_FW_TYPE_OLD = 0, // 1.0.0 - 6.1.0.
|
||||||
|
TSEC_FW_TYPE_EMU = 1, // 6.2.0 emulated enviroment.
|
||||||
|
TSEC_FW_TYPE_NEW = 2, // 7.0.0+.
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct _tsec_ctxt_t
|
typedef struct _tsec_ctxt_t
|
||||||
{
|
{
|
||||||
void *fw;
|
void *fw;
|
||||||
u32 size;
|
u32 size;
|
||||||
|
u32 type;
|
||||||
void *pkg1;
|
void *pkg1;
|
||||||
u32 pkg11_off;
|
u32 pkg11_off;
|
||||||
u32 secmon_base;
|
u32 secmon_base;
|
||||||
} tsec_ctxt_t;
|
} tsec_ctxt_t;
|
||||||
|
|
||||||
int tsec_query(void *tsec_keys, u8 kb, tsec_ctxt_t *tsec_ctxt);
|
int tsec_query(void *tsec_keys, tsec_ctxt_t *tsec_ctxt);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue