diff --git a/bootloader/hos/hos.c b/bootloader/hos/hos.c index 4ec5f81..51f4498 100644 --- a/bootloader/hos/hos.c +++ b/bootloader/hos/hos.c @@ -547,7 +547,7 @@ int hos_keygen(void *keyblob, u32 kb, tsec_ctxt_t *tsec_ctxt, launch_ctxt_t *hos { switch (kb) { - case KB_FIRMWARE_VERSION_100_200: + case KB_FIRMWARE_VERSION_100: case KB_FIRMWARE_VERSION_300: case KB_FIRMWARE_VERSION_301: se_aes_unwrap_key(13, 15, console_keyseed); @@ -789,8 +789,9 @@ int hos_launch(ini_sec_t *cfg) 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. - // Additionally check if running emuMMC and disable GC if v3/v4 fuses are burnt and HOS is <= 8.1.0 or != 11.0.0. + // If Auto NOGC is enabled, check if burnt fuses lower than installed HOS fuses and apply NOGC patch. + // 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) { 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 & 0x2000) && (ctxt.pkg1_id->fuses <= 13)) || // HOS 11.0.0+ fuses burnt. // 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"); @@ -1058,7 +1059,7 @@ int hos_launch(ini_sec_t *cfg) // Finalize per firmware key access. Skip access control if new exosphere. 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_301: se_key_acc_ctrl(12, SE_KEY_TBL_DIS_KEY_ACCESS_FLAG | SE_KEY_LOCK_FLAG); diff --git a/bootloader/hos/hos.h b/bootloader/hos/hos.h index 94136fa..6211d57 100644 --- a/bootloader/hos/hos.h +++ b/bootloader/hos/hos.h @@ -27,19 +27,19 @@ #include -#define KB_FIRMWARE_VERSION_100_200 0 -#define KB_FIRMWARE_VERSION_300 1 -#define KB_FIRMWARE_VERSION_301 2 -#define KB_FIRMWARE_VERSION_400 3 -#define KB_FIRMWARE_VERSION_500 4 -#define KB_FIRMWARE_VERSION_600 5 -#define KB_FIRMWARE_VERSION_620 6 -#define KB_FIRMWARE_VERSION_700 7 -#define KB_FIRMWARE_VERSION_810 8 -#define KB_FIRMWARE_VERSION_900 9 -#define KB_FIRMWARE_VERSION_910 10 +#define KB_FIRMWARE_VERSION_100 0 +#define KB_FIRMWARE_VERSION_300 1 +#define KB_FIRMWARE_VERSION_301 2 +#define KB_FIRMWARE_VERSION_400 3 +#define KB_FIRMWARE_VERSION_500 4 +#define KB_FIRMWARE_VERSION_600 5 +#define KB_FIRMWARE_VERSION_620 6 +#define KB_FIRMWARE_VERSION_700 7 +#define KB_FIRMWARE_VERSION_810 8 +#define KB_FIRMWARE_VERSION_900 9 +#define KB_FIRMWARE_VERSION_910 10 #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_EKS_MAGIC 0x30534B45 diff --git a/nyx/nyx_gui/hos/hos.c b/nyx/nyx_gui/hos/hos.c index de451c0..82a537f 100644 --- a/nyx/nyx_gui/hos/hos.c +++ b/nyx/nyx_gui/hos/hos.c @@ -568,7 +568,7 @@ int hos_keygen(void *keyblob, u32 kb, tsec_ctxt_t *tsec_ctxt) switch (kb) { - case KB_FIRMWARE_VERSION_100_200: + case KB_FIRMWARE_VERSION_100: case KB_FIRMWARE_VERSION_300: case KB_FIRMWARE_VERSION_301: se_aes_unwrap_key(13, 15, console_keyseed); diff --git a/nyx/nyx_gui/hos/hos.h b/nyx/nyx_gui/hos/hos.h index 9a962b4..8d5d28e 100644 --- a/nyx/nyx_gui/hos/hos.h +++ b/nyx/nyx_gui/hos/hos.h @@ -27,19 +27,19 @@ #include -#define KB_FIRMWARE_VERSION_100_200 0 -#define KB_FIRMWARE_VERSION_300 1 -#define KB_FIRMWARE_VERSION_301 2 -#define KB_FIRMWARE_VERSION_400 3 -#define KB_FIRMWARE_VERSION_500 4 -#define KB_FIRMWARE_VERSION_600 5 -#define KB_FIRMWARE_VERSION_620 6 -#define KB_FIRMWARE_VERSION_700 7 -#define KB_FIRMWARE_VERSION_810 8 -#define KB_FIRMWARE_VERSION_900 9 -#define KB_FIRMWARE_VERSION_910 10 +#define KB_FIRMWARE_VERSION_100 0 +#define KB_FIRMWARE_VERSION_300 1 +#define KB_FIRMWARE_VERSION_301 2 +#define KB_FIRMWARE_VERSION_400 3 +#define KB_FIRMWARE_VERSION_500 4 +#define KB_FIRMWARE_VERSION_600 5 +#define KB_FIRMWARE_VERSION_620 6 +#define KB_FIRMWARE_VERSION_700 7 +#define KB_FIRMWARE_VERSION_810 8 +#define KB_FIRMWARE_VERSION_900 9 +#define KB_FIRMWARE_VERSION_910 10 #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_EKS_MAGIC 0x30534B45 diff --git a/nyx/nyx_gui/hos/pkg1.c b/nyx/nyx_gui/hos/pkg1.c index 039a2f7..545c7b6 100644 --- a/nyx/nyx_gui/hos/pkg1.c +++ b/nyx/nyx_gui/hos/pkg1.c @@ -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 }; // 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; - 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; else sec_map = sec_map_4xx;