From eea5463a5cd1a337129d037c983850b056d4a83c Mon Sep 17 00:00:00 2001 From: CTCaer Date: Sat, 6 Feb 2021 03:55:01 +0200 Subject: [PATCH] nyx: Refactor nyx extra cfg --- bdk/utils/types.h | 14 ++++++++++---- bdk/utils/util.h | 7 ++++--- bootloader/main.c | 14 +++++--------- nyx/nyx_gui/frontend/gui.c | 26 +++++++++++++++----------- nyx/nyx_gui/frontend/gui_info.c | 7 ++++--- nyx/nyx_gui/frontend/gui_tools.c | 7 ++++--- 6 files changed, 42 insertions(+), 33 deletions(-) diff --git a/bdk/utils/types.h b/bdk/utils/types.h index 96615ab..5631068 100644 --- a/bdk/utils/types.h +++ b/bdk/utils/types.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2018 naehrwert -* Copyright (c) 2018-2020 CTCaer +* Copyright (c) 2018-2021 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, @@ -75,10 +75,9 @@ typedef int bool; #define EXTRA_CFG_PAYLOAD BIT(1) #define EXTRA_CFG_MODULE BIT(2) -#define EXTRA_CFG_NYX_BIS BIT(4) #define EXTRA_CFG_NYX_UMS BIT(5) #define EXTRA_CFG_NYX_RELOAD BIT(6) -#define EXTRA_CFG_NYX_DUMP BIT(7) +#define EXTRA_CFG_NYX_SEPT BIT(7) typedef enum _nyx_ums_type { @@ -91,6 +90,12 @@ typedef enum _nyx_ums_type NYX_UMS_EMUMMC_GPP } nyx_ums_type; +typedef enum _nyx_sept_type +{ + NYX_SEPT_DUMP = 0, + NYX_SEPT_CAL0 +} nyx_sept_type; + typedef struct __attribute__((__packed__)) _boot_cfg_t { u8 boot_cfg; @@ -104,7 +109,8 @@ typedef struct __attribute__((__packed__)) _boot_cfg_t char id[8]; // 7 char ASCII null teminated. char emummc_path[0x78]; // emuMMC/XXX, ASCII null teminated. }; - u8 ums; // nyx_ums_type. + u8 ums; // nyx_ums_type. + u8 sept; // nyx_sept_type. u8 xt_str[0x80]; }; } boot_cfg_t; diff --git a/bdk/utils/util.h b/bdk/utils/util.h index 9a6d00a..924ee2a 100644 --- a/bdk/utils/util.h +++ b/bdk/utils/util.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2018 naehrwert - * Copyright (c) 2018-2020 CTCaer + * Copyright (c) 2018-2021 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, @@ -35,9 +35,10 @@ typedef enum typedef enum { - NYX_CFG_BIS = BIT(5), NYX_CFG_UMS = BIT(6), - NYX_CFG_DUMP = BIT(7), + NYX_CFG_SEPT = BIT(7), + + NYX_CFG_EXTRA = 0xFF << 24 } nyx_cfg_t; typedef enum diff --git a/bootloader/main.c b/bootloader/main.c index cdc0e75..ca622ee 100644 --- a/bootloader/main.c +++ b/bootloader/main.c @@ -714,15 +714,11 @@ void nyx_load_run() nyx_str->cfg = 0; if (b_cfg.extra_cfg) { - if (b_cfg.extra_cfg & EXTRA_CFG_NYX_DUMP) + if (b_cfg.extra_cfg & EXTRA_CFG_NYX_SEPT) { - b_cfg.extra_cfg &= ~(EXTRA_CFG_NYX_DUMP); - nyx_str->cfg |= NYX_CFG_DUMP; - } - if (b_cfg.extra_cfg & EXTRA_CFG_NYX_BIS) - { - b_cfg.extra_cfg &= ~(EXTRA_CFG_NYX_BIS); - nyx_str->cfg |= NYX_CFG_BIS; + b_cfg.extra_cfg &= ~(EXTRA_CFG_NYX_SEPT); + nyx_str->cfg |= NYX_CFG_SEPT; + nyx_str->cfg |= b_cfg.sept << 24; } if (b_cfg.extra_cfg & EXTRA_CFG_NYX_UMS) { @@ -802,7 +798,7 @@ static void _bootloader_corruption_protect() static void _auto_launch_firmware() { - if(b_cfg.extra_cfg & (EXTRA_CFG_NYX_DUMP | EXTRA_CFG_NYX_BIS)) + if(b_cfg.extra_cfg & EXTRA_CFG_NYX_SEPT) { if (!h_cfg.sept_run) EMC(EMC_SCRATCH0) |= EMC_HEKA_UPD; diff --git a/nyx/nyx_gui/frontend/gui.c b/nyx/nyx_gui/frontend/gui.c index 8fa13da..1f7af91 100644 --- a/nyx/nyx_gui/frontend/gui.c +++ b/nyx/nyx_gui/frontend/gui.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020 CTCaer + * Copyright (c) 2018-2021 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, @@ -2206,17 +2206,21 @@ static void _nyx_main_menu(lv_theme_t * th) lv_tabview_set_tab_load_action(tv, _show_hide_save_button); // If we rebooted to run sept for dumping, lunch dump immediately. - if (nyx_str->cfg & NYX_CFG_DUMP) + if (nyx_str->cfg & NYX_CFG_SEPT) { - nyx_str->cfg &= ~(NYX_CFG_DUMP); - lv_task_t *task_run_dump = lv_task_create(sept_run_dump, LV_TASK_ONESHOT, LV_TASK_PRIO_MID, NULL); - lv_task_once(task_run_dump); - } - else if (nyx_str->cfg & NYX_CFG_BIS) - { - nyx_str->cfg &= ~(NYX_CFG_BIS); - lv_task_t *task_run_cal0 = lv_task_create(sept_run_cal0, LV_TASK_ONESHOT, LV_TASK_PRIO_LOWEST, NULL); - lv_task_once(task_run_cal0); + u32 type = nyx_str->cfg >> 24; + nyx_str->cfg &= ~(NYX_CFG_SEPT | NYX_CFG_EXTRA); + + if (type == NYX_SEPT_DUMP) + { + lv_task_t *task_run_dump = lv_task_create(sept_run_dump, LV_TASK_ONESHOT, LV_TASK_PRIO_MID, NULL); + lv_task_once(task_run_dump); + } + else if (type == NYX_SEPT_CAL0) + { + lv_task_t *task_run_cal0 = lv_task_create(sept_run_cal0, LV_TASK_ONESHOT, LV_TASK_PRIO_LOWEST, NULL); + lv_task_once(task_run_cal0); + } } else if (nyx_str->cfg & NYX_CFG_UMS) { diff --git a/nyx/nyx_gui/frontend/gui_info.c b/nyx/nyx_gui/frontend/gui_info.c index e6cec15..2979eff 100644 --- a/nyx/nyx_gui/frontend/gui_info.c +++ b/nyx/nyx_gui/frontend/gui_info.c @@ -384,7 +384,8 @@ try_load: // Set boot cfg. b_cfg->autoboot = 0; b_cfg->autoboot_list = 0; - b_cfg->extra_cfg = EXTRA_CFG_NYX_BIS; + b_cfg->extra_cfg = EXTRA_CFG_NYX_SEPT; + b_cfg->sept = NYX_SEPT_CAL0; if (!reboot_to_sept((u8 *)tsec_ctxt.fw, kb)) { @@ -415,7 +416,7 @@ t210b01:; nx_emmc_bis_init(cal0_part); nx_emmc_bis_read(0, 0x40, cal0_buf); - // Clear BIS keys slots. + // Clear BIS keys slots and reinstate SBK. hos_bis_keys_clear(); nx_emmc_cal0_t *cal0 = (nx_emmc_cal0_t *)cal0_buf; @@ -1109,7 +1110,7 @@ try_load: if (!pkg1_id) { - strcat(txt_buf, "#FFDD00 Unknown pkg1 version for reading#\n#FFDD00 TSEC firmware!#\n"); + strcat(txt_buf, "#FFDD00 Unknown pkg1 version!#\n"); // Try backup bootloader. if (bootloader_offset != BOOTLOADER_BACKUP_OFFSET) { diff --git a/nyx/nyx_gui/frontend/gui_tools.c b/nyx/nyx_gui/frontend/gui_tools.c index 746714b..7e5c306 100644 --- a/nyx/nyx_gui/frontend/gui_tools.c +++ b/nyx/nyx_gui/frontend/gui_tools.c @@ -607,7 +607,7 @@ void nyx_run_ums(void *param) u32 *cfg = (u32 *)param; u8 type = (*cfg) >> 24; - *cfg = *cfg & 0xFFFFFF; + *cfg = *cfg & (~NYX_CFG_EXTRA); // Disable read only flag. usb_msc_emmc_read_only = false; @@ -1123,7 +1123,7 @@ static lv_res_t _create_window_dump_pk12_tool(lv_obj_t *btn) // Dump package1 in its encrypted state if unknown. if (!pkg1_id) { - strcat(txt_buf, "#FFDD00 Unknown pkg1 version for reading#\n#FFDD00 TSEC firmware!#"); + strcat(txt_buf, "#FFDD00 Unknown pkg1 version!#"); lv_label_set_text(lb_desc, txt_buf); manual_system_maintenance(true); @@ -1175,7 +1175,8 @@ static lv_res_t _create_window_dump_pk12_tool(lv_obj_t *btn) // Set boot cfg. b_cfg->autoboot = 0; b_cfg->autoboot_list = 0; - b_cfg->extra_cfg = EXTRA_CFG_NYX_DUMP; + b_cfg->extra_cfg = EXTRA_CFG_NYX_SEPT; + b_cfg->sept = NYX_SEPT_DUMP; if (!reboot_to_sept((u8 *)tsec_ctxt.fw, kb)) {