More bugfixes

This commit is contained in:
ctcaer@gmail.com 2019-06-30 03:40:37 +03:00
parent 12f8f055eb
commit f3dcfab095
9 changed files with 63 additions and 40 deletions

View file

@ -34,7 +34,7 @@ OBJS = $(addprefix $(BUILDDIR)/$(TARGET)/, \
OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
clock.o cluster.o di.o gpio.o i2c.o mc.o sdram.o pinmux.o se.o smmu.o tsec.o uart.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 \
fuse.o kfuse.o \ fuse.o kfuse.o \
sdmmc.o sdmmc_driver.o \ sdmmc.o sdmmc_driver.o emummc.o nx_emmc.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 \
) )
@ -47,7 +47,6 @@ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
# Horizon. # Horizon.
OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
nx_emmc.o \
hos.o hos_config.o pkg1.o pkg2.o fss.o secmon_exo.o sept.o \ hos.o hos_config.o pkg1.o pkg2.o fss.o secmon_exo.o sept.o \
) )

View file

@ -46,6 +46,7 @@ void set_default_configuration()
h_cfg.sept_run = EMC(EMC_SCRATCH0) & EMC_SEPT_RUN; h_cfg.sept_run = EMC(EMC_SCRATCH0) & EMC_SEPT_RUN;
h_cfg.rcm_patched = true; h_cfg.rcm_patched = true;
h_cfg.sd_timeoff = 0; h_cfg.sd_timeoff = 0;
h_cfg.emummc_force_disable = false;
} }
int create_config_entry() int create_config_entry()

View file

@ -36,6 +36,7 @@ typedef struct _hekate_config
int sept_run; int sept_run;
bool rcm_patched; bool rcm_patched;
u32 sd_timeoff; u32 sd_timeoff;
bool emummc_force_disable;
} hekate_config; } hekate_config;
typedef enum typedef enum

View file

@ -328,6 +328,12 @@ enum kip_offset_section
#define GET_KIP_PATCH_OFFSET(x) (x & KIP_PATCH_OFFSET_MASK) #define GET_KIP_PATCH_OFFSET(x) (x & KIP_PATCH_OFFSET_MASK)
#define KPS(x) ((u32)(x) << KIP_PATCH_SECTION_SHIFT) #define KPS(x) ((u32)(x) << KIP_PATCH_SECTION_SHIFT)
static kip1_patch_t _fs_emummc[] =
{
{ KPS(KIP_TEXT) | 1, 0, "", "" },
{ 0, 0, NULL, NULL }
};
static kip1_patch_t _fs_nosigchk_100[] = static kip1_patch_t _fs_nosigchk_100[] =
{ {
{ KPS(KIP_TEXT) | 0x194A0, 4, "\xBA\x09\x00\x94", "\xE0\x03\x1F\x2A" }, { KPS(KIP_TEXT) | 0x194A0, 4, "\xBA\x09\x00\x94", "\xE0\x03\x1F\x2A" },
@ -339,6 +345,7 @@ static kip1_patchset_t _fs_patches_100[] =
{ {
{ "nosigchk", _fs_nosigchk_100 }, { "nosigchk", _fs_nosigchk_100 },
{ "nogc", NULL }, { "nogc", NULL },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -353,6 +360,7 @@ static kip1_patchset_t _fs_patches_200[] =
{ {
{ "nosigchk", _fs_nosigchk_200 }, { "nosigchk", _fs_nosigchk_200 },
{ "nogc", NULL }, { "nogc", NULL },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -367,6 +375,7 @@ static kip1_patchset_t _fs_patches_210[] =
{ {
{ "nosigchk", _fs_nosigchk_210 }, { "nosigchk", _fs_nosigchk_210 },
{ "nogc", NULL }, { "nogc", NULL },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -381,6 +390,7 @@ static kip1_patchset_t _fs_patches_300[] =
{ {
{ "nosigchk", _fs_nosigchk_300 }, { "nosigchk", _fs_nosigchk_300 },
{ "nogc", NULL }, { "nogc", NULL },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -395,6 +405,7 @@ static kip1_patchset_t _fs_patches_30x[] =
{ {
{ "nosigchk", _fs_nosigchk_30x }, { "nosigchk", _fs_nosigchk_30x },
{ "nogc", NULL }, { "nogc", NULL },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -416,6 +427,7 @@ static kip1_patchset_t _fs_patches_40x[] =
{ {
{ "nosigchk", _fs_nosigchk_4xx }, { "nosigchk", _fs_nosigchk_4xx },
{ "nogc", _fs_nogc_40x }, { "nogc", _fs_nogc_40x },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -430,6 +442,7 @@ static kip1_patchset_t _fs_patches_410[] =
{ {
{ "nosigchk", _fs_nosigchk_4xx }, { "nosigchk", _fs_nosigchk_4xx },
{ "nogc", _fs_nogc_410 }, { "nogc", _fs_nogc_410 },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -451,6 +464,7 @@ static kip1_patchset_t _fs_patches_50x[] =
{ {
{ "nosigchk", _fs_nosigchk_50x }, { "nosigchk", _fs_nosigchk_50x },
{ "nogc", _fs_nogc_50x }, { "nogc", _fs_nogc_50x },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -472,6 +486,7 @@ static kip1_patchset_t _fs_patches_510[] =
{ {
{ "nosigchk", _fs_nosigchk_510 }, { "nosigchk", _fs_nosigchk_510 },
{ "nogc", _fs_nogc_510 }, { "nogc", _fs_nogc_510 },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -507,6 +522,7 @@ static kip1_patchset_t _fs_patches_600[] =
{ {
{ "nosigchk", _fs_nosigchk_600 }, { "nosigchk", _fs_nosigchk_600 },
{ "nogc", _fs_nogc_600 }, { "nogc", _fs_nogc_600 },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -514,6 +530,7 @@ static kip1_patchset_t _fs_patches_600_exfat[] =
{ {
{ "nosigchk", _fs_nosigchk_600_exfat }, { "nosigchk", _fs_nosigchk_600_exfat },
{ "nogc", _fs_nogc_600_exfat }, { "nogc", _fs_nogc_600_exfat },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -549,6 +566,7 @@ static kip1_patchset_t _fs_patches_700[] =
{ {
{ "nosigchk", _fs_nosigchk_700 }, { "nosigchk", _fs_nosigchk_700 },
{ "nogc", _fs_nogc_700 }, { "nogc", _fs_nogc_700 },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -556,6 +574,7 @@ static kip1_patchset_t _fs_patches_700_exfat[] =
{ {
{ "nosigchk", _fs_nosigchk_700_exfat }, { "nosigchk", _fs_nosigchk_700_exfat },
{ "nogc", _fs_nogc_700_exfat }, { "nogc", _fs_nogc_700_exfat },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -591,6 +610,7 @@ static kip1_patchset_t _fs_patches_800[] =
{ {
{ "nosigchk", _fs_nosigchk_800 }, { "nosigchk", _fs_nosigchk_800 },
{ "nogc", _fs_nogc_800 }, { "nogc", _fs_nogc_800 },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -598,6 +618,7 @@ static kip1_patchset_t _fs_patches_800_exfat[] =
{ {
{ "nosigchk", _fs_nosigchk_800_exfat }, { "nosigchk", _fs_nosigchk_800_exfat },
{ "nogc", _fs_nogc_800_exfat }, { "nogc", _fs_nogc_800_exfat },
{ "emummc", _fs_emummc },
{ NULL, NULL } { NULL, NULL }
}; };
@ -696,7 +717,7 @@ void pkg2_replace_kip(link_t *info, u64 tid, pkg2_kip1_t *kip1)
{ {
ki->kip1 = kip1; ki->kip1 = kip1;
ki->size = _pkg2_calc_kip1_size(kip1); ki->size = _pkg2_calc_kip1_size(kip1);
DPRINTF("replaced kip (new size %08X)\n", ki->size); DPRINTF("replaced kip %s (new size %08X)\n", kip1->name, ki->size);
return; return;
} }
} }
@ -707,7 +728,7 @@ void pkg2_add_kip(link_t *info, pkg2_kip1_t *kip1)
pkg2_kip1_info_t *ki = (pkg2_kip1_info_t *)malloc(sizeof(pkg2_kip1_info_t)); pkg2_kip1_info_t *ki = (pkg2_kip1_info_t *)malloc(sizeof(pkg2_kip1_info_t));
ki->kip1 = kip1; ki->kip1 = kip1;
ki->size = _pkg2_calc_kip1_size(kip1); ki->size = _pkg2_calc_kip1_size(kip1);
DPRINTF("added kip (size %08X)\n", ki->size); DPRINTF("added kip %s (size %08X)\n", kip1->name, ki->size);
list_append(info, &ki->link); list_append(info, &ki->link);
} }

View file

@ -126,9 +126,7 @@ typedef struct _atm_fatal_error_ctx
#define ATM_WB_MAGIC 0x30544257 #define ATM_WB_MAGIC 0x30544257
// Exosphère mailbox defines. // Exosphère mailbox defines.
#define EXO_CFG_DEPR_ADDR 0x40002E40 // Deprecated.
#define EXO_CFG_ADDR 0x8000F000 #define EXO_CFG_ADDR 0x8000F000
#define EXO_MAGIC_DEPR_VAL 0x31434258
#define EXO_MAGIC_VAL 0x304F5845 #define EXO_MAGIC_VAL 0x304F5845
#define EXO_FLAG_620_KGN (1 << 0) #define EXO_FLAG_620_KGN (1 << 0)
#define EXO_FLAG_DBG_PRIV (1 << 1) #define EXO_FLAG_DBG_PRIV (1 << 1)
@ -139,7 +137,8 @@ void config_exosphere(const char *id, u32 kb, void *warmboot, bool stock)
u32 exoFwNo = 0; u32 exoFwNo = 0;
u32 exoFlags = 0; u32 exoFlags = 0;
volatile exo_cfg_t *exo_cfg_depr = (exo_cfg_t *)EXO_CFG_DEPR_ADDR; memset((exo_cfg_t *)EXO_CFG_ADDR, 0, sizeof(exo_cfg_t));
volatile exo_cfg_t *exo_cfg = (exo_cfg_t *)EXO_CFG_ADDR; volatile exo_cfg_t *exo_cfg = (exo_cfg_t *)EXO_CFG_ADDR;
switch (kb) switch (kb)
@ -155,8 +154,8 @@ void config_exosphere(const char *id, u32 kb, void *warmboot, bool stock)
break; break;
default: default:
exoFwNo = kb + 1; exoFwNo = kb + 1;
if (!strcmp(id, "20190314172056")) if (!strcmp(id, "20190314172056") || !strcmp(id, "20190531152432"))
exoFwNo++; // ATM_TARGET_FW_800. exoFwNo++; // ATM_TARGET_FW_800/810.
break; break;
} }
@ -168,13 +167,10 @@ void config_exosphere(const char *id, u32 kb, void *warmboot, bool stock)
exoFlags |= EXO_FLAG_DBG_PRIV; exoFlags |= EXO_FLAG_DBG_PRIV;
// Set mailbox values. // Set mailbox values.
exo_cfg_depr->magic = EXO_MAGIC_VAL;
exo_cfg->magic = EXO_MAGIC_VAL; exo_cfg->magic = EXO_MAGIC_VAL;
exo_cfg_depr->fwno = exoFwNo;
exo_cfg->fwno = exoFwNo; exo_cfg->fwno = exoFwNo;
exo_cfg_depr->flags = exoFlags;
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

@ -38,18 +38,24 @@
#define PINMUX_AUX_SDMMC3_DAT1 0x28 #define PINMUX_AUX_SDMMC3_DAT1 0x28
#define PINMUX_AUX_SDMMC3_DAT2 0x2C #define PINMUX_AUX_SDMMC3_DAT2 0x2C
#define PINMUX_AUX_SDMMC3_DAT3 0x30 #define PINMUX_AUX_SDMMC3_DAT3 0x30
#define PINMUX_AUX_SATA_LED_ACTIVE 0x4C
#define PINMUX_AUX_DMIC3_CLK 0xB4 #define PINMUX_AUX_DMIC3_CLK 0xB4
#define PINMUX_AUX_UART2_TX 0xF4 #define PINMUX_AUX_UART2_TX 0xF4
#define PINMUX_AUX_UART3_TX 0x104 #define PINMUX_AUX_UART3_TX 0x104
#define PINMUX_AUX_SPDIF_IN 0x1A4
#define PINMUX_AUX_USB_VBUS_EN0 0x1A8
#define PINMUX_AUX_WIFI_EN 0x1B4 #define PINMUX_AUX_WIFI_EN 0x1B4
#define PINMUX_AUX_WIFI_RST 0x1B8 #define PINMUX_AUX_WIFI_RST 0x1B8
#define PINMUX_AUX_NFC_EN 0x1D0 #define PINMUX_AUX_NFC_EN 0x1D0
#define PINMUX_AUX_NFC_INT 0x1D4 #define PINMUX_AUX_NFC_INT 0x1D4
#define PINMUX_AUX_CAM1_PWDN 0x1EC
#define PINMUX_AUX_LCD_BL_PWM 0x1FC #define PINMUX_AUX_LCD_BL_PWM 0x1FC
#define PINMUX_AUX_LCD_BL_EN 0x200 #define PINMUX_AUX_LCD_BL_EN 0x200
#define PINMUX_AUX_LCD_RST 0x204 #define PINMUX_AUX_LCD_RST 0x204
#define PINMUX_AUX_LCD_GPIO2 0x20C
#define PINMUX_AUX_GPIO_PE6 0x248 #define PINMUX_AUX_GPIO_PE6 0x248
#define PINMUX_AUX_GPIO_PH6 0x250 #define PINMUX_AUX_GPIO_PH6 0x250
#define PINMUX_AUX_GPIO_PK3 0x260
#define PINMUX_AUX_GPIO_PZ1 0x280 #define PINMUX_AUX_GPIO_PZ1 0x280
/*! 0:UART-A, 1:UART-B, 3:UART-C, 3:UART-D */ /*! 0:UART-A, 1:UART-B, 3:UART-C, 3:UART-D */
#define PINMUX_AUX_UARTX_TX(x) (0xE4 + 0x10 * (x)) #define PINMUX_AUX_UARTX_TX(x) (0xE4 + 0x10 * (x))

View file

@ -29,7 +29,7 @@ u8 btn_read()
res |= BTN_VOL_DOWN; res |= BTN_VOL_DOWN;
if (!gpio_read(GPIO_PORT_X, GPIO_PIN_6)) if (!gpio_read(GPIO_PORT_X, GPIO_PIN_6))
res |= BTN_VOL_UP; res |= BTN_VOL_UP;
if (i2c_recv_byte(4, MAX77620_I2C_ADDR, 0x15) & 0x4) if (i2c_recv_byte(4, MAX77620_I2C_ADDR, MAX77620_REG_ONOFFSTAT) & 0x4)
res |= BTN_POWER; res |= BTN_POWER;
return res; return res;
} }

View file

@ -28,7 +28,7 @@ char *dirlist(const char *directory, const char *pattern, bool includeHiddenFile
int res = 0; int res = 0;
u32 i = 0, j = 0, k = 0; u32 i = 0, j = 0, k = 0;
DIR dir; DIR dir;
static FILINFO fno; FILINFO fno;
char *dir_entries = (char *)calloc(max_entries, 256); char *dir_entries = (char *)calloc(max_entries, 256);
char *temp = (char *)calloc(1, 256); char *temp = (char *)calloc(1, 256);

View file

@ -103,6 +103,5 @@ void power_off()
// 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();
//TODO: we should probably make sure all regulators are powered off properly.
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_ONOFFCNFG1, MAX77620_ONOFFCNFG1_PWR_OFF); i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_ONOFFCNFG1, MAX77620_ONOFFCNFG1_PWR_OFF);
} }