mirror of
https://github.com/CTCaer/hekate.git
synced 2024-12-22 16:12:03 +00:00
Add error printing for issues with libraries
It will now show erros for the following: - Missing or old libsys_minerva.bso (DRAM training). - Missing libsys_lp0.bso (LP0 sleep mode). - Missing or old Nyx version
This commit is contained in:
parent
24d30a40f9
commit
c6e92311f9
11 changed files with 115 additions and 50 deletions
9
Makefile
9
Makefile
|
@ -8,11 +8,7 @@ include $(DEVKITARM)/base_rules
|
|||
|
||||
IPL_LOAD_ADDR := 0x40008000
|
||||
IPL_MAGIC := 0x43544349 #"ICTC"
|
||||
BLVERSION_MAJOR := 5
|
||||
BLVERSION_MINOR := 1
|
||||
BLVERSION_HOTFX := 0
|
||||
|
||||
BL_RESERVED := 0
|
||||
include ./Versions.inc
|
||||
|
||||
################################################################################
|
||||
|
||||
|
@ -60,7 +56,8 @@ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
|
|||
################################################################################
|
||||
|
||||
CUSTOMDEFINES := -DIPL_LOAD_ADDR=$(IPL_LOAD_ADDR) -DBL_MAGIC=$(IPL_MAGIC)
|
||||
CUSTOMDEFINES += -DBL_VER_MJ=$(BLVERSION_MAJOR) -DBL_VER_MN=$(BLVERSION_MINOR) -DBL_VER_HF=$(BLVERSION_HOTFX) -DBL_RESERVED=$(BL_RESERVED)
|
||||
CUSTOMDEFINES += -DBL_VER_MJ=$(BLVERSION_MAJOR) -DBL_VER_MN=$(BLVERSION_MINOR) -DBL_VER_HF=$(BLVERSION_HOTFX) -DBL_RESERVED=$(BLVERSION_RSVD)
|
||||
CUSTOMDEFINES += -DNYX_VER_MJ=$(NYXVERSION_MAJOR) -DNYX_VER_MN=$(NYXVERSION_MINOR) -DNYX_VER_HF=$(NYXVERSION_HOTFX) -DNYX_RESERVED=$(NYXVERSION_RSVD)
|
||||
#CUSTOMDEFINES += -DMENU_LOGO_ENABLE
|
||||
|
||||
# 0: UART_A, 1: UART_B.
|
||||
|
|
11
Versions.inc
Normal file
11
Versions.inc
Normal file
|
@ -0,0 +1,11 @@
|
|||
# IPL Version.
|
||||
BLVERSION_MAJOR := 5
|
||||
BLVERSION_MINOR := 1
|
||||
BLVERSION_HOTFX := 0
|
||||
BLVERSION_RSVD := 0
|
||||
|
||||
# Nyx Version.
|
||||
NYXVERSION_MAJOR := 0
|
||||
NYXVERSION_MINOR := 8
|
||||
NYXVERSION_HOTFX := 3
|
||||
NYXVERSION_RSVD := 0
|
|
@ -40,11 +40,6 @@ typedef struct _hekate_config
|
|||
u32 errors;
|
||||
} hekate_config;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ERR_LIBSYS_LP0 = (1 << 0),
|
||||
} hsysmodule_t;
|
||||
|
||||
void set_default_configuration();
|
||||
int create_config_entry();
|
||||
void config_autoboot();
|
||||
|
|
|
@ -157,13 +157,9 @@ void *tui_do_menu(menu_t *menu)
|
|||
gfx_con_setcol(0xFFCCCCCC, 1, 0xFF1B1B1B);
|
||||
gfx_putc('\n');
|
||||
|
||||
// Print erros, help and battery status.
|
||||
gfx_con_setpos(0, h_cfg.errors ? 1111 : 1127);
|
||||
gfx_printf("%k Warning: %k", 0xFF800000, 0xFF555555);
|
||||
if (h_cfg.errors & ERR_LIBSYS_LP0)
|
||||
gfx_printf("Sleep mode library is missing!\n");
|
||||
gfx_printf(" Nyx is missing!\n");
|
||||
|
||||
// Print errors, help and battery status.
|
||||
gfx_con_setpos(0, 1127);
|
||||
gfx_printf("%k Warning: %k Nyx is missing!", 0xFF800000, 0xFF555555);
|
||||
gfx_con_setpos(0, 1191);
|
||||
gfx_printf("%k VOL: Move up/down\n PWR: Select option%k", 0xFF555555, 0xFFCCCCCC);
|
||||
|
||||
|
|
|
@ -678,6 +678,8 @@ out:
|
|||
btn_wait();
|
||||
}
|
||||
|
||||
#define NYX_VER_OFF 0x9C
|
||||
|
||||
void nyx_load_run()
|
||||
{
|
||||
sd_mount();
|
||||
|
@ -688,6 +690,9 @@ void nyx_load_run()
|
|||
|
||||
sd_unmount();
|
||||
|
||||
u32 expected_nyx_ver = ((NYX_VER_MJ + '0') << 24) | ((NYX_VER_MN + '0') << 16) | ((NYX_VER_HF + '0') << 8);
|
||||
u32 nyx_ver = byte_swap_32(*(u32 *)(nyx + NYX_VER_OFF));
|
||||
|
||||
gfx_clear_grey(0x1B);
|
||||
u8 *BOOTLOGO = (void *)malloc(0x4000);
|
||||
blz_uncompress_srcdest(BOOTLOGO_BLZ, SZ_BOOTLOGO_BLZ, BOOTLOGO, SZ_BOOTLOGO);
|
||||
|
@ -695,16 +700,29 @@ void nyx_load_run()
|
|||
free(BOOTLOGO);
|
||||
display_backlight_brightness(h_cfg.backlight, 1000);
|
||||
|
||||
// Check if Nyx version is old.
|
||||
if (nyx_ver < expected_nyx_ver)
|
||||
{
|
||||
h_cfg.errors |= ERR_SYSOLD_NYX;
|
||||
|
||||
gfx_con_setpos(0, 0);
|
||||
WPRINTF("Old Nyx GUI found! There will be dragons!\n");
|
||||
WPRINTF("\nUpdate your bootloader folder!\n\n");
|
||||
WPRINTF("Press any key...");
|
||||
|
||||
msleep(2000);
|
||||
btn_wait();
|
||||
}
|
||||
|
||||
nyx_str->info.errors = h_cfg.errors;
|
||||
nyx_str->cfg = 0;
|
||||
if (b_cfg.extra_cfg & EXTRA_CFG_NYX_DUMP)
|
||||
{
|
||||
b_cfg.extra_cfg &= ~(EXTRA_CFG_NYX_DUMP);
|
||||
nyx_str->cfg |= NYX_CFG_DUMP;
|
||||
}
|
||||
if (nyx_str->mtc_cfg.mtc_table)
|
||||
nyx_str->cfg |= NYX_CFG_MINERVA;
|
||||
|
||||
nyx_str->version = ipl_ver.version - 0x303030;
|
||||
nyx_str->version = ipl_ver.version - 0x303030; // Convert ASCII to numbers.
|
||||
|
||||
//memcpy((u8 *)nyx_str->irama, (void *)IRAM_BASE, 0x8000);
|
||||
volatile reloc_meta_t *reloc = (reloc_meta_t *)(IPL_LOAD_ADDR + RELOC_META_OFF);
|
||||
|
@ -749,7 +767,7 @@ static ini_sec_t *get_ini_sec_from_id(ini_sec_t *ini_sec, char **bootlogoCustomE
|
|||
return cfg_sec;
|
||||
}
|
||||
|
||||
void auto_launch_firmware()
|
||||
static void _auto_launch_firmware()
|
||||
{
|
||||
if(b_cfg.extra_cfg & EXTRA_CFG_NYX_DUMP)
|
||||
{
|
||||
|
@ -1019,7 +1037,7 @@ skip_list:
|
|||
hos_launch(cfg_sec);
|
||||
|
||||
EPRINTF("\nFailed to launch HOS!");
|
||||
gfx_printf("\nPress any key and try again...\n");
|
||||
gfx_printf("\nPress any key...\n");
|
||||
msleep(500);
|
||||
btn_wait();
|
||||
}
|
||||
|
@ -1038,7 +1056,7 @@ out:
|
|||
sd_unmount();
|
||||
}
|
||||
|
||||
void patched_rcm_protection()
|
||||
static void _patched_rcm_protection()
|
||||
{
|
||||
sdmmc_storage_t storage;
|
||||
sdmmc_t sdmmc;
|
||||
|
@ -1080,7 +1098,28 @@ void patched_rcm_protection()
|
|||
sdmmc_storage_end(&storage);
|
||||
}
|
||||
|
||||
void about()
|
||||
static void _show_errors()
|
||||
{
|
||||
if (h_cfg.errors)
|
||||
{
|
||||
gfx_clear_grey(0x1B);
|
||||
gfx_con_setpos(0, 0);
|
||||
display_backlight_brightness(h_cfg.backlight, 1000);
|
||||
|
||||
if (h_cfg.errors & ERR_LIBSYS_LP0)
|
||||
WPRINTF("Missing LP0 (sleep mode) library!\n");
|
||||
if (h_cfg.errors & ERR_SYSOLD_MTC)
|
||||
WPRINTF("Missing or old Minerva library!\n");
|
||||
|
||||
WPRINTF("\nUpdate your bootloader folder!\n\n");
|
||||
WPRINTF("Press any key...");
|
||||
|
||||
msleep(2000);
|
||||
btn_wait();
|
||||
}
|
||||
}
|
||||
|
||||
static void _about()
|
||||
{
|
||||
static const char credits[] =
|
||||
"\nhekate (c) 2018 naehrwert, st4rk\n\n"
|
||||
|
@ -1228,7 +1267,7 @@ ment_t ment_top[] = {
|
|||
MDEF_HANDLER("Reboot (RCM)", reboot_rcm),
|
||||
MDEF_HANDLER("Power off", power_off),
|
||||
MDEF_CAPTION("---------------", 0xFF444444),
|
||||
MDEF_HANDLER("About", about),
|
||||
MDEF_HANDLER("About", _about),
|
||||
MDEF_END()
|
||||
};
|
||||
|
||||
|
@ -1262,7 +1301,8 @@ void ipl_main()
|
|||
h_cfg.errors |= ERR_LIBSYS_LP0;
|
||||
|
||||
// Train DRAM and switch to max frequency.
|
||||
minerva_init();
|
||||
if (minerva_init())
|
||||
h_cfg.errors |= ERR_SYSOLD_MTC;
|
||||
|
||||
display_init();
|
||||
|
||||
|
@ -1286,13 +1326,16 @@ void ipl_main()
|
|||
secmon_exo_check_panic();
|
||||
|
||||
// Check if RCM is patched and protect from a possible brick.
|
||||
patched_rcm_protection();
|
||||
_patched_rcm_protection();
|
||||
|
||||
// Load emuMMC configuration from SD.
|
||||
emummc_load_cfg();
|
||||
|
||||
// Show library errors.
|
||||
_show_errors();
|
||||
|
||||
// Load saved configuration and auto boot if enabled.
|
||||
auto_launch_firmware();
|
||||
_auto_launch_firmware();
|
||||
|
||||
minerva_change_freq(FREQ_800);
|
||||
|
||||
|
|
|
@ -21,8 +21,17 @@
|
|||
#include "types.h"
|
||||
#include "../mem/minerva.h"
|
||||
|
||||
#define NYX_CFG_DUMP (1 << 7)
|
||||
#define NYX_CFG_MINERVA (1 << 8)
|
||||
typedef enum
|
||||
{
|
||||
NYX_CFG_DUMP = (1 << 7),
|
||||
} nyx_cfg_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ERR_LIBSYS_LP0 = (1 << 0),
|
||||
ERR_SYSOLD_NYX = (1 << 1),
|
||||
ERR_SYSOLD_MTC = (1 << 2),
|
||||
} hekate_errors_t;
|
||||
|
||||
#define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \
|
||||
((num >> 8 )& 0xff00) | ((num << 24) & 0xff000000))
|
||||
|
@ -33,13 +42,20 @@ typedef struct _cfg_op_t
|
|||
u32 val;
|
||||
} cfg_op_t;
|
||||
|
||||
typedef struct _nyx_info_t
|
||||
{
|
||||
u32 rsvd;
|
||||
u32 errors;
|
||||
} nyx_info_t;
|
||||
|
||||
typedef struct _nyx_storage_t
|
||||
{
|
||||
u32 version;
|
||||
u32 cfg;
|
||||
u8 irama[0x8000];
|
||||
u8 hekate[0x30000];
|
||||
u8 rsvd[0x800000];
|
||||
u8 rsvd[0x800000 - sizeof(nyx_info_t)];
|
||||
nyx_info_t info;
|
||||
mtc_config_t mtc_cfg;
|
||||
emc_table_t mtc_table;
|
||||
} nyx_storage_t;
|
||||
|
|
10
nyx/Makefile
10
nyx/Makefile
|
@ -8,11 +8,7 @@ include $(DEVKITARM)/base_rules
|
|||
|
||||
NYX_LOAD_ADDR := 0x81000000
|
||||
NYX_MAGIC := 0x43544347 #"GCTC"
|
||||
BLVERSION_MAJOR := 0
|
||||
BLVERSION_MINOR := 8
|
||||
BLVERSION_HOTFX := 3
|
||||
|
||||
BL_RESERVED := 0
|
||||
include ./../Versions.inc
|
||||
|
||||
################################################################################
|
||||
|
||||
|
@ -72,8 +68,8 @@ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
|
|||
|
||||
################################################################################
|
||||
|
||||
CUSTOMDEFINES += -DNYX_LOAD_ADDR=$(NYX_LOAD_ADDR) -DBL_MAGIC=$(NYX_MAGIC)
|
||||
CUSTOMDEFINES += -DBL_VER_MJ=$(BLVERSION_MAJOR) -DBL_VER_MN=$(BLVERSION_MINOR) -DBL_VER_HF=$(BLVERSION_HOTFX) -DBL_RESERVED=$(BL_RESERVED)
|
||||
CUSTOMDEFINES += -DNYX_LOAD_ADDR=$(NYX_LOAD_ADDR) -DNYX_MAGIC=$(NYX_MAGIC)
|
||||
CUSTOMDEFINES += -DNYX_VER_MJ=$(NYXVERSION_MAJOR) -DNYX_VER_MN=$(NYXVERSION_MINOR) -DNYX_VER_HF=$(NYXVERSION_HOTFX) -DNYX_RESERVED=$(NYXVERSION_RSVD)
|
||||
|
||||
# 0: UART_A, 1: UART_B.
|
||||
#CUSTOMDEFINES += -DDEBUG_UART_PORT=1
|
||||
|
|
|
@ -40,11 +40,6 @@ typedef struct _hekate_config
|
|||
u32 errors;
|
||||
} hekate_config;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ERR_LIBSYS_LP0 = (1 << 0),
|
||||
} hsysmodule_t;
|
||||
|
||||
void set_default_configuration();
|
||||
int create_config_entry();
|
||||
|
||||
|
|
|
@ -757,7 +757,7 @@ static void _create_tab_about(lv_theme_t * th, lv_obj_t * parent)
|
|||
lv_obj_align(ctcaer_img, lbl_octopus, LV_ALIGN_OUT_BOTTOM_RIGHT, 0, LV_DPI * 2 / 3);
|
||||
|
||||
char version[32];
|
||||
s_printf(version, "Nyx v%d.%d.%d", BL_VER_MJ, BL_VER_MN, BL_VER_HF);
|
||||
s_printf(version, "Nyx v%d.%d.%d", NYX_VER_MJ, NYX_VER_MN, NYX_VER_HF);
|
||||
lv_obj_t * lbl_ver = lv_label_create(parent, NULL);
|
||||
lv_obj_align(lbl_ver, ctcaer_img, LV_ALIGN_OUT_BOTTOM_RIGHT, -LV_DPI / 20, LV_DPI / 4);
|
||||
lv_ta_set_style(lbl_ver, LV_TA_STYLE_BG, &monospace_text);
|
||||
|
|
|
@ -63,8 +63,8 @@ u8 *Kc_MENU_LOGO;
|
|||
hekate_config h_cfg;
|
||||
|
||||
const volatile ipl_ver_meta_t __attribute__((section ("._ipl_version"))) ipl_ver = {
|
||||
.magic = BL_MAGIC,
|
||||
.version = (BL_VER_MJ + '0') | ((BL_VER_MN + '0') << 8) | ((BL_VER_HF + '0') << 16),
|
||||
.magic = NYX_MAGIC,
|
||||
.version = (NYX_VER_MJ + '0') | ((NYX_VER_MN + '0') << 8) | ((NYX_VER_HF + '0') << 16),
|
||||
.rsvd0 = 0,
|
||||
.rsvd1 = 0
|
||||
};
|
||||
|
|
|
@ -21,8 +21,17 @@
|
|||
#include "types.h"
|
||||
#include "../mem/minerva.h"
|
||||
|
||||
#define NYX_CFG_DUMP (1 << 7)
|
||||
#define NYX_CFG_MINERVA (1 << 8)
|
||||
typedef enum
|
||||
{
|
||||
NYX_CFG_DUMP = (1 << 7),
|
||||
} nyx_cfg_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ERR_LIBSYS_LP0 = (1 << 0),
|
||||
ERR_SYSOLD_NYX = (1 << 1),
|
||||
ERR_SYSOLD_MTC = (1 << 2),
|
||||
} hekate_errors_t;
|
||||
|
||||
#define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \
|
||||
((num >> 8 )& 0xff00) | ((num << 24) & 0xff000000))
|
||||
|
@ -33,13 +42,20 @@ typedef struct _cfg_op_t
|
|||
u32 val;
|
||||
} cfg_op_t;
|
||||
|
||||
typedef struct _nyx_info_t
|
||||
{
|
||||
u32 rsvd;
|
||||
u32 errors;
|
||||
} nyx_info_t;
|
||||
|
||||
typedef struct _nyx_storage_t
|
||||
{
|
||||
u32 version;
|
||||
u32 cfg;
|
||||
u8 irama[0x8000];
|
||||
u8 hekate[0x30000];
|
||||
u8 rsvd[0x800000];
|
||||
u8 rsvd[0x800000 - sizeof(nyx_info_t)];
|
||||
nyx_info_t info;
|
||||
mtc_config_t mtc_cfg;
|
||||
emc_table_t mtc_table;
|
||||
} nyx_storage_t;
|
||||
|
|
Loading…
Reference in a new issue