hos: small refactoring

This commit is contained in:
CTCaer 2021-07-06 10:05:37 +03:00
parent 57e6623d74
commit 561a96c62a
5 changed files with 33 additions and 32 deletions

View file

@ -547,7 +547,7 @@ int hos_keygen(void *keyblob, u32 kb, tsec_ctxt_t *tsec_ctxt, launch_ctxt_t *hos
{ {
switch (kb) switch (kb)
{ {
case KB_FIRMWARE_VERSION_100_200: case KB_FIRMWARE_VERSION_100:
case KB_FIRMWARE_VERSION_300: case KB_FIRMWARE_VERSION_300:
case KB_FIRMWARE_VERSION_301: case KB_FIRMWARE_VERSION_301:
se_aes_unwrap_key(13, 15, console_keyseed); se_aes_unwrap_key(13, 15, console_keyseed);
@ -789,8 +789,9 @@ int hos_launch(ini_sec_t *cfg)
goto error; goto error;
} }
// Check if fuses lower than 4.0.0 or 9.0.0 or 11.0.0 and if yes apply NO Gamecard patch. // If Auto NOGC is enabled, check if burnt fuses lower than installed HOS fuses and apply NOGC patch.
// Additionally check if running emuMMC and disable GC if v3/v4 fuses are burnt and HOS is <= 8.1.0 or != 11.0.0. // For emuMMC, unconditionally enable NOGC when burnt fuses are higher than installed HOS fuses.
// Disable Auto NOGC in stock to prevent black screen (fatal error). Use kip1patch=nogc to force it.
if (!ctxt.stock) if (!ctxt.stock)
{ {
u32 fuses = fuse_read_odm(7); u32 fuses = fuse_read_odm(7);
@ -808,7 +809,7 @@ int hos_launch(ini_sec_t *cfg)
((fuses & 0x400) && (ctxt.pkg1_id->fuses <= 10)) || // HOS 9.0.0+ fuses burnt. ((fuses & 0x400) && (ctxt.pkg1_id->fuses <= 10)) || // HOS 9.0.0+ fuses burnt.
((fuses & 0x2000) && (ctxt.pkg1_id->fuses <= 13)) || // HOS 11.0.0+ fuses burnt. ((fuses & 0x2000) && (ctxt.pkg1_id->fuses <= 13)) || // HOS 11.0.0+ fuses burnt.
// Detection broken! Use kip1patch=nogc // HOS 12.0.0+ // Detection broken! Use kip1patch=nogc // HOS 12.0.0+
((fuses & 0x4000) && (ctxt.pkg1_id->fuses <= 14)) // HOS 11.0.2+ fuses burnt. ((fuses & 0x4000) && (ctxt.pkg1_id->fuses <= 14)) // HOS 12.0.2+ fuses burnt.
) )
)) ))
config_kip1patch(&ctxt, "nogc"); config_kip1patch(&ctxt, "nogc");
@ -1058,7 +1059,7 @@ int hos_launch(ini_sec_t *cfg)
// Finalize per firmware key access. Skip access control if new exosphere. // Finalize per firmware key access. Skip access control if new exosphere.
switch (kb | (exo_new << 7)) switch (kb | (exo_new << 7))
{ {
case KB_FIRMWARE_VERSION_100_200: case KB_FIRMWARE_VERSION_100:
case KB_FIRMWARE_VERSION_300: case KB_FIRMWARE_VERSION_300:
case KB_FIRMWARE_VERSION_301: case KB_FIRMWARE_VERSION_301:
se_key_acc_ctrl(12, SE_KEY_TBL_DIS_KEY_ACCESS_FLAG | SE_KEY_LOCK_FLAG); se_key_acc_ctrl(12, SE_KEY_TBL_DIS_KEY_ACCESS_FLAG | SE_KEY_LOCK_FLAG);

View file

@ -27,19 +27,19 @@
#include <assert.h> #include <assert.h>
#define KB_FIRMWARE_VERSION_100_200 0 #define KB_FIRMWARE_VERSION_100 0
#define KB_FIRMWARE_VERSION_300 1 #define KB_FIRMWARE_VERSION_300 1
#define KB_FIRMWARE_VERSION_301 2 #define KB_FIRMWARE_VERSION_301 2
#define KB_FIRMWARE_VERSION_400 3 #define KB_FIRMWARE_VERSION_400 3
#define KB_FIRMWARE_VERSION_500 4 #define KB_FIRMWARE_VERSION_500 4
#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_810 8 #define KB_FIRMWARE_VERSION_810 8
#define KB_FIRMWARE_VERSION_900 9 #define KB_FIRMWARE_VERSION_900 9
#define KB_FIRMWARE_VERSION_910 10 #define KB_FIRMWARE_VERSION_910 10
#define KB_FIRMWARE_VERSION_1210 11 #define KB_FIRMWARE_VERSION_1210 11
#define KB_FIRMWARE_VERSION_MAX KB_FIRMWARE_VERSION_1210 #define KB_FIRMWARE_VERSION_MAX KB_FIRMWARE_VERSION_1210
#define HOS_PKG11_MAGIC 0x31314B50 #define HOS_PKG11_MAGIC 0x31314B50
#define HOS_EKS_MAGIC 0x30534B45 #define HOS_EKS_MAGIC 0x30534B45

View file

@ -568,7 +568,7 @@ int hos_keygen(void *keyblob, u32 kb, tsec_ctxt_t *tsec_ctxt)
switch (kb) switch (kb)
{ {
case KB_FIRMWARE_VERSION_100_200: case KB_FIRMWARE_VERSION_100:
case KB_FIRMWARE_VERSION_300: case KB_FIRMWARE_VERSION_300:
case KB_FIRMWARE_VERSION_301: case KB_FIRMWARE_VERSION_301:
se_aes_unwrap_key(13, 15, console_keyseed); se_aes_unwrap_key(13, 15, console_keyseed);

View file

@ -27,19 +27,19 @@
#include <assert.h> #include <assert.h>
#define KB_FIRMWARE_VERSION_100_200 0 #define KB_FIRMWARE_VERSION_100 0
#define KB_FIRMWARE_VERSION_300 1 #define KB_FIRMWARE_VERSION_300 1
#define KB_FIRMWARE_VERSION_301 2 #define KB_FIRMWARE_VERSION_301 2
#define KB_FIRMWARE_VERSION_400 3 #define KB_FIRMWARE_VERSION_400 3
#define KB_FIRMWARE_VERSION_500 4 #define KB_FIRMWARE_VERSION_500 4
#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_810 8 #define KB_FIRMWARE_VERSION_810 8
#define KB_FIRMWARE_VERSION_900 9 #define KB_FIRMWARE_VERSION_900 9
#define KB_FIRMWARE_VERSION_910 10 #define KB_FIRMWARE_VERSION_910 10
#define KB_FIRMWARE_VERSION_1210 11 #define KB_FIRMWARE_VERSION_1210 11
#define KB_FIRMWARE_VERSION_MAX KB_FIRMWARE_VERSION_1210 #define KB_FIRMWARE_VERSION_MAX KB_FIRMWARE_VERSION_1210
#define HOS_PKG11_MAGIC 0x31314B50 #define HOS_PKG11_MAGIC 0x31314B50
#define HOS_EKS_MAGIC 0x30534B45 #define HOS_EKS_MAGIC 0x30534B45

View file

@ -115,9 +115,9 @@ const u8 *pkg1_unpack(void *wm_dst, void *sm_dst, void *ldr_dst, const pkg1_id_t
//u32 sec_off[3] = { hdr->wb_off, hdr->ldr_off, hdr->sm_off }; //u32 sec_off[3] = { hdr->wb_off, hdr->ldr_off, hdr->sm_off };
// Get correct header mapping. // Get correct header mapping.
if (id->kb == KB_FIRMWARE_VERSION_100_200 && !strcmp(id->id, "20161121183008")) if (id->kb == KB_FIRMWARE_VERSION_100 && !strcmp(id->id, "20161121183008"))
sec_map = sec_map_100; sec_map = sec_map_100;
else if (id->kb >= KB_FIRMWARE_VERSION_100_200 && id->kb <= KB_FIRMWARE_VERSION_301) else if (id->kb >= KB_FIRMWARE_VERSION_100 && id->kb <= KB_FIRMWARE_VERSION_301)
sec_map = sec_map_2xx; sec_map = sec_map_2xx;
else else
sec_map = sec_map_4xx; sec_map = sec_map_4xx;