Various fixes and whitespace removal

This commit is contained in:
CTCaer 2020-04-30 03:25:22 +03:00
parent e14a7d1d4d
commit 8c762c52e2
28 changed files with 221 additions and 97 deletions

View file

@ -20,7 +20,7 @@ VPATH = $(dir ./$(SOURCEDIR)/) $(dir $(wildcard ./$(SOURCEDIR)/*/)) $(dir $(wild
# Main and graphics. # Main and graphics.
OBJS = $(addprefix $(BUILDDIR)/$(TARGET)/, \ OBJS = $(addprefix $(BUILDDIR)/$(TARGET)/, \
start.o \ start.o exception_handlers.o \
main.o heap.o \ main.o heap.o \
gfx.o tui.o \ gfx.o tui.o \
fe_emmc_tools.o fe_info.o fe_tools.o \ fe_emmc_tools.o fe_info.o fe_tools.o \
@ -28,9 +28,10 @@ OBJS = $(addprefix $(BUILDDIR)/$(TARGET)/, \
# Hardware. # Hardware.
OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
bpmp.o clock.o cluster.o di.o gpio.o i2c.o mc.o sdram.o pinmux.o se.o smmu.o tsec.o uart.o \ bpmp.o clock.o cluster.o di.o gpio.o i2c.o irq.o mc.o sdram.o \
pinmux.o se.o smmu.o timer.o tsec.o uart.o \
fuse.o kfuse.o minerva.o \ fuse.o kfuse.o minerva.o \
sdmmc.o sdmmc_driver.o emummc.o nx_emmc.o \ sdmmc.o sdmmc_driver.o emummc.o nx_emmc.o nx_sd.o \
bq24193.o max17050.o max7762x.o max77620-rtc.o \ bq24193.o max17050.o max7762x.o max77620-rtc.o \
hw_init.o \ hw_init.o \
) )

View file

@ -116,7 +116,7 @@ _reset:
LDR R1, =0x30505645 /* EVP0 */ LDR R1, =0x30505645 /* EVP0 */
STR R1, [R0] /* EVP0 in EXCP_EN_ADDR */ STR R1, [R0] /* EVP0 in EXCP_EN_ADDR */
LDR R0, =EXCP_LR_ADDR LDR R0, =EXCP_LR_ADDR
MOV R1, LR MOV R1, LR
STR R1, [R0] /* Save LR in EXCP_LR_ADDR */ STR R1, [R0] /* Save LR in EXCP_LR_ADDR */
LDR R0, =__bss_start LDR R0, =__bss_start
EOR R1, R1, R1 EOR R1, R1, R1

View file

@ -153,21 +153,6 @@ void print_mmc_info()
gfx_printf("%kCID:%k\n", 0xFF00DDFF, 0xFFCCCCCC); gfx_printf("%kCID:%k\n", 0xFF00DDFF, 0xFFCCCCCC);
switch (storage.csd.mmca_vsn) switch (storage.csd.mmca_vsn)
{ {
case 0: /* MMC v1.0 - v1.2 */
case 1: /* MMC v1.4 */
gfx_printf(
" Vendor ID: %03X\n"
" Model: %c%c%c%c%c%c%c\n"
" HW rev: %X\n"
" FW rev: %X\n"
" S/N: %03X\n"
" Month/Year: %02d/%04d\n\n",
storage.cid.manfid,
storage.cid.prod_name[0], storage.cid.prod_name[1], storage.cid.prod_name[2],
storage.cid.prod_name[3], storage.cid.prod_name[4], storage.cid.prod_name[5],
storage.cid.prod_name[6], storage.cid.hwrev, storage.cid.fwrev,
storage.cid.serial, storage.cid.month, storage.cid.year);
break;
case 2: /* MMC v2.0 - v2.2 */ case 2: /* MMC v2.0 - v2.2 */
case 3: /* MMC v3.1 - v3.3 */ case 3: /* MMC v3.1 - v3.3 */
case 4: /* MMC v4 */ case 4: /* MMC v4 */
@ -185,7 +170,6 @@ void print_mmc_info()
storage.cid.prv, storage.cid.serial, storage.cid.month, storage.cid.year); storage.cid.prv, storage.cid.serial, storage.cid.month, storage.cid.year);
break; break;
default: default:
EPRINTFARGS("eMMC has unknown MMCA version %d", storage.csd.mmca_vsn);
break; break;
} }
@ -351,7 +335,7 @@ void print_tsec_key()
const pkg1_id_t *pkg1_id = pkg1_identify(pkg1); const pkg1_id_t *pkg1_id = pkg1_identify(pkg1);
if (!pkg1_id) if (!pkg1_id)
{ {
EPRINTF("Unknown pkg1 version for reading\nTSEC firmware."); EPRINTF("Unknown pkg1 version.");
goto out_wait; goto out_wait;
} }
@ -443,7 +427,7 @@ void print_fuel_gauge_info()
{ {
int value = 0; int value = 0;
gfx_printf("%kFuel Gauge IC Info:\n%k", 0xFF00DDFF, 0xFFCCCCCC); gfx_printf("%kFuel Gauge Info:\n%k", 0xFF00DDFF, 0xFFCCCCCC);
max17050_get_property(MAX17050_RepSOC, &value); max17050_get_property(MAX17050_RepSOC, &value);
gfx_printf("Capacity now: %3d%\n", value >> 8); gfx_printf("Capacity now: %3d%\n", value >> 8);
@ -495,7 +479,7 @@ void print_battery_charger_info()
{ {
int value = 0; int value = 0;
gfx_printf("%k\n\nBattery Charger IC Info:\n%k", 0xFF00DDFF, 0xFFCCCCCC); gfx_printf("%k\n\nBattery Charger Info:\n%k", 0xFF00DDFF, 0xFFCCCCCC);
bq24193_get_property(BQ24193_InputVoltageLimit, &value); bq24193_get_property(BQ24193_InputVoltageLimit, &value);
gfx_printf("Input voltage limit: %4d mV\n", value); gfx_printf("Input voltage limit: %4d mV\n", value);

View file

@ -522,7 +522,7 @@ int hos_launch(ini_sec_t *cfg)
((fuse_read_odm(7) & 0x400) && (ctxt.pkg1_id->kb <= KB_FIRMWARE_VERSION_810)))) ((fuse_read_odm(7) & 0x400) && (ctxt.pkg1_id->kb <= KB_FIRMWARE_VERSION_810))))
config_kip1patch(&ctxt, "nogc"); config_kip1patch(&ctxt, "nogc");
gfx_printf("Loaded pkg1 & keyblob\n"); gfx_printf("Loaded config, pkg1 and keyblob\n");
// Generate keys. // Generate keys.
if (!h_cfg.se_keygen_done) if (!h_cfg.se_keygen_done)
@ -590,7 +590,7 @@ int hos_launch(ini_sec_t *cfg)
{ {
// Else we patch it to allow for an unsigned package2 and patched kernel. // Else we patch it to allow for an unsigned package2 and patched kernel.
patch_t *secmon_patchset = ctxt.pkg1_id->secmon_patchset; patch_t *secmon_patchset = ctxt.pkg1_id->secmon_patchset;
gfx_printf("%kPatching Security Monitor%k\n", 0xFFFFBA00, 0xFFCCCCCC); gfx_printf("%kPatching Secure Monitor%k\n", 0xFFFFBA00, 0xFFCCCCCC);
for (u32 i = 0; secmon_patchset[i].off != 0xFFFFFFFF; i++) for (u32 i = 0; secmon_patchset[i].off != 0xFFFFFFFF; i++)
*(vu32 *)(ctxt.pkg1_id->secmon_base + secmon_patchset[i].off) = secmon_patchset[i].val; *(vu32 *)(ctxt.pkg1_id->secmon_base + secmon_patchset[i].off) = secmon_patchset[i].val;
} }
@ -680,7 +680,7 @@ int hos_launch(ini_sec_t *cfg)
// Check if FS is compatible with exFAT. // Check if FS is compatible with exFAT.
if (!ctxt.stock && sd_fs.fs_type == FS_EXFAT && !_get_fs_exfat_compatible(&kip1_info)) if (!ctxt.stock && sd_fs.fs_type == FS_EXFAT && !_get_fs_exfat_compatible(&kip1_info))
{ {
_hos_crit_error("Your SD Card is exFAT and the installed\nFS only supports FAT32!"); _hos_crit_error("SD Card is exFAT and the installed\nFS only supports FAT32!");
_free_launch_components(&ctxt); _free_launch_components(&ctxt);
return 0; return 0;
@ -782,9 +782,6 @@ int hos_launch(ini_sec_t *cfg)
secmon_mb->in = bootStateDramPkg2; secmon_mb->in = bootStateDramPkg2;
secmon_mb->out = 0; secmon_mb->out = 0;
// Free allocated memory.
_free_launch_components(&ctxt);
// Disable display. This must be executed before secmon to provide support for all fw versions. // Disable display. This must be executed before secmon to provide support for all fw versions.
display_end(); display_end();

View file

@ -642,6 +642,12 @@ static kip1_id_t _kip_ids[] =
static kip1_id_t *_kip_id_sets = _kip_ids; static kip1_id_t *_kip_id_sets = _kip_ids;
static u32 _kip_id_sets_cnt = sizeof(_kip_ids) / sizeof(_kip_ids[0]); static u32 _kip_id_sets_cnt = sizeof(_kip_ids) / sizeof(_kip_ids[0]);
void pkg2_get_ids(kip1_id_t **ids, u32 *entries)
{
*ids = _kip_id_sets;
*entries = _kip_id_sets_cnt;
}
static void parse_external_kip_patches() static void parse_external_kip_patches()
{ {
static bool ext_patches_done = false; static bool ext_patches_done = false;

View file

@ -149,6 +149,7 @@ int pkg2_has_kip(link_t *info, u64 tid);
void pkg2_replace_kip(link_t *info, u64 tid, pkg2_kip1_t *kip1); void pkg2_replace_kip(link_t *info, u64 tid, pkg2_kip1_t *kip1);
void pkg2_add_kip(link_t *info, pkg2_kip1_t *kip1); void pkg2_add_kip(link_t *info, pkg2_kip1_t *kip1);
void pkg2_merge_kip(link_t *info, pkg2_kip1_t *kip1); void pkg2_merge_kip(link_t *info, pkg2_kip1_t *kip1);
void pkg2_get_ids(kip1_id_t **ids, u32 *entries);
const char* pkg2_patch_kips(link_t *info, char* patchNames); const char* pkg2_patch_kips(link_t *info, char* patchNames);
const pkg2_kernel_id_t *pkg2_identify(u8 *hash); const pkg2_kernel_id_t *pkg2_identify(u8 *hash);

View file

@ -180,9 +180,7 @@ void config_exosphere(launch_ctxt_t *ctxt)
// Set mailbox values. // Set mailbox values.
exo_cfg->magic = EXO_MAGIC_VAL; exo_cfg->magic = EXO_MAGIC_VAL;
exo_cfg->fwno = exoFwNo; exo_cfg->fwno = exoFwNo;
exo_cfg->flags = exoFlags; exo_cfg->flags = exoFlags;
// If warmboot is lp0fw, add in RSA modulus. // If warmboot is lp0fw, add in RSA modulus.

View file

@ -5694,7 +5694,7 @@ FRESULT f_mkfs (
} else { } else {
/* Create a single-partition in this function */ /* Create a single-partition in this function */
if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
b_vol = (opt & FM_SFD) ? 0 : 63; /* Volume start sector */ b_vol = (opt & FM_SFD) ? 0 : 32768; /* Volume start sector. Align to 16MB */
if (sz_vol < b_vol) LEAVE_MKFS(FR_MKFS_ABORTED); if (sz_vol < b_vol) LEAVE_MKFS(FR_MKFS_ABORTED);
sz_vol -= b_vol; /* Volume size */ sz_vol -= b_vol; /* Volume size */
} }
@ -5981,13 +5981,13 @@ FRESULT f_mkfs (
st_word(buf + BPB_BkBootSec32, 6); /* Offset of backup VBR (VBR + 6) */ st_word(buf + BPB_BkBootSec32, 6); /* Offset of backup VBR (VBR + 6) */
buf[BS_DrvNum32] = 0x80; /* Drive number (for int13) */ buf[BS_DrvNum32] = 0x80; /* Drive number (for int13) */
buf[BS_BootSig32] = 0x29; /* Extended boot signature */ buf[BS_BootSig32] = 0x29; /* Extended boot signature */
mem_cpy(buf + BS_VolLab32, "NO NAME " "FAT32 ", 19); /* Volume label, FAT signature */ mem_cpy(buf + BS_VolLab32, "SWITCH SD " "FAT32 ", 19); /* Volume label, FAT signature */
} else { } else {
st_dword(buf + BS_VolID, GET_FATTIME()); /* VSN */ st_dword(buf + BS_VolID, GET_FATTIME()); /* VSN */
st_word(buf + BPB_FATSz16, (WORD)sz_fat); /* FAT size [sector] */ st_word(buf + BPB_FATSz16, (WORD)sz_fat); /* FAT size [sector] */
buf[BS_DrvNum] = 0x80; /* Drive number (for int13) */ buf[BS_DrvNum] = 0x80; /* Drive number (for int13) */
buf[BS_BootSig] = 0x29; /* Extended boot signature */ buf[BS_BootSig] = 0x29; /* Extended boot signature */
mem_cpy(buf + BS_VolLab, "NO NAME " "FAT ", 19); /* Volume label, FAT signature */ mem_cpy(buf + BS_VolLab, "SWITCH SD " "FAT ", 19); /* Volume label, FAT signature */
} }
st_word(buf + BS_55AA, 0xAA55); /* Signature (offset is fixed here regardless of sector size) */ st_word(buf + BS_55AA, 0xAA55); /* Signature (offset is fixed here regardless of sector size) */
if (disk_write(pdrv, buf, b_vol, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it to the VBR sector */ if (disk_write(pdrv, buf, b_vol, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it to the VBR sector */

View file

@ -368,8 +368,11 @@ int ff_del_syncobj (FF_SYNC_t sobj); /* Delete a sync object */
#define AM_RDO 0x01 /* Read only */ #define AM_RDO 0x01 /* Read only */
#define AM_HID 0x02 /* Hidden */ #define AM_HID 0x02 /* Hidden */
#define AM_SYS 0x04 /* System */ #define AM_SYS 0x04 /* System */
#define AM_VOL 0x08 /* Volume */
#define AM_DIR 0x10 /* Directory */ #define AM_DIR 0x10 /* Directory */
#define AM_ARC 0x20 /* Archive */ #define AM_ARC 0x20 /* Archive */
#define AM_DEV 0x40 /* Device */
#define AM_RVD 0x80 /* Reserved */
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -1121,18 +1121,18 @@ static void _show_errors()
display_backlight_brightness(150, 1000); display_backlight_brightness(150, 1000);
if (h_cfg.errors & ERR_LIBSYS_LP0) if (h_cfg.errors & ERR_LIBSYS_LP0)
WPRINTF("Missing LP0 (sleep mode) library!\n"); WPRINTF("Missing LP0 (sleep mode) lib!\n");
if (h_cfg.errors & ERR_SYSOLD_MTC) if (h_cfg.errors & ERR_SYSOLD_MTC)
WPRINTF("Missing or old Minerva library!\n"); WPRINTF("Missing or old Minerva lib!\n");
if (h_cfg.errors & ~ERR_EXCEPT_ENB) if (h_cfg.errors & ~ERR_EXCEPT_ENB)
{ {
WPRINTF("\nUpdate your bootloader folder!\n\n"); WPRINTF("\nUpdate bootloader folder!\n\n");
} }
if (h_cfg.errors & ERR_EXCEPT_ENB) if (h_cfg.errors & ERR_EXCEPT_ENB)
{ {
WPRINTFARGS("An exception happened (LR %08X):\n", *excp_lr); WPRINTFARGS("An exception occurred (LR %08X):\n", *excp_lr);
switch (*excp_type) switch (*excp_type)
{ {
case EXCP_TYPE_RESET: case EXCP_TYPE_RESET:
@ -1340,17 +1340,17 @@ ment_t ment_cinfo[] = {
MDEF_BACK(), MDEF_BACK(),
MDEF_CHGLINE(), MDEF_CHGLINE(),
MDEF_CAPTION("---- SoC Info ----", 0xFF0AB9E6), MDEF_CAPTION("---- SoC Info ----", 0xFF0AB9E6),
MDEF_HANDLER("Ipatches & bootrom info", bootrom_ipatches_info), MDEF_HANDLER("Ipatches & bootrom", bootrom_ipatches_info),
MDEF_HANDLER("Print fuse info", print_fuseinfo), MDEF_HANDLER("Fuses", print_fuseinfo),
//MDEF_HANDLER("Print kfuse info", print_kfuseinfo), //MDEF_HANDLER("KFuses", print_kfuseinfo),
MDEF_HANDLER("Print TSEC keys", print_tsec_key), MDEF_HANDLER("TSEC keys", print_tsec_key),
MDEF_CHGLINE(), MDEF_CHGLINE(),
MDEF_CAPTION("-- Storage Info --", 0xFF0AB9E6), MDEF_CAPTION("-- Storage Info --", 0xFF0AB9E6),
MDEF_HANDLER("Print eMMC info", print_mmc_info), MDEF_HANDLER("eMMC", print_mmc_info),
MDEF_HANDLER("Print SD Card info", print_sdcard_info), MDEF_HANDLER("SD Card", print_sdcard_info),
MDEF_CHGLINE(), MDEF_CHGLINE(),
MDEF_CAPTION("------ Misc ------", 0xFF0AB9E6), MDEF_CAPTION("------ Misc ------", 0xFF0AB9E6),
MDEF_HANDLER("Print battery info", print_battery_info), MDEF_HANDLER("Battery", print_battery_info),
MDEF_END() MDEF_END()
}; };

View file

@ -463,4 +463,54 @@
#define MC_ERR_APB_ASID_UPDATE_STATUS 0x9d0 #define MC_ERR_APB_ASID_UPDATE_STATUS 0x9d0
#define MC_DA_CONFIG0 0x9dc #define MC_DA_CONFIG0 0x9dc
// MC_SECURITY_CARVEOUTX_CFG0
// Mode of LOCK_MODE.
#define PROTECT_MODE_SHIFT 0
#define SEC_CARVEOUT_CFG_SECURE (0 << PROTECT_MODE_SHIFT0)
#define SEC_CARVEOUT_CFG_TZ_SECURE (1 << PROTECT_MODE_SHIFT0)
// Enables PROTECT_MODE.
#define LOCK_MODE_SHIFT 1
#define SEC_CARVEOUT_CFG_UNLOCKED (0 << LOCK_MODE_SHIFT)
#define SEC_CARVEOUT_CFG_LOCKED (1 << LOCK_MODE_SHIFT)
#define ADDRESS_TYPE_SHIFT 2
#define SEC_CARVEOUT_CFG_ANY_ADDRESS (0 << ADDRESS_TYPE_SHIFT)
#define SEC_CARVEOUT_CFG_UNTRANSLATED_ONLY (1 << ADDRESS_TYPE_SHIFT)
#define READ_ACCESS_LEVEL_SHIFT 3
#define SEC_CARVEOUT_CFG_RD_ALL (1 << READ_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_RD_UNK (2 << READ_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_RD_FALCON_LS (4 << READ_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_RD_FALCON_HS (8 << READ_ACCESS_LEVEL_SHIFT)
#define WRITE_ACCESS_LEVEL_SHIFT 7
#define SEC_CARVEOUT_CFG_WR_ALL (1 << WRITE_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_WR_UNK (2 << WRITE_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_WR_FALCON_LS (4 << WRITE_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_WR_FALCON_HS (8 << WRITE_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_APERTURE_ID_MASK (3 << 11)
#define DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT 14
#define SEC_CARVEOUT_CFG_DIS_RD_CHECK_L0 (1 << DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_RD_CHECK_L1 (2 << DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_RD_CHECK_L2 (4 << DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_RD_CHECK_L3 (8 << DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT)
#define DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT 18
#define SEC_CARVEOUT_CFG_DIS_WR_CHECK_L0 (1 << DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_WR_CHECK_L1 (2 << DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_WR_CHECK_L2 (4 << DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_WR_CHECK_L3 (8 << DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_SEND_CFG_TO_GPU (1 << 22)
#define SEC_CARVEOUT_CFG_TZ_GLOBAL_WR_EN_BYPASS_CHECK (1 << 23)
#define SEC_CARVEOUT_CFG_TZ_GLOBAL_RD_EN_BYPASS_CHECK (1 << 24)
#define SEC_CARVEOUT_CFG_ALLOW_APERTURE_ID_MISMATCH (1 << 25)
#define SEC_CARVEOUT_CFG_FORCE_APERTURE_ID_MATCH (1 << 26)
#define SEC_CARVEOUT_CFG_IS_WPR (1 << 27)
#endif #endif

View file

@ -275,7 +275,6 @@ int se_aes_xts_crypt(u32 ks1, u32 ks2, u32 enc, u64 sec, void *dst, void *src, u
return 1; return 1;
} }
// se_calc_sha256() was derived from Atmosphère's se_calculate_sha256.
int se_calc_sha256(void *dst, const void *src, u32 src_size) int se_calc_sha256(void *dst, const void *src, u32 src_size)
{ {
int res; int res;

View file

@ -25,13 +25,23 @@
#define APBDEV_PMC_PWRGATE_TOGGLE 0x30 #define APBDEV_PMC_PWRGATE_TOGGLE 0x30
#define APBDEV_PMC_PWRGATE_STATUS 0x38 #define APBDEV_PMC_PWRGATE_STATUS 0x38
#define APBDEV_PMC_NO_IOPOWER 0x44 #define APBDEV_PMC_NO_IOPOWER 0x44
#define PMC_NO_IOPOWER_GPIO_IO_EN (1 << 21)
#define PMC_NO_IOPOWER_AUDIO_HV (1 << 18)
#define PMC_NO_IOPOWER_SDMMC1_IO_EN (1 << 12) #define PMC_NO_IOPOWER_SDMMC1_IO_EN (1 << 12)
#define APBDEV_PMC_SCRATCH0 0x50 #define APBDEV_PMC_SCRATCH0 0x50
#define PMC_SCRATCH0_MODE_RECOVERY (1 << 31)
#define PMC_SCRATCH0_MODE_FASTBOOT (1 << 30)
#define PMC_SCRATCH0_MODE_PAYLOAD (1 << 29)
#define PMC_SCRATCH0_MODE_RCM (1 << 1)
#define PMC_SCRATCH0_MODE_WARMBOOT (1 << 0)
#define APBDEV_PMC_SCRATCH1 0x54 #define APBDEV_PMC_SCRATCH1 0x54
#define APBDEV_PMC_SCRATCH20 0xA0 #define APBDEV_PMC_SCRATCH20 0xA0
#define APBDEV_PMC_PWR_DET_VAL 0xE4 #define APBDEV_PMC_PWR_DET_VAL 0xE4
#define PMC_PWR_DET_GPIO_IO_EN (1 << 21)
#define PMC_PWR_DET_AUDIO_HV (1 << 18)
#define PMC_PWR_DET_SDMMC1_IO_EN (1 << 12) #define PMC_PWR_DET_SDMMC1_IO_EN (1 << 12)
#define APBDEV_PMC_DDR_PWR 0xE8 #define APBDEV_PMC_DDR_PWR 0xE8
#define APBDEV_PMC_USB_AO 0xF0
#define APBDEV_PMC_CRYPTO_OP 0xF4 #define APBDEV_PMC_CRYPTO_OP 0xF4
#define PMC_CRYPTO_OP_SE_ENABLE 0 #define PMC_CRYPTO_OP_SE_ENABLE 0
#define PMC_CRYPTO_OP_SE_DISABLE 1 #define PMC_CRYPTO_OP_SE_DISABLE 1
@ -39,6 +49,8 @@
#define APBDEV_PMC_SCRATCH40 0x13C #define APBDEV_PMC_SCRATCH40 0x13C
#define APBDEV_PMC_OSC_EDPD_OVER 0x1A4 #define APBDEV_PMC_OSC_EDPD_OVER 0x1A4
#define PMC_OSC_EDPD_OVER_OSC_CTRL_OVER 0x400000 #define PMC_OSC_EDPD_OVER_OSC_CTRL_OVER 0x400000
#define APBDEV_PMC_CLK_OUT_CNTRL 0x1A8
#define PMC_CLK_OUT_CNTRL_CLK1_FORCE_EN (1 << 2)
#define APBDEV_PMC_RST_STATUS 0x1B4 #define APBDEV_PMC_RST_STATUS 0x1B4
#define APBDEV_PMC_IO_DPD_REQ 0x1B8 #define APBDEV_PMC_IO_DPD_REQ 0x1B8
#define APBDEV_PMC_IO_DPD2_REQ 0x1C0 #define APBDEV_PMC_IO_DPD2_REQ 0x1C0

View file

@ -24,13 +24,12 @@
#include "../soc/i2c.h" #include "../soc/i2c.h"
#include "../soc/pmc.h" #include "../soc/pmc.h"
#include "../soc/t210.h" #include "../soc/t210.h"
#include "../storage/nx_sd.h"
#define USE_RTC_TIMER #define USE_RTC_TIMER
extern volatile nyx_storage_t *nyx_str; extern volatile nyx_storage_t *nyx_str;
extern void sd_unmount();
u32 get_tmr_s() u32 get_tmr_s()
{ {
return RTC(APBDEV_RTC_SECONDS); return RTC(APBDEV_RTC_SECONDS);
@ -117,7 +116,7 @@ void reboot_rcm()
nyx_str->mtc_cfg.init_done = 0; nyx_str->mtc_cfg.init_done = 0;
PMC(APBDEV_PMC_SCRATCH0) = 2; // Reboot into rcm. PMC(APBDEV_PMC_SCRATCH0) = PMC_SCRATCH0_MODE_RCM;
PMC(APBDEV_PMC_CNTRL) |= PMC_CNTRL_MAIN_RST; PMC(APBDEV_PMC_CNTRL) |= PMC_CNTRL_MAIN_RST;
while (true) while (true)
@ -128,6 +127,8 @@ void power_off()
{ {
sd_unmount(); sd_unmount();
display_end(); display_end();
nyx_str->mtc_cfg.init_done = 0;
// Stop the alarm, in case we injected and powered off too fast. // Stop the alarm, in case we injected and powered off too fast.
max77620_rtc_stop_alarm(); max77620_rtc_stop_alarm();

View file

@ -31,6 +31,7 @@ typedef enum
ERR_LIBSYS_LP0 = (1 << 0), ERR_LIBSYS_LP0 = (1 << 0),
ERR_SYSOLD_NYX = (1 << 1), ERR_SYSOLD_NYX = (1 << 1),
ERR_SYSOLD_MTC = (1 << 2), ERR_SYSOLD_MTC = (1 << 2),
ERR_EXCEPT_ENB = (1 << 31),
} hekate_errors_t; } hekate_errors_t;
#define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \ #define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \

View file

@ -21,7 +21,7 @@ VPATH += $(dir $(wildcard ./$(SOURCEDIR)/*/*/*/)) $(dir $(wildcard ./$(SOURCEDIR
# Main and graphics. # Main and graphics.
OBJS = $(addprefix $(BUILDDIR)/$(TARGET)/, \ OBJS = $(addprefix $(BUILDDIR)/$(TARGET)/, \
start.o \ start.o exception_handlers.o \
nyx.o heap.o \ nyx.o heap.o \
gfx.o \ gfx.o \
gui.o gui_info.o gui_tools.o gui_options.o gui_emmc_tools.o gui_emummc_tools.o \ gui.o gui_info.o gui_tools.o gui_options.o gui_emmc_tools.o gui_emummc_tools.o \
@ -30,9 +30,10 @@ OBJS = $(addprefix $(BUILDDIR)/$(TARGET)/, \
# Hardware. # Hardware.
OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
bpmp.o clock.o cluster.o di.o gpio.o i2c.o mc.o sdram.o pinmux.o se.o smmu.o tsec.o uart.o \ bpmp.o clock.o cluster.o di.o gpio.o i2c.o irq.o pinmux.o se.o smmu.o tsec.o uart.o \
fuse.o kfuse.o minerva.o \ fuse.o kfuse.o \
sdmmc.o sdmmc_driver.o \ mc.o sdram.o minerva.o \
sdmmc.o sdmmc_driver.o nx_emmc.o nx_sd.o \
bq24193.o max17050.o max7762x.o max77620-rtc.o regulator_5v.o \ bq24193.o max17050.o max7762x.o max77620-rtc.o regulator_5v.o \
touch.o tmp451.o fan.o \ touch.o tmp451.o fan.o \
hw_init.o \ hw_init.o \

View file

@ -116,7 +116,7 @@ _reset:
LDR R1, =0x30505645 /* EVP0 */ LDR R1, =0x30505645 /* EVP0 */
STR R1, [R0] /* EVP0 in EXCP_EN_ADDR */ STR R1, [R0] /* EVP0 in EXCP_EN_ADDR */
LDR R0, =EXCP_LR_ADDR LDR R0, =EXCP_LR_ADDR
MOV R1, LR MOV R1, LR
STR R1, [R0] /* Save LR in EXCP_LR_ADDR */ STR R1, [R0] /* Save LR in EXCP_LR_ADDR */
LDR R0, =__bss_start LDR R0, =__bss_start
EOR R1, R1, R1 EOR R1, R1, R1

View file

@ -800,13 +800,13 @@ static void _create_tab_about(lv_theme_t * th, lv_obj_t * parent)
static void _update_status_bar(void *params) static void _update_status_bar(void *params)
{ {
char *label = (char *)malloc(64); char *label = (char *)malloc(128);
u16 soc_temp; u16 soc_temp = 0;
u32 batt_percent; u32 batt_percent = 0;
int charge_status; int charge_status = 0;
int batt_volt; int batt_volt = 0;
int batt_curr; int batt_curr = 0;
rtc_time_t time; rtc_time_t time;
// Get sensor data. // Get sensor data.
@ -1119,7 +1119,7 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn)
} }
// Parse ini boot entries and set buttons/icons. // Parse ini boot entries and set buttons/icons.
char *tmp_path = calloc(0x80, 1); char *tmp_path = malloc(1024);
LIST_INIT(ini_sections); LIST_INIT(ini_sections);
if (sd_mount()) if (sd_mount())
{ {
@ -1133,7 +1133,7 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn)
if (ini_parse_success) if (ini_parse_success)
{ {
// Iterate to all boot entries and load icons. // Iterate to all boot entries and load icons.
u32 i = 1, x = 0; u32 i = 1, curr_btn_idx = 0;
LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, &ini_sections, link) LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, &ini_sections, link)
{ {
if (!strcmp(ini_sec->name, "config") || (ini_sec->type != INI_CHOICE)) if (!strcmp(ini_sec->name, "config") || (ini_sec->type != INI_CHOICE))
@ -1171,7 +1171,7 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn)
bmp = bmp_to_lvimg_obj(icon_path); bmp = bmp_to_lvimg_obj(icon_path);
// Enable button. // Enable button.
lv_obj_set_opa_scale(launch_ctxt[x], LV_OPA_COVER); lv_obj_set_opa_scale(launch_ctxt[curr_btn_idx], LV_OPA_COVER);
// Default to switch logo if no icon found at all. // Default to switch logo if no icon found at all.
if (!bmp) if (!bmp)
@ -1180,12 +1180,12 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn)
//Set icon. //Set icon.
if (bmp) if (bmp)
{ {
img = lv_img_create(launch_ctxt[x], NULL); img = lv_img_create(launch_ctxt[curr_btn_idx], NULL);
lv_img_set_src(img, bmp); lv_img_set_src(img, bmp);
} }
// Add button mask/radius and align icon. // Add button mask/radius and align icon.
lv_obj_t *btn = lv_btn_create(launch_ctxt[x], NULL); lv_obj_t *btn = lv_btn_create(launch_ctxt[curr_btn_idx], NULL);
lv_obj_set_size(btn, 200, 200); lv_obj_set_size(btn, 200, 200);
lv_btn_set_style(btn, LV_BTN_STYLE_REL, &btn_home_transp_rel); lv_btn_set_style(btn, LV_BTN_STYLE_REL, &btn_home_transp_rel);
lv_btn_set_style(btn, LV_BTN_STYLE_PR, &btn_home_transp_pr); lv_btn_set_style(btn, LV_BTN_STYLE_PR, &btn_home_transp_pr);
@ -1195,7 +1195,7 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn)
// Set autoboot index. // Set autoboot index.
ext = lv_obj_get_ext_attr(btn); ext = lv_obj_get_ext_attr(btn);
ext->idx = i; ext->idx = i;
ext = lv_obj_get_ext_attr(launch_ctxt[x]); // Redundancy. ext = lv_obj_get_ext_attr(launch_ctxt[curr_btn_idx]); // Redundancy.
ext->idx = i; ext->idx = i;
// Set action. // Set action.
@ -1205,15 +1205,15 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn)
lv_btn_set_action(btn, LV_BTN_ACTION_CLICK, _launch_more_cfg_action); lv_btn_set_action(btn, LV_BTN_ACTION_CLICK, _launch_more_cfg_action);
// Set button's label text. // Set button's label text.
lv_label_set_text(launch_ctxt[x + 1], ini_sec->name); lv_label_set_text(launch_ctxt[curr_btn_idx + 1], ini_sec->name);
lv_obj_set_opa_scale(launch_ctxt[x + 1], LV_OPA_COVER); lv_obj_set_opa_scale(launch_ctxt[curr_btn_idx + 1], LV_OPA_COVER);
// Set rolling text if name is big. // Set rolling text if name is big.
if (strlen(ini_sec->name) > 22) if (strlen(ini_sec->name) > 22)
lv_label_set_long_mode(boot_entry_label, LV_LABEL_LONG_ROLL); lv_label_set_long_mode(boot_entry_label, LV_LABEL_LONG_ROLL);
i++; i++;
x += 2; curr_btn_idx += 2;
if (i > max_entries) if (i > max_entries)
break; break;
@ -1477,9 +1477,9 @@ static void _nyx_set_default_styles(lv_theme_t * th)
hint_small_style_white.text.font = &interui_20; hint_small_style_white.text.font = &interui_20;
lv_style_copy(&monospace_text, &lv_style_plain); lv_style_copy(&monospace_text, &lv_style_plain);
monospace_text.body.main_color = LV_COLOR_HEX(0x1b1b1b); monospace_text.body.main_color = LV_COLOR_HEX(0x1B1B1B);
monospace_text.body.grad_color = LV_COLOR_HEX(0x1b1b1b); monospace_text.body.grad_color = LV_COLOR_HEX(0x1B1B1B);
monospace_text.body.border.color = LV_COLOR_HEX(0x1b1b1b); monospace_text.body.border.color = LV_COLOR_HEX(0x1B1B1B);
monospace_text.body.border.width = 0; monospace_text.body.border.width = 0;
monospace_text.body.opa = LV_OPA_TRANSP; monospace_text.body.opa = LV_OPA_TRANSP;
monospace_text.text.color = LV_COLOR_HEX(0xD8D8D8); monospace_text.text.color = LV_COLOR_HEX(0xD8D8D8);

View file

@ -52,7 +52,7 @@ static const pkg1_id_t _pkg1_ids[] = {
{ "20190208150037", 7, 0x0F00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //7.0.1 { "20190208150037", 7, 0x0F00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //7.0.1
{ "20190314172056", 7, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //8.0.0 - 8.0.1 { "20190314172056", 7, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //8.0.0 - 8.0.1
{ "20190531152432", 8, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //8.1.0 { "20190531152432", 8, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //8.1.0
{ "20190809135709", 9, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //9.0.0 { "20190809135709", 9, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //9.0.0 - 9.0.1
{ "20191021113848", 10, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //9.1.0 { "20191021113848", 10, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //9.1.0
{ "20200303104606", 10, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //10.0.0 { "20200303104606", 10, 0x0E00, 0x6FE0, { 1, 2, 0 }, 0x40030000, 0x4003E000 }, //10.0.0
{ NULL } //End. { NULL } //End.

View file

@ -116,7 +116,6 @@ static const u8 mkey_keyseed_8xx[][0x10] =
static bool _pkg2_key_unwrap_validate(pkg2_hdr_t *tmp_test, pkg2_hdr_t *hdr, u8 src_slot, u8 *mkey, const u8 *key_seed) static bool _pkg2_key_unwrap_validate(pkg2_hdr_t *tmp_test, pkg2_hdr_t *hdr, u8 src_slot, u8 *mkey, const u8 *key_seed)
{ {
// Decrypt older encrypted mkey. // Decrypt older encrypted mkey.
se_aes_crypt_ecb(src_slot, 0, mkey, 0x10, key_seed, 0x10); se_aes_crypt_ecb(src_slot, 0, mkey, 0x10, key_seed, 0x10);
// Set and unwrap pkg2 key. // Set and unwrap pkg2 key.
@ -177,7 +176,7 @@ pkg2_hdr_t *pkg2_decrypt(void *data, u8 kb)
mkey_seeds_idx--; mkey_seeds_idx--;
se_aes_key_clear(9); se_aes_key_clear(9);
se_aes_key_set(9, tmp_mkey, 0x10); se_aes_key_set(9, tmp_mkey, 0x10);
decr_slot = 9; // Temp key. decr_slot = 9; // Temp key.
// Check if we tried last key for that pkg2 version. // Check if we tried last key for that pkg2 version.

View file

@ -5906,7 +5906,7 @@ FRESULT f_mkfs (
} else { } else {
/* Create a single-partition in this function */ /* Create a single-partition in this function */
if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
b_vol = (opt & FM_SFD) ? 0 : 63; /* Volume start sector */ b_vol = (opt & FM_SFD) ? 0 : 32768; /* Volume start sector. Align to 16MB */
if (sz_vol < b_vol) LEAVE_MKFS(FR_MKFS_ABORTED); if (sz_vol < b_vol) LEAVE_MKFS(FR_MKFS_ABORTED);
sz_vol -= b_vol; /* Volume size */ sz_vol -= b_vol; /* Volume size */
} }
@ -6193,13 +6193,13 @@ FRESULT f_mkfs (
st_word(buf + BPB_BkBootSec32, 6); /* Offset of backup VBR (VBR + 6) */ st_word(buf + BPB_BkBootSec32, 6); /* Offset of backup VBR (VBR + 6) */
buf[BS_DrvNum32] = 0x80; /* Drive number (for int13) */ buf[BS_DrvNum32] = 0x80; /* Drive number (for int13) */
buf[BS_BootSig32] = 0x29; /* Extended boot signature */ buf[BS_BootSig32] = 0x29; /* Extended boot signature */
mem_cpy(buf + BS_VolLab32, "NO NAME " "FAT32 ", 19); /* Volume label, FAT signature */ mem_cpy(buf + BS_VolLab32, "SWITCH SD " "FAT32 ", 19); /* Volume label, FAT signature */
} else { } else {
st_dword(buf + BS_VolID, GET_FATTIME()); /* VSN */ st_dword(buf + BS_VolID, GET_FATTIME()); /* VSN */
st_word(buf + BPB_FATSz16, (WORD)sz_fat); /* FAT size [sector] */ st_word(buf + BPB_FATSz16, (WORD)sz_fat); /* FAT size [sector] */
buf[BS_DrvNum] = 0x80; /* Drive number (for int13) */ buf[BS_DrvNum] = 0x80; /* Drive number (for int13) */
buf[BS_BootSig] = 0x29; /* Extended boot signature */ buf[BS_BootSig] = 0x29; /* Extended boot signature */
mem_cpy(buf + BS_VolLab, "NO NAME " "FAT ", 19); /* Volume label, FAT signature */ mem_cpy(buf + BS_VolLab, "SWITCH SD " "FAT ", 19); /* Volume label, FAT signature */
} }
st_word(buf + BS_55AA, 0xAA55); /* Signature (offset is fixed here regardless of sector size) */ st_word(buf + BS_55AA, 0xAA55); /* Signature (offset is fixed here regardless of sector size) */
if (disk_write(pdrv, buf, b_vol, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it to the VBR sector */ if (disk_write(pdrv, buf, b_vol, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it to the VBR sector */

View file

@ -380,8 +380,11 @@ int ff_del_syncobj (FF_SYNC_t sobj); /* Delete a sync object */
#define AM_RDO 0x01 /* Read only */ #define AM_RDO 0x01 /* Read only */
#define AM_HID 0x02 /* Hidden */ #define AM_HID 0x02 /* Hidden */
#define AM_SYS 0x04 /* System */ #define AM_SYS 0x04 /* System */
#define AM_VOL 0x08 /* Volume */
#define AM_DIR 0x10 /* Directory */ #define AM_DIR 0x10 /* Directory */
#define AM_ARC 0x20 /* Archive */ #define AM_ARC 0x20 /* Archive */
#define AM_DEV 0x40 /* Device */
#define AM_RVD 0x80 /* Reserved */
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -163,7 +163,7 @@
* LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't caused problem * LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't caused problem
* LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail * LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail
*/ */
# define LV_LOG_LEVEL LV_LOG_LEVEL_ERROR # define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
/* 1: Print the log with 'printf'; 0: user need to register a callback*/ /* 1: Print the log with 'printf'; 0: user need to register a callback*/
# define LV_LOG_PRINTF 1 # define LV_LOG_PRINTF 1
#endif /*USE_LV_LOG*/ #endif /*USE_LV_LOG*/

View file

@ -186,7 +186,7 @@ static void label_init(void)
sec.text.color = LV_COLOR_HEX(0xFF5500); sec.text.color = LV_COLOR_HEX(0xFF5500);
lv_style_copy(&hint, &prim); lv_style_copy(&hint, &prim);
hint.text.color = LV_COLOR_HEX3(0xCCC); hint.text.color = LV_COLOR_HEX(0xCCCCCC);
theme.label.prim = &prim; theme.label.prim = &prim;
theme.label.sec = &sec; theme.label.sec = &sec;
@ -199,7 +199,7 @@ static void img_init(void)
#if USE_LV_IMG != 0 #if USE_LV_IMG != 0
static lv_style_t img_light, img_dark; static lv_style_t img_light, img_dark;
lv_style_copy(&img_light, &def); lv_style_copy(&img_light, &def);
img_light.image.color = LV_COLOR_HEX(0xffffff); img_light.image.color = LV_COLOR_WHITE;
img_light.image.intense = LV_OPA_80; img_light.image.intense = LV_OPA_80;
lv_style_copy(&img_dark, &def); lv_style_copy(&img_dark, &def);
@ -302,7 +302,7 @@ static void sw_init(void)
sw_knob_off.body.main_color = LV_COLOR_HEX(0xDADADA); sw_knob_off.body.main_color = LV_COLOR_HEX(0xDADADA);
sw_knob_off.body.grad_color = sw_knob_off.body.main_color; sw_knob_off.body.grad_color = sw_knob_off.body.main_color;
sw_knob_off.body.border.width = 1; sw_knob_off.body.border.width = 1;
sw_knob_off.body.border.color = LV_COLOR_HEX3(0x999); sw_knob_off.body.border.color = LV_COLOR_HEX(0x999999);
sw_knob_off.body.border.opa = LV_OPA_COVER; sw_knob_off.body.border.opa = LV_OPA_COVER;
theme.sw.bg = &sw_bg; theme.sw.bg = &sw_bg;
@ -321,7 +321,7 @@ static void lmeter_init(void)
lmeter.body.main_color = lv_color_hsv_to_rgb(_hue, 75, 90); lmeter.body.main_color = lv_color_hsv_to_rgb(_hue, 75, 90);
lmeter.body.grad_color = lmeter.body.main_color; lmeter.body.grad_color = lmeter.body.main_color;
lmeter.body.padding.hor = LV_DPI / 10; // Scale line length. lmeter.body.padding.hor = LV_DPI / 10; // Scale line length.
lmeter.line.color = LV_COLOR_HEX3(0x999); lmeter.line.color = LV_COLOR_HEX(0x999999);
lmeter.line.width = 2; lmeter.line.width = 2;
theme.lmeter = &lmeter; theme.lmeter = &lmeter;
@ -338,8 +338,8 @@ static void gauge_init(void)
gauge.body.grad_color = gauge.body.main_color; gauge.body.grad_color = gauge.body.main_color;
gauge.body.padding.hor = LV_DPI / 16; // Scale line length. gauge.body.padding.hor = LV_DPI / 16; // Scale line length.
gauge.body.padding.inner = LV_DPI / 8; gauge.body.padding.inner = LV_DPI / 8;
gauge.body.border.color = LV_COLOR_HEX3(0x999); gauge.body.border.color = LV_COLOR_HEX(0x999999);
gauge.text.color = LV_COLOR_HEX3(0xddd); gauge.text.color = LV_COLOR_HEX(0xDDDDDD);
gauge.line.width = 3; gauge.line.width = 3;
gauge.line.color = lv_color_hsv_to_rgb(_hue, 95, 70); gauge.line.color = lv_color_hsv_to_rgb(_hue, 95, 70);
@ -428,7 +428,7 @@ static void cb_init(void)
rel.body.shadow.width = 3; rel.body.shadow.width = 3;
lv_style_copy(&pr, &rel); lv_style_copy(&pr, &rel);
pr.body.main_color = LV_COLOR_HEX3(0xCCC); pr.body.main_color = LV_COLOR_HEX(0xCCCCCC);
pr.body.grad_color = pr.body.main_color; pr.body.grad_color = pr.body.main_color;
pr.body.shadow.width = 3; pr.body.shadow.width = 3;
@ -462,18 +462,18 @@ static void btnm_init(void)
bg.body.padding.hor = 0; bg.body.padding.hor = 0;
bg.body.padding.ver = 0; bg.body.padding.ver = 0;
bg.body.padding.inner = 0; bg.body.padding.inner = 0;
bg.text.color = LV_COLOR_HEX3(0x555); bg.text.color = LV_COLOR_HEX(0x555555);
lv_style_copy(&rel, theme.panel); lv_style_copy(&rel, theme.panel);
rel.body.border.part = LV_BORDER_FULL | LV_BORDER_INTERNAL; rel.body.border.part = LV_BORDER_FULL | LV_BORDER_INTERNAL;
rel.body.border.width = 1; rel.body.border.width = 1;
rel.body.border.color = LV_COLOR_HEX3(0xBBB); rel.body.border.color = LV_COLOR_HEX(0xBBBBBB);
rel.body.empty = 1; rel.body.empty = 1;
rel.body.shadow.width = 0; rel.body.shadow.width = 0;
lv_style_copy(&pr, &rel); lv_style_copy(&pr, &rel);
pr.glass = 0; pr.glass = 0;
pr.body.main_color = LV_COLOR_HEX3(0xDDD); pr.body.main_color = LV_COLOR_HEX(0xDDDDDD);
pr.body.grad_color = pr.body.main_color; pr.body.grad_color = pr.body.main_color;
pr.body.border.width = 0; pr.body.border.width = 0;
pr.body.empty = 0; pr.body.empty = 0;
@ -508,7 +508,7 @@ static void kb_init(void)
static lv_style_t bg, rel; static lv_style_t bg, rel;
lv_style_copy(&bg, theme.btnm.bg); lv_style_copy(&bg, theme.btnm.bg);
bg.text.color = LV_COLOR_HEX3(0xCCC); bg.text.color = LV_COLOR_HEX(0xCCCCCC);
lv_style_copy(&rel, &lv_style_transp); lv_style_copy(&rel, &lv_style_transp);
rel.text.font = _font; rel.text.font = _font;
@ -565,9 +565,9 @@ static void ta_init(void)
oneline.body.radius = 0; oneline.body.radius = 0;
oneline.body.border.part = LV_BORDER_BOTTOM; oneline.body.border.part = LV_BORDER_BOTTOM;
oneline.body.border.width = 3; oneline.body.border.width = 3;
oneline.body.border.color = LV_COLOR_HEX3(0x555); oneline.body.border.color = LV_COLOR_HEX(0x555555);
oneline.body.border.opa = LV_OPA_COVER; oneline.body.border.opa = LV_OPA_COVER;
oneline.text.color = LV_COLOR_HEX3(0x888); oneline.text.color = LV_COLOR_HEX(0x888888);
theme.ta.area = theme.panel; theme.ta.area = theme.panel;
theme.ta.oneline = &oneline; theme.ta.oneline = &oneline;
@ -676,7 +676,7 @@ static void roller_init(void)
roller_bg.text.line_space = LV_DPI / 8; roller_bg.text.line_space = LV_DPI / 8;
roller_bg.text.font = _font; roller_bg.text.font = _font;
roller_bg.glass = 0; roller_bg.glass = 0;
roller_bg.text.color = LV_COLOR_HEX3(0x444); roller_bg.text.color = LV_COLOR_HEX(0x444444);
lv_style_copy(&roller_sel, &roller_bg); lv_style_copy(&roller_sel, &roller_bg);
roller_sel.text.color = COLOR_HOS_TURQUOISE; roller_sel.text.color = COLOR_HOS_TURQUOISE;
@ -705,7 +705,7 @@ static void tabview_init(void)
btn_bg.body.radius = 0; btn_bg.body.radius = 0;
btn_bg.body.empty = 1; btn_bg.body.empty = 1;
btn_bg.body.border.width = 0; btn_bg.body.border.width = 0;
btn_bg.body.border.color = LV_COLOR_HEX3(0xDDD); btn_bg.body.border.color = LV_COLOR_HEX(0xDDDDDD);
btn_bg.body.border.part = LV_BORDER_BOTTOM; btn_bg.body.border.part = LV_BORDER_BOTTOM;
btn_bg.body.border.opa = LV_OPA_COVER; btn_bg.body.border.opa = LV_OPA_COVER;
btn_bg.body.shadow.width = 0; btn_bg.body.shadow.width = 0;
@ -726,7 +726,7 @@ static void tabview_init(void)
pr.body.border.width = 0; pr.body.border.width = 0;
pr.body.empty = 0; pr.body.empty = 0;
pr.body.radius = 0; pr.body.radius = 0;
pr.body.border.color = LV_COLOR_HEX3(0x888); pr.body.border.color = LV_COLOR_HEX(0x888888);
pr.body.border.part = LV_BORDER_BOTTOM; pr.body.border.part = LV_BORDER_BOTTOM;
pr.body.border.opa = LV_OPA_COVER; pr.body.border.opa = LV_OPA_COVER;
pr.text.color = COLOR_HOS_TURQUOISE; pr.text.color = COLOR_HOS_TURQUOISE;
@ -788,7 +788,7 @@ static void win_init(void)
header.body.grad_color = header.body.main_color; header.body.grad_color = header.body.main_color;
header.body.radius = 0; header.body.radius = 0;
header.body.border.width = 0; header.body.border.width = 0;
header.body.border.color = LV_COLOR_HEX3(0xDDD); header.body.border.color = LV_COLOR_HEX(0xDDDDDD);
header.body.border.part = LV_BORDER_BOTTOM; header.body.border.part = LV_BORDER_BOTTOM;
header.body.border.opa = LV_OPA_COVER; header.body.border.opa = LV_OPA_COVER;
header.body.shadow.width = 0; header.body.shadow.width = 0;

View file

@ -463,4 +463,54 @@
#define MC_ERR_APB_ASID_UPDATE_STATUS 0x9d0 #define MC_ERR_APB_ASID_UPDATE_STATUS 0x9d0
#define MC_DA_CONFIG0 0x9dc #define MC_DA_CONFIG0 0x9dc
// MC_SECURITY_CARVEOUTX_CFG0
// Mode of LOCK_MODE.
#define PROTECT_MODE_SHIFT 0
#define SEC_CARVEOUT_CFG_SECURE (0 << PROTECT_MODE_SHIFT0)
#define SEC_CARVEOUT_CFG_TZ_SECURE (1 << PROTECT_MODE_SHIFT0)
// Enables PROTECT_MODE.
#define LOCK_MODE_SHIFT 1
#define SEC_CARVEOUT_CFG_UNLOCKED (0 << LOCK_MODE_SHIFT)
#define SEC_CARVEOUT_CFG_LOCKED (1 << LOCK_MODE_SHIFT)
#define ADDRESS_TYPE_SHIFT 2
#define SEC_CARVEOUT_CFG_ANY_ADDRESS (0 << ADDRESS_TYPE_SHIFT)
#define SEC_CARVEOUT_CFG_UNTRANSLATED_ONLY (1 << ADDRESS_TYPE_SHIFT)
#define READ_ACCESS_LEVEL_SHIFT 3
#define SEC_CARVEOUT_CFG_RD_ALL (1 << READ_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_RD_UNK (2 << READ_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_RD_FALCON_LS (4 << READ_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_RD_FALCON_HS (8 << READ_ACCESS_LEVEL_SHIFT)
#define WRITE_ACCESS_LEVEL_SHIFT 7
#define SEC_CARVEOUT_CFG_WR_ALL (1 << WRITE_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_WR_UNK (2 << WRITE_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_WR_FALCON_LS (4 << WRITE_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_WR_FALCON_HS (8 << WRITE_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_APERTURE_ID_MASK (3 << 11)
#define DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT 14
#define SEC_CARVEOUT_CFG_DIS_RD_CHECK_L0 (1 << DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_RD_CHECK_L1 (2 << DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_RD_CHECK_L2 (4 << DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_RD_CHECK_L3 (8 << DISABLE_READ_CHECK_ACCESS_LEVEL_SHIFT)
#define DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT 18
#define SEC_CARVEOUT_CFG_DIS_WR_CHECK_L0 (1 << DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_WR_CHECK_L1 (2 << DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_WR_CHECK_L2 (4 << DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_DIS_WR_CHECK_L3 (8 << DISABLE_WRITE_CHECK_ACCESS_LEVEL_SHIFT)
#define SEC_CARVEOUT_CFG_SEND_CFG_TO_GPU (1 << 22)
#define SEC_CARVEOUT_CFG_TZ_GLOBAL_WR_EN_BYPASS_CHECK (1 << 23)
#define SEC_CARVEOUT_CFG_TZ_GLOBAL_RD_EN_BYPASS_CHECK (1 << 24)
#define SEC_CARVEOUT_CFG_ALLOW_APERTURE_ID_MISMATCH (1 << 25)
#define SEC_CARVEOUT_CFG_FORCE_APERTURE_ID_MATCH (1 << 26)
#define SEC_CARVEOUT_CFG_IS_WPR (1 << 27)
#endif #endif

View file

@ -54,6 +54,7 @@
u8 *Kc_MENU_LOGO; u8 *Kc_MENU_LOGO;
#endif //MENU_LOGO_ENABLE #endif //MENU_LOGO_ENABLE
nyx_config n_cfg;
hekate_config h_cfg; hekate_config h_cfg;
const volatile ipl_ver_meta_t __attribute__((section ("._ipl_version"))) ipl_ver = { const volatile ipl_ver_meta_t __attribute__((section ("._ipl_version"))) ipl_ver = {
@ -292,7 +293,7 @@ static void _show_errors()
gfx_con_setpos(0, 0); gfx_con_setpos(0, 0);
display_backlight_brightness(100, 1000); display_backlight_brightness(100, 1000);
WPRINTFARGS("An exception happened (LR %08X):\n", *excp_lr); WPRINTFARGS("An exception occurred (LR %08X):\n", *excp_lr);
switch (*excp_type) switch (*excp_type)
{ {
case EXCP_TYPE_RESET: case EXCP_TYPE_RESET:
@ -331,10 +332,14 @@ void nyx_init_load_res()
// Set bootloader's default configuration. // Set bootloader's default configuration.
set_default_configuration(); set_default_configuration();
set_nyx_default_configuration();
gfx_init_ctxt((u32 *)NYX_FB_ADDRESS, 720, 1280, 720); gfx_init_ctxt((u32 *)NYX_FB_ADDRESS, 720, 1280, 720);
gfx_con_init(); gfx_con_init();
// Show exception errors if any.
_show_errors();
sd_mount(); sd_mount();
// Train DRAM and switch to max frequency. // Train DRAM and switch to max frequency.

View file

@ -25,13 +25,23 @@
#define APBDEV_PMC_PWRGATE_TOGGLE 0x30 #define APBDEV_PMC_PWRGATE_TOGGLE 0x30
#define APBDEV_PMC_PWRGATE_STATUS 0x38 #define APBDEV_PMC_PWRGATE_STATUS 0x38
#define APBDEV_PMC_NO_IOPOWER 0x44 #define APBDEV_PMC_NO_IOPOWER 0x44
#define PMC_NO_IOPOWER_GPIO_IO_EN (1 << 21)
#define PMC_NO_IOPOWER_AUDIO_HV (1 << 18)
#define PMC_NO_IOPOWER_SDMMC1_IO_EN (1 << 12) #define PMC_NO_IOPOWER_SDMMC1_IO_EN (1 << 12)
#define APBDEV_PMC_SCRATCH0 0x50 #define APBDEV_PMC_SCRATCH0 0x50
#define PMC_SCRATCH0_MODE_RECOVERY (1 << 31)
#define PMC_SCRATCH0_MODE_FASTBOOT (1 << 30)
#define PMC_SCRATCH0_MODE_PAYLOAD (1 << 29)
#define PMC_SCRATCH0_MODE_RCM (1 << 1)
#define PMC_SCRATCH0_MODE_WARMBOOT (1 << 0)
#define APBDEV_PMC_SCRATCH1 0x54 #define APBDEV_PMC_SCRATCH1 0x54
#define APBDEV_PMC_SCRATCH20 0xA0 #define APBDEV_PMC_SCRATCH20 0xA0
#define APBDEV_PMC_PWR_DET_VAL 0xE4 #define APBDEV_PMC_PWR_DET_VAL 0xE4
#define PMC_PWR_DET_GPIO_IO_EN (1 << 21)
#define PMC_PWR_DET_AUDIO_HV (1 << 18)
#define PMC_PWR_DET_SDMMC1_IO_EN (1 << 12) #define PMC_PWR_DET_SDMMC1_IO_EN (1 << 12)
#define APBDEV_PMC_DDR_PWR 0xE8 #define APBDEV_PMC_DDR_PWR 0xE8
#define APBDEV_PMC_USB_AO 0xF0
#define APBDEV_PMC_CRYPTO_OP 0xF4 #define APBDEV_PMC_CRYPTO_OP 0xF4
#define PMC_CRYPTO_OP_SE_ENABLE 0 #define PMC_CRYPTO_OP_SE_ENABLE 0
#define PMC_CRYPTO_OP_SE_DISABLE 1 #define PMC_CRYPTO_OP_SE_DISABLE 1
@ -39,6 +49,8 @@
#define APBDEV_PMC_SCRATCH40 0x13C #define APBDEV_PMC_SCRATCH40 0x13C
#define APBDEV_PMC_OSC_EDPD_OVER 0x1A4 #define APBDEV_PMC_OSC_EDPD_OVER 0x1A4
#define PMC_OSC_EDPD_OVER_OSC_CTRL_OVER 0x400000 #define PMC_OSC_EDPD_OVER_OSC_CTRL_OVER 0x400000
#define APBDEV_PMC_CLK_OUT_CNTRL 0x1A8
#define PMC_CLK_OUT_CNTRL_CLK1_FORCE_EN (1 << 2)
#define APBDEV_PMC_RST_STATUS 0x1B4 #define APBDEV_PMC_RST_STATUS 0x1B4
#define APBDEV_PMC_IO_DPD_REQ 0x1B8 #define APBDEV_PMC_IO_DPD_REQ 0x1B8
#define APBDEV_PMC_IO_DPD2_REQ 0x1C0 #define APBDEV_PMC_IO_DPD2_REQ 0x1C0

View file

@ -31,6 +31,7 @@ typedef enum
ERR_LIBSYS_LP0 = (1 << 0), ERR_LIBSYS_LP0 = (1 << 0),
ERR_SYSOLD_NYX = (1 << 1), ERR_SYSOLD_NYX = (1 << 1),
ERR_SYSOLD_MTC = (1 << 2), ERR_SYSOLD_MTC = (1 << 2),
ERR_EXCEPT_ENB = (1 << 31),
} hekate_errors_t; } hekate_errors_t;
#define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \ #define byte_swap_32(num) (((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \