Skip to content
This repository was archived by the owner on Oct 17, 2020. It is now read-only.

Commit c2f4645

Browse files
author
EliseZeroTwo
committed
8.1 support
1 parent 2a9b9e2 commit c2f4645

12 files changed

+49
-10
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ OBJCOPY = $(DEVKITARM)/bin/arm-none-eabi-objcopy
1010

1111
name := ReiNX
1212
ver_major := 2
13-
ver_minor := 3
13+
ver_minor := 4
1414

1515
dir_source := src
1616
dir_data := data

data/es_patch.rxp

72 Bytes
Binary file not shown.

src/bootloader.h

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ static const pk11_offs _pk11_offs[] = {
3131
{ "20181218175730", KB_FIRMWARE_VERSION_700, HOS_FIRMWARE_VERSION_700, 0x0F00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //7.0.0
3232
{ "20190208150037", KB_FIRMWARE_VERSION_701, HOS_FIRMWARE_VERSION_700, 0x0F00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //7.0.1
3333
{ "20190314172056", KB_FIRMWARE_VERSION_800, HOS_FIRMWARE_VERSION_800, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //8.0.0
34+
{ "20190531152432", KB_FIRWAMRE_VERSION_810, HOS_FIRMWARE_VERSION_810, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x4002B000, 0x4003E000 }, //8.1.0
3435
{ NULL } // End.
3536
};
3637

src/firmware.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ u8 loadFirm() {
9191
}
9292
else {
9393
if(!has_keygen_ran())
94-
reboot_to_sept(pkg1ldr + pk11Offs->tsec_off);
94+
reboot_to_sept(pkg1ldr + pk11Offs->tsec_off, pk11Offs->hos);
9595
else
9696
se_aes_unwrap_key(8, 12, pk21_keyseed);
9797
}

src/hwinit/se.c

+1
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ int se_aes_unwrap_key(u32 ks_dst, u32 ks_src, const void *input)
163163
{
164164
SE(SE_CONFIG_REG_OFFSET) = SE_CONFIG_DEC_ALG(ALG_AES_DEC) | SE_CONFIG_DST(DST_KEYTAB);
165165
SE(SE_CRYPTO_REG_OFFSET) = SE_CRYPTO_KEY_INDEX(ks_src) | SE_CRYPTO_CORE_SEL(CORE_DECRYPT);
166+
SE(0x318) = 0;
166167
SE(SE_CRYPTO_KEYTABLE_DST_REG_OFFSET) = SE_CRYPTO_KEYTABLE_DST_KEY_INDEX(ks_dst);
167168
return _se_execute(OP_START, NULL, 0, input, 0x10);
168169
}

src/hwinit/types.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ enum KB_FIRMWARE_VERSION {
5959
KB_FIRMWARE_VERSION_700 = 7,
6060
KB_FIRMWARE_VERSION_701 = 7,
6161
KB_FIRMWARE_VERSION_800 = 7,
62+
KB_FIRWAMRE_VERSION_810 = 8,
6263
};
6364

6465
enum HOS_FIRMWARE_VERSION {
@@ -70,7 +71,8 @@ enum HOS_FIRMWARE_VERSION {
7071
HOS_FIRMWARE_VERSION_600 = 6,
7172
HOS_FIRMWARE_VERSION_620 = 7,
7273
HOS_FIRMWARE_VERSION_700 = 8,
73-
HOS_FIRMWARE_VERSION_800 = 9,
74+
HOS_FIRMWARE_VERSION_800 = 9,
75+
HOS_FIRMWARE_VERSION_810 = 10,
7476
};
7577

7678
#endif

src/kippatches/fs.inc

+22
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,18 @@ static kipdiff_t fs_diffs_800_exfat_nogc[3] = {
240240
{ 0, 0, NULL, NULL }
241241
};
242242

243+
static kipdiff_t fs_diffs_810_nosigchk[3] = {
244+
{ 0x7630C, 4, "\x51\x44\x00\x94", "\xE0\x03\x1F\x2A" },
245+
{ 0xF49A4, 4, "\xC0\x03\x00\x36", "\x1F\x20\x03\xD5" },
246+
{ 0, 0, NULL, NULL },
247+
};
248+
249+
static kipdiff_t fs_diffs_810_exfat_nosigchk[3] = {
250+
{ 0x818BC, 4, "\x51\x44\x00\x94", "\xE0\x03\x1F\x2A" },
251+
{ 0xFFF54, 4, "\xC0\x03\x00\x36", "\x1F\x20\x03\xD5" },
252+
{ 0, 0, NULL, NULL },
253+
};
254+
243255
/* patches */
244256

245257
static kippatch_t fs_kip_patches_100[] = {
@@ -351,4 +363,14 @@ static kippatch_t fs_kip_patches_800_exfat[] = {
351363
{ "nosigchk", fs_diffs_800_exfat_nosigchk },
352364
{ "nogc", fs_diffs_800_exfat_nogc },
353365
{ NULL, NULL }
366+
};
367+
368+
static kippatch_t fs_kip_patches_810[] = {
369+
{ "nosigchk", fs_diffs_810_nosigchk },
370+
{ NULL, NULL }
371+
};
372+
373+
static kippatch_t fs_kip_patches_810_exfat[] = {
374+
{ "nosigchk", fs_diffs_810_exfat_nosigchk },
375+
{ NULL, NULL }
354376
};

src/package.c

+2
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,8 @@ kippatchset_t kip_patches[] = {
327327
{ "FS", "\x2c\xce\x65\x9c\xec\x53\x6a\x8e\x4d\x91\xf3\xbe\x4b\x74\xbe\xd3", fs_kip_patches_700_exfat },
328328
{ "FS", "\xb2\xf5\x17\x6b\x35\x48\x36\x4d\x07\x9a\x29\xb1\x41\xa2\x3b\x06", fs_kip_patches_800 },
329329
{ "FS", "\xdb\xd9\x41\xc0\xc5\x3c\x52\xcc\xf7\x20\x2c\x84\xd8\xe0\xf7\x80", fs_kip_patches_800_exfat },
330+
{ "FS", "\x6b\x09\xb6\x7b\x29\xc0\x20\x24\x6d\xc3\x4f\x5a\x04\xf5\xd3\x09", fs_kip_patches_810 },
331+
{ "FS", "\xb4\xca\xe1\xf2\x49\x65\xd9\x2e\xd2\x4e\xbe\x9e\x97\xf6\x09\xc3", fs_kip_patches_810_exfat },
330332
{ NULL, NULL, NULL },
331333
};
332334

src/patches.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include "patches.h"
1818

1919
void patchFS(pkg2_kip1_info_t* ki) {
20-
2120
print("Patching FS\n");
2221

2322
u8 kipHash[0x20];
@@ -216,6 +215,7 @@ void patchSecmon(u32 secmonBase, u32 fw){
216215
}
217216
}
218217

218+
219219
void patchKernel(pkg2_hdr_t *pkg2){
220220
//Patch Kernel
221221
if(!hasCustomKern()) {

src/sept.c

+15-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717

1818
#include "sept.h"
19+
#include "hwinit/types.h"
1920

2021
static u8 warmboot_reboot[] = {
2122
0x14, 0x00, 0x9F, 0xE5, // LDR R0, =0x7000E450
@@ -35,6 +36,7 @@ int has_keygen_ran() {
3536
if(keys_generated == 1)
3637
return keys_generated;
3738
int has_ran = PMC(APBDEV_PMC_SCRATCH49) == 67;
39+
PMC(APBDEV_PMC_SCRATCH49) = 0;
3840
keys_generated = has_ran;
3941
return has_ran;
4042
}
@@ -60,20 +62,29 @@ void reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size)
6062
}
6163
}
6264

63-
int reboot_to_sept(const u8 *tsec_fw)
65+
int reboot_to_sept(const u8 *tsec_fw, u32 hosver)
6466
{
6567
// Copy warmboot reboot code and TSEC fw.
6668
memcpy((u8 *)(SEPT_PK1T_ADDR - WB_RST_SIZE), (u8 *)warmboot_reboot, sizeof(warmboot_reboot));
67-
memcpy((void *)SEPT_PK1T_ADDR, tsec_fw, 0x3000);
68-
*(vu32 *)SEPT_TCSZ_ADDR = 0x3000;
69+
memcpy((void *)SEPT_PK1T_ADDR, tsec_fw, hosver == HOS_FIRMWARE_VERSION_800 ? 0x3000 : 0x3300);
70+
*(vu32 *)SEPT_TCSZ_ADDR = hosver == HOS_FIRMWARE_VERSION_800 ? 0x3000 : 0x3300;
6971

7072
// Copy sept-primary.
7173
fopen("/sept/sept-primary.bin", "rb");
7274
fread((u8 *)SEPT_STG1_ADDR, fsize(), 1);
7375
fclose();
7476

7577
// Copy sept-secondary.
76-
fopen("/sept/sept-secondary.enc", "rb");
78+
char *sec_path;
79+
switch(hosver) {
80+
case HOS_FIRMWARE_VERSION_800:
81+
sec_path = "/sept/sept-secondary_00.enc";
82+
break;
83+
case HOS_FIRMWARE_VERSION_810:
84+
sec_path = "/sept/sept-secondary_01.enc";
85+
break;
86+
}
87+
fopen(sec_path, "rb");
7788
fread((u8 *)SEPT_STG2_ADDR, fsize(), 1);
7889
fclose();
7990

src/sept.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,4 @@
4040

4141
int has_keygen_ran();
4242
void reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size);
43-
int reboot_to_sept(const u8 *tsec_fw);
43+
int reboot_to_sept(const u8 *tsec_fw, u32 hosver);

0 commit comments

Comments
 (0)