From de830df7e7781192db4d5bf22530a922e5e2cdd8 Mon Sep 17 00:00:00 2001 From: Kostas Missos Date: Sun, 24 Feb 2019 01:06:24 +0200 Subject: [PATCH] Add automatic NOGC based on fuses burnt Auto NoGC: 0: Force disable, 1: Auto (checks fuses and fw version) And also remove customlogo. It's redudunt. --- bootloader/config/config.c | 114 ++++++++++++++++++------------------ bootloader/config/config.h | 9 +-- bootloader/hos/hos.c | 7 ++- bootloader/hos/hos_config.c | 8 +-- bootloader/hos/hos_config.h | 3 +- bootloader/main.c | 29 ++++----- 6 files changed, 85 insertions(+), 85 deletions(-) diff --git a/bootloader/config/config.c b/bootloader/config/config.c index d04b247..a6c8fbf 100644 --- a/bootloader/config/config.c +++ b/bootloader/config/config.c @@ -48,6 +48,8 @@ void set_default_configuration() h_cfg.backlight = 100; h_cfg.autohosoff = 0; h_cfg.errors = 0; + h_cfg.autonogc = 1; + h_cfg.sept_run = EMC(EMC_SCRATCH0) & EMC_SEPT_RUN; } int create_config_entry() @@ -102,6 +104,9 @@ int create_config_entry() f_puts("\nautohosoff=", &fp); itoa(h_cfg.autohosoff, lbuf, 10); f_puts(lbuf, &fp); + f_puts("\nautonogc=", &fp); + itoa(h_cfg.autonogc, lbuf, 10); + f_puts(lbuf, &fp); f_puts("\n", &fp); if (mainIniFound) @@ -436,64 +441,6 @@ void config_bootdelay() btn_wait(); } -void config_customlogo() -{ - gfx_clear_grey(&gfx_ctxt, 0x1B); - gfx_con_setpos(&gfx_con, 0, 0); - - ment_t *ments = (ment_t *)malloc(sizeof(ment_t) * 5); - u32 *cb_values = (u32 *)malloc(sizeof(u32) * 2); - - for (u32 j = 0; j < 2; j++) - { - cb_values[j] = j; - ments[j + 2].type = MENT_DATA; - ments[j + 2].data = &cb_values[j]; - } - - ments[0].type = MENT_BACK; - ments[0].caption = "Back"; - - ments[1].type = MENT_CHGLINE; - - if (h_cfg.customlogo) - { - ments[2].caption = " Disable"; - ments[3].caption = "*Enable"; - - } - else - { - ments[2].caption = "*Disable"; - ments[3].caption = " Enable"; - } - - memset(&ments[4], 0, sizeof(ment_t)); - menu_t menu = {ments, "Custom bootlogo", 0, 0}; - - u32 *temp_customlogo = (u32 *)tui_do_menu(&gfx_con, &menu); - if (temp_customlogo != NULL) - { - gfx_clear_grey(&gfx_ctxt, 0x1B); - gfx_con_setpos(&gfx_con, 0, 0); - - h_cfg.customlogo = *(u32 *)temp_customlogo; - // Save choice to ini file. - if (!create_config_entry()) - gfx_puts(&gfx_con, "\nConfiguration was saved!\n"); - else - EPRINTF("\nConfiguration saving failed!"); - gfx_puts(&gfx_con, "\nPress any key..."); - } - - free(ments); - free(cb_values); - - if (temp_customlogo == NULL) - return; - btn_wait(); -} - void config_verification() { gfx_clear_grey(&gfx_ctxt, 0x1B); @@ -662,3 +609,54 @@ void config_auto_hos_poweroff() return; btn_wait(); } + +void config_nogc() +{ + gfx_clear_grey(&gfx_ctxt, 0x1B); + gfx_con_setpos(&gfx_con, 0, 0); + + ment_t *ments = (ment_t *)malloc(sizeof(ment_t) * 5); + u32 *cb_values = (u32 *)malloc(sizeof(u32) * 2); + + for (u32 j = 0; j < 2; j++) + { + cb_values[j] = j; + ments[j + 2].type = MENT_DATA; + ments[j + 2].data = &cb_values[j]; + } + + ments[0].type = MENT_BACK; + ments[0].caption = "Back"; + + ments[1].type = MENT_CHGLINE; + + if (h_cfg.autonogc) + { + ments[2].caption = " Disable"; + ments[3].caption = "*Auto"; + } + else + { + ments[2].caption = "*Disable"; + ments[3].caption = " Auto"; + } + + memset(&ments[4], 0, sizeof(ment_t)); + menu_t menu = {ments, "No Gamecard", 0, 0}; + + u32 *temp_nogc = (u32 *)tui_do_menu(&gfx_con, &menu); + if (temp_nogc != NULL) + { + h_cfg.autonogc = *(u32 *)temp_nogc; + _save_config(); + } + + free(ments); + free(cb_values); + + if (temp_nogc == NULL) + return; + btn_wait(); +} + +#pragma GCC pop_options diff --git a/bootloader/config/config.h b/bootloader/config/config.h index d27f7c1..d63f6d1 100644 --- a/bootloader/config/config.h +++ b/bootloader/config/config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 CTCaer + * Copyright (c) 2018-2019 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -25,14 +25,15 @@ typedef struct _hekate_config u32 autoboot; u32 autoboot_list; u32 bootwait; - u32 customlogo; u32 verification; u32 backlight; u32 autohosoff; - u32 errors; + u32 autonogc; // Global temporary config. int se_keygen_done; u32 sbar_time_keeping; + u32 errors; + int sept_run; } hekate_config; typedef enum @@ -44,9 +45,9 @@ void set_default_configuration(); int create_config_entry(); void config_autoboot(); void config_bootdelay(); -void config_customlogo(); void config_verification(); void config_backlight(); void config_auto_hos_poweroff(); +void config_nogc(); #endif /* _CONFIG_H_ */ diff --git a/bootloader/hos/hos.c b/bootloader/hos/hos.c index db93fa8..3f88d04 100644 --- a/bootloader/hos/hos.c +++ b/bootloader/hos/hos.c @@ -380,12 +380,15 @@ int hos_launch(ini_sec_t *cfg) if (!_read_emmc_pkg1(&ctxt)) return 0; + // Check if fuses lower than 4.0.0 and if yes apply NO Gamecard patch. + if (h_cfg.autonogc && !(fuse_read_odm(7) & ~0xF) && ctxt.pkg1_id->kb >= KB_FIRMWARE_VERSION_400) + config_kip1patch(&ctxt, "nogc"); + gfx_printf(&gfx_con, "Loaded pkg1 and keyblob\n"); // Generate keys. if (!h_cfg.se_keygen_done || ctxt.pkg1_id->kb >= KB_FIRMWARE_VERSION_620) { - tsec_ctxt.key_ver = 1; tsec_ctxt.fw = (u8 *)ctxt.pkg1 + ctxt.pkg1_id->tsec_off; tsec_ctxt.pkg1 = ctxt.pkg1; tsec_ctxt.pkg11_off = ctxt.pkg1_id->pkg11_off; @@ -503,7 +506,7 @@ int hos_launch(ini_sec_t *cfg) const char* unappliedPatch = pkg2_patch_kips(&kip1_info, ctxt.kip1_patches); if (unappliedPatch != NULL) { - gfx_printf(&gfx_con, "%kREQUESTED PATCH '%s' NOT APPLIED!%k\n", 0xFFFF0000, unappliedPatch, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kFailed to apply patch '%s'!%k\n", 0xFFFF0000, unappliedPatch, 0xFFCCCCCC); sd_unmount(); // Just exiting is not enough until pkg2_patch_kips stops modifying the string passed into it. _free_launch_components(&ctxt); diff --git a/bootloader/hos/hos_config.c b/bootloader/hos/hos_config.c index b5d309b..6bdb04a 100644 --- a/bootloader/hos/hos_config.c +++ b/bootloader/hos/hos_config.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2018 naehrwert - * Copyright (c) 2018 CTCaer + * Copyright (c) 2018-2019 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -156,7 +156,7 @@ static int _config_atmosphere(launch_ctxt_t *ctxt, const char *value) return 1; } -static int _config_kip1patch(launch_ctxt_t *ctxt, const char *value) +int config_kip1patch(launch_ctxt_t *ctxt, const char *value) { if (value == NULL) return 0; @@ -197,14 +197,14 @@ static const cfg_handler_t _config_handlers[] = { { "secmon", _config_secmon }, { "kernel", _config_kernel }, { "kip1", _config_kip1 }, - { "kip1patch", _config_kip1patch }, + { "kip1patch", config_kip1patch }, { "fullsvcperm", _config_svcperm }, { "debugmode", _config_debugmode }, { "atmosphere", _config_atmosphere }, { NULL, NULL }, }; -int _parse_boot_config(launch_ctxt_t *ctxt, ini_sec_t *cfg) +int parse_boot_config(launch_ctxt_t *ctxt, ini_sec_t *cfg) { LIST_FOREACH_ENTRY(ini_kv_t, kv, &cfg->kvs, link) { diff --git a/bootloader/hos/hos_config.h b/bootloader/hos/hos_config.h index a8946a5..76c8156 100644 --- a/bootloader/hos/hos_config.h +++ b/bootloader/hos/hos_config.h @@ -19,7 +19,8 @@ #include "hos.h" -int _parse_boot_config(launch_ctxt_t *ctxt, ini_sec_t *cfg); +int parse_boot_config(launch_ctxt_t *ctxt, ini_sec_t *cfg); +int config_kip1patch(launch_ctxt_t *ctxt, const char *value); #endif diff --git a/bootloader/main.c b/bootloader/main.c index ca19f75..930a568 100644 --- a/bootloader/main.c +++ b/bootloader/main.c @@ -1,7 +1,7 @@ /* * Copyright (c) 2018 naehrwert * - * Copyright (c) 2018 CTCaer + * Copyright (c) 2018-2019 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -786,14 +786,14 @@ void auto_launch_firmware() h_cfg.autoboot_list = atoi(kv->val); else if (!strcmp("bootwait", kv->key)) h_cfg.bootwait = atoi(kv->val); - else if (!strcmp("customlogo", kv->key)) - h_cfg.customlogo = atoi(kv->val); else if (!strcmp("verification", kv->key)) h_cfg.verification = atoi(kv->val); else if (!strcmp("backlight", kv->key)) h_cfg.backlight = atoi(kv->val); else if (!strcmp("autohosoff", kv->key)) h_cfg.autohosoff = atoi(kv->val); + else if (!strcmp("autonogc", kv->key)) + h_cfg.autonogc = atoi(kv->val); } boot_entry_id++; continue; @@ -867,8 +867,6 @@ void auto_launch_firmware() else goto out; - if (h_cfg.customlogo) - { u8 *bitmap = NULL; if (bootlogoCustomEntry != NULL) // Check if user set custom logo path at the boot entry. { @@ -916,7 +914,6 @@ void auto_launch_firmware() else free(bitmap); } - } // Render boot logo. if (bootlogoFound) @@ -978,8 +975,8 @@ out: void about() { static const char credits[] = - "\nhekate (C) 2018 naehrwert, st4rk\n\n" - "CTCaer mod (C) 2018 CTCaer\n" + "\nhekate (c) 2018 naehrwert, st4rk\n\n" + "CTCaer mod (c) 2018 CTCaer\n" " ___________________________________________\n\n" "Thanks to: %kderrek, nedwill, plutoo,\n" " shuffle2, smea, thexyz, yellows8%k\n" @@ -989,14 +986,14 @@ void about() " ___________________________________________\n\n" "Open source and free packages used:\n\n" " - FatFs R0.13b,\n" - " Copyright (C) 2018, ChaN\n\n" + " Copyright (c) 2018, ChaN\n\n" " - bcl-1.2.0,\n" - " Copyright (C) 2003-2006, Marcus Geelnard\n\n" + " Copyright (c) 2003-2006, Marcus Geelnard\n\n" " - Atmosphere (SE sha256, prc id patches),\n" - " Copyright (C) 2018, Atmosphere-NX\n\n" + " Copyright (c) 2018, Atmosphere-NX\n\n" " - elfload,\n" - " Copyright (C) 2014, Owen Shepherd\n" - " Copyright (C) 2018, M4xw\n" + " Copyright (c) 2014, Owen Shepherd\n" + " Copyright (c) 2018, M4xw\n" " ___________________________________________\n\n"; static const char octopus[] = " %k___\n" @@ -1033,7 +1030,7 @@ ment_t ment_options[] = { MDEF_CHGLINE(), MDEF_HANDLER("Auto boot", config_autoboot), MDEF_HANDLER("Boot time delay", config_bootdelay), - MDEF_HANDLER("Custom boot logo", config_customlogo), + MDEF_HANDLER("Auto NoGC", config_nogc), MDEF_HANDLER("Auto HOS power off", config_auto_hos_poweroff), MDEF_HANDLER("Backlight", config_backlight), MDEF_END() @@ -1112,8 +1109,8 @@ ment_t ment_tools[] = { MDEF_CAPTION("-------- Misc --------", 0xFF0AB9E6), MDEF_HANDLER("Dump package1/2", dump_packages12), MDEF_HANDLER("Fix battery de-sync", fix_battery_desync), - MDEF_HANDLER("Fix archive bit (except Nintendo folder)", fix_sd_all_attr), - MDEF_HANDLER("Fix archive bit (Nintendo folder)", fix_sd_nin_attr), + MDEF_HANDLER("Fix archive bit (except Nintendo)", fix_sd_all_attr), + MDEF_HANDLER("Fix archive bit (Nintendo only)", fix_sd_nin_attr), //MDEF_HANDLER("Fix fuel gauge configuration", fix_fuel_gauge_configuration), //MDEF_HANDLER("Reset all battery cfg", reset_pmic_fuel_gauge_charger_config), //MDEF_HANDLER("Minerva", minerva), // Uncomment for testing Minerva Training Cell