mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 11:21:23 +00:00
[HOS] Add 8.1.0 support
This commit is contained in:
parent
bd7f572989
commit
12f8f055eb
9 changed files with 49 additions and 21 deletions
|
@ -382,12 +382,14 @@ void print_tsec_key()
|
||||||
tsec_ctxt.size = 0xF00;
|
tsec_ctxt.size = 0xF00;
|
||||||
else if (pkg1_id->kb == KB_FIRMWARE_VERSION_620)
|
else if (pkg1_id->kb == KB_FIRMWARE_VERSION_620)
|
||||||
tsec_ctxt.size = 0x2900;
|
tsec_ctxt.size = 0x2900;
|
||||||
else
|
else if (pkg1_id->kb == KB_FIRMWARE_VERSION_700)
|
||||||
{
|
{
|
||||||
tsec_ctxt.size = 0x3000;
|
tsec_ctxt.size = 0x3000;
|
||||||
// Exit after TSEC key generation.
|
// Exit after TSEC key generation.
|
||||||
*((vu16 *)((u32)tsec_ctxt.fw + 0x2DB5)) = 0x02F8;
|
*((vu16 *)((u32)tsec_ctxt.fw + 0x2DB5)) = 0x02F8;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
tsec_ctxt.size = 0x3300;
|
||||||
|
|
||||||
if (pkg1_id->kb == KB_FIRMWARE_VERSION_620)
|
if (pkg1_id->kb == KB_FIRMWARE_VERSION_620)
|
||||||
{
|
{
|
||||||
|
|
|
@ -109,7 +109,7 @@ void dump_packages12()
|
||||||
gfx_printf("sept will run to get the keys.\nThen rerun this option.");
|
gfx_printf("sept will run to get the keys.\nThen rerun this option.");
|
||||||
btn_wait();
|
btn_wait();
|
||||||
|
|
||||||
if (!reboot_to_sept((u8 *)tsec_ctxt.fw))
|
if (!reboot_to_sept((u8 *)tsec_ctxt.fw, kb))
|
||||||
{
|
{
|
||||||
gfx_printf("Failed to run sept\n");
|
gfx_printf("Failed to run sept\n");
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "fss.h"
|
#include "fss.h"
|
||||||
#include "hos.h"
|
#include "hos.h"
|
||||||
|
#include "../config/config.h"
|
||||||
#include "../libs/fatfs/ff.h"
|
#include "../libs/fatfs/ff.h"
|
||||||
#include "../mem/heap.h"
|
#include "../mem/heap.h"
|
||||||
#include "../storage/emummc.h"
|
#include "../storage/emummc.h"
|
||||||
|
|
|
@ -184,8 +184,10 @@ int keygen(u8 *keyblob, u32 kb, tsec_ctxt_t *tsec_ctxt)
|
||||||
tsec_ctxt->size = 0xF00;
|
tsec_ctxt->size = 0xF00;
|
||||||
else if (kb == KB_FIRMWARE_VERSION_620)
|
else if (kb == KB_FIRMWARE_VERSION_620)
|
||||||
tsec_ctxt->size = 0x2900;
|
tsec_ctxt->size = 0x2900;
|
||||||
else
|
else if (kb == KB_FIRMWARE_VERSION_700)
|
||||||
tsec_ctxt->size = 0x3000;
|
tsec_ctxt->size = 0x3000;
|
||||||
|
else
|
||||||
|
tsec_ctxt->size = 0x3300;
|
||||||
|
|
||||||
// Prepare smmu tsec page for 6.2.0.
|
// Prepare smmu tsec page for 6.2.0.
|
||||||
if (kb == KB_FIRMWARE_VERSION_620)
|
if (kb == KB_FIRMWARE_VERSION_620)
|
||||||
|
|
|
@ -31,7 +31,8 @@
|
||||||
#define KB_FIRMWARE_VERSION_600 5
|
#define KB_FIRMWARE_VERSION_600 5
|
||||||
#define KB_FIRMWARE_VERSION_620 6
|
#define KB_FIRMWARE_VERSION_620 6
|
||||||
#define KB_FIRMWARE_VERSION_700 7
|
#define KB_FIRMWARE_VERSION_700 7
|
||||||
#define KB_FIRMWARE_VERSION_MAX KB_FIRMWARE_VERSION_700
|
#define KB_FIRMWARE_VERSION_810 8
|
||||||
|
#define KB_FIRMWARE_VERSION_MAX KB_FIRMWARE_VERSION_810
|
||||||
|
|
||||||
#define HOS_PKG11_MAGIC 0x31314B50
|
#define HOS_PKG11_MAGIC 0x31314B50
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,7 @@ static const pkg1_id_t _pkg1_ids[] = {
|
||||||
{ "20181218175730", 7, 0x0F00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000, false, NULL, NULL }, //7.0.0
|
{ "20181218175730", 7, 0x0F00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000, false, NULL, NULL }, //7.0.0
|
||||||
{ "20190208150037", 7, 0x0F00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000, false, NULL, NULL }, //7.0.1
|
{ "20190208150037", 7, 0x0F00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000, false, NULL, NULL }, //7.0.1
|
||||||
{ "20190314172056", 7, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000, false, NULL, NULL }, //8.0.0 - 8.0.1
|
{ "20190314172056", 7, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000, false, NULL, NULL }, //8.0.0 - 8.0.1
|
||||||
|
{ "20190531152432", 8, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000, false, NULL, NULL }, //8.1.0
|
||||||
{ NULL } //End.
|
{ NULL } //End.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -29,10 +29,16 @@
|
||||||
|
|
||||||
#include "../gfx/gfx.h"
|
#include "../gfx/gfx.h"
|
||||||
|
|
||||||
/*#include "util.h"
|
extern hekate_config h_cfg;
|
||||||
#define DPRINTF(...) gfx_printf(__VA_ARGS__)
|
|
||||||
#define DEBUG_PRINTING*/
|
|
||||||
#define DPRINTF(...)
|
#ifdef KIP1_PATCH_DEBUG
|
||||||
|
#include "../utils/util.h"
|
||||||
|
#define DPRINTF(...) gfx_printf(__VA_ARGS__)
|
||||||
|
#define DEBUG_PRINTING
|
||||||
|
#else
|
||||||
|
#define DPRINTF(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
//TODO: Replace hardcoded AArch64 instructions with instruction macros.
|
//TODO: Replace hardcoded AArch64 instructions with instruction macros.
|
||||||
//TODO: Reduce hardcoded values without searching kernel for patterns?
|
//TODO: Reduce hardcoded values without searching kernel for patterns?
|
||||||
|
@ -623,7 +629,9 @@ static kip1_id_t _kip_ids[] =
|
||||||
{ "FS", "\x2A\xDB\xE9\x7E\x9B\x5F\x41\x77", _fs_patches_700 }, // FS 7.0.0
|
{ "FS", "\x2A\xDB\xE9\x7E\x9B\x5F\x41\x77", _fs_patches_700 }, // FS 7.0.0
|
||||||
{ "FS", "\x2C\xCE\x65\x9C\xEC\x53\x6A\x8E", _fs_patches_700_exfat }, // FS 7.0.0 exfat
|
{ "FS", "\x2C\xCE\x65\x9C\xEC\x53\x6A\x8E", _fs_patches_700_exfat }, // FS 7.0.0 exfat
|
||||||
{ "FS", "\xB2\xF5\x17\x6B\x35\x48\x36\x4D", _fs_patches_800 }, // FS 8.0.0
|
{ "FS", "\xB2\xF5\x17\x6B\x35\x48\x36\x4D", _fs_patches_800 }, // FS 8.0.0
|
||||||
{ "FS", "\xDB\xD9\x41\xC0\xC5\x3C\x52\xCC", _fs_patches_800_exfat } // FS 8.0.0 exfat
|
{ "FS", "\xDB\xD9\x41\xC0\xC5\x3C\x52\xCC", _fs_patches_800_exfat }, // FS 8.0.0 exfat
|
||||||
|
{ "FS", "\x6B\x09\xB6\x7B\x29\xC0\x20\x24", _fs_patches_800 }, // FS 8.1.0
|
||||||
|
{ "FS", "\xB4\xCA\xE1\xF2\x49\x65\xD9\x2E", _fs_patches_800_exfat } // FS 8.1.0 exfat
|
||||||
};
|
};
|
||||||
|
|
||||||
const pkg2_kernel_id_t *pkg2_identify(u8 *hash)
|
const pkg2_kernel_id_t *pkg2_identify(u8 *hash)
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "../ianos/ianos.h"
|
#include "../ianos/ianos.h"
|
||||||
#include "../libs/fatfs/ff.h"
|
#include "../libs/fatfs/ff.h"
|
||||||
#include "../mem/heap.h"
|
#include "../mem/heap.h"
|
||||||
|
#include "../soc/hw_init.h"
|
||||||
#include "../soc/pmc.h"
|
#include "../soc/pmc.h"
|
||||||
#include "../soc/t210.h"
|
#include "../soc/t210.h"
|
||||||
#include "../storage/emummc.h"
|
#include "../storage/emummc.h"
|
||||||
|
@ -106,7 +107,7 @@ void check_sept()
|
||||||
if (pkg1_id->kb >= KB_FIRMWARE_VERSION_700 && !h_cfg.sept_run)
|
if (pkg1_id->kb >= KB_FIRMWARE_VERSION_700 && !h_cfg.sept_run)
|
||||||
{
|
{
|
||||||
sdmmc_storage_end(&storage);
|
sdmmc_storage_end(&storage);
|
||||||
reboot_to_sept((u8 *)pkg1 + pkg1_id->tsec_off);
|
reboot_to_sept((u8 *)pkg1 + pkg1_id->tsec_off, pkg1_id->kb);
|
||||||
}
|
}
|
||||||
|
|
||||||
out_free:
|
out_free:
|
||||||
|
@ -114,14 +115,17 @@ out_free:
|
||||||
sdmmc_storage_end(&storage);
|
sdmmc_storage_end(&storage);
|
||||||
}
|
}
|
||||||
|
|
||||||
int reboot_to_sept(const u8 *tsec_fw)
|
int reboot_to_sept(const u8 *tsec_fw, u32 kb)
|
||||||
{
|
{
|
||||||
FIL fp;
|
FIL fp;
|
||||||
|
|
||||||
// Copy warmboot reboot code and TSEC fw.
|
// Copy warmboot reboot code and TSEC fw.
|
||||||
|
u32 tsec_fw_size = 0x3000;
|
||||||
|
if (kb > KB_FIRMWARE_VERSION_700)
|
||||||
|
tsec_fw_size = 0x3300;
|
||||||
memcpy((u8 *)(SEPT_PK1T_ADDR - WB_RST_SIZE), (u8 *)warmboot_reboot, sizeof(warmboot_reboot));
|
memcpy((u8 *)(SEPT_PK1T_ADDR - WB_RST_SIZE), (u8 *)warmboot_reboot, sizeof(warmboot_reboot));
|
||||||
memcpy((void *)SEPT_PK1T_ADDR, tsec_fw, 0x3000);
|
memcpy((void *)SEPT_PK1T_ADDR, tsec_fw, tsec_fw_size);
|
||||||
*(vu32 *)SEPT_TCSZ_ADDR = 0x3000;
|
*(vu32 *)SEPT_TCSZ_ADDR = tsec_fw_size;
|
||||||
|
|
||||||
// Copy sept-primary.
|
// Copy sept-primary.
|
||||||
if (f_open(&fp, "sept/sept-primary.bin", FA_READ))
|
if (f_open(&fp, "sept/sept-primary.bin", FA_READ))
|
||||||
|
@ -135,8 +139,17 @@ int reboot_to_sept(const u8 *tsec_fw)
|
||||||
f_close(&fp);
|
f_close(&fp);
|
||||||
|
|
||||||
// Copy sept-secondary.
|
// Copy sept-secondary.
|
||||||
if (f_open(&fp, "sept/sept-secondary.enc", FA_READ))
|
if (kb < KB_FIRMWARE_VERSION_810)
|
||||||
|
{
|
||||||
|
if (f_open(&fp, "sept/sept-secondary_00.enc", FA_READ))
|
||||||
|
if (f_open(&fp, "sept/sept-secondary.enc", FA_READ)) // Try the deprecated version.
|
||||||
goto error;
|
goto error;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (f_open(&fp, "sept/sept-secondary_01.enc", FA_READ))
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
if (f_read(&fp, (u8 *)SEPT_STG2_ADDR, f_size(&fp), NULL))
|
if (f_read(&fp, (u8 *)SEPT_STG2_ADDR, f_size(&fp), NULL))
|
||||||
{
|
{
|
||||||
|
@ -196,7 +209,7 @@ int reboot_to_sept(const u8 *tsec_fw)
|
||||||
PMC(APBDEV_PMC_SCRATCH33) = SEPT_PRI_ADDR;
|
PMC(APBDEV_PMC_SCRATCH33) = SEPT_PRI_ADDR;
|
||||||
PMC(APBDEV_PMC_SCRATCH40) = 0x6000F208;
|
PMC(APBDEV_PMC_SCRATCH40) = 0x6000F208;
|
||||||
|
|
||||||
display_end();
|
reconfig_hw_workaround(false, 0);
|
||||||
|
|
||||||
(*sept)();
|
(*sept)();
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,6 @@
|
||||||
#include "../utils/types.h"
|
#include "../utils/types.h"
|
||||||
|
|
||||||
void check_sept();
|
void check_sept();
|
||||||
int reboot_to_sept(const u8 *tsec_fw);
|
int reboot_to_sept(const u8 *tsec_fw, u32 kb);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue