mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-26 11:42:09 +00:00
chnldr: Support variable sizes of coreboot.rom
This commit is contained in:
parent
3405910f4c
commit
d50af46b03
2 changed files with 20 additions and 10 deletions
|
@ -228,12 +228,14 @@ void check_power_off_from_hos()
|
||||||
#define PATCHED_RELOC_SZ 0x94
|
#define PATCHED_RELOC_SZ 0x94
|
||||||
#define PATCHED_RELOC_STACK 0x40007000
|
#define PATCHED_RELOC_STACK 0x40007000
|
||||||
#define PATCHED_RELOC_ENTRY 0x40010000
|
#define PATCHED_RELOC_ENTRY 0x40010000
|
||||||
#define EXT_PAYLOAD_ADDR 0xC03C0000
|
#define EXT_PAYLOAD_ADDR 0xC0000000
|
||||||
#define RCM_PAYLOAD_ADDR (EXT_PAYLOAD_ADDR + ALIGN(PATCHED_RELOC_SZ, 0x10))
|
#define RCM_PAYLOAD_ADDR (EXT_PAYLOAD_ADDR + ALIGN(PATCHED_RELOC_SZ, 0x10))
|
||||||
#define COREBOOT_ADDR (0xD0000000 - 0x100000)
|
#define COREBOOT_END_ADDR 0xD0000000
|
||||||
#define CBFS_DRAM_EN_ADDR 0x4003e000
|
#define CBFS_DRAM_EN_ADDR 0x4003e000
|
||||||
#define CBFS_DRAM_MAGIC 0x4452414D // "DRAM"
|
#define CBFS_DRAM_MAGIC 0x4452414D // "DRAM"
|
||||||
|
|
||||||
|
static void *coreboot_addr;
|
||||||
|
|
||||||
void reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size)
|
void reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size)
|
||||||
{
|
{
|
||||||
memcpy((u8 *)payload_src, (u8 *)IPL_LOAD_ADDR, PATCHED_RELOC_SZ);
|
memcpy((u8 *)payload_src, (u8 *)IPL_LOAD_ADDR, PATCHED_RELOC_SZ);
|
||||||
|
@ -247,7 +249,7 @@ void reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size)
|
||||||
|
|
||||||
if (payload_size == 0x7000)
|
if (payload_size == 0x7000)
|
||||||
{
|
{
|
||||||
memcpy((u8 *)(payload_src + ALIGN(PATCHED_RELOC_SZ, 0x10)), (u8 *)COREBOOT_ADDR, 0x7000); //Bootblock
|
memcpy((u8 *)(payload_src + ALIGN(PATCHED_RELOC_SZ, 0x10)), coreboot_addr, 0x7000); //Bootblock
|
||||||
*(vu32 *)CBFS_DRAM_EN_ADDR = CBFS_DRAM_MAGIC;
|
*(vu32 *)CBFS_DRAM_EN_ADDR = CBFS_DRAM_MAGIC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -313,7 +315,10 @@ int launch_payload(char *path, bool update)
|
||||||
if (size < 0x30000)
|
if (size < 0x30000)
|
||||||
buf = (void *)RCM_PAYLOAD_ADDR;
|
buf = (void *)RCM_PAYLOAD_ADDR;
|
||||||
else
|
else
|
||||||
buf = (void *)COREBOOT_ADDR;
|
{
|
||||||
|
coreboot_addr = (void *)(COREBOOT_END_ADDR - size);
|
||||||
|
buf = coreboot_addr;
|
||||||
|
}
|
||||||
|
|
||||||
if (f_read(&fp, buf, size, NULL))
|
if (f_read(&fp, buf, size, NULL))
|
||||||
{
|
{
|
||||||
|
|
|
@ -217,10 +217,12 @@ void emmcsn_path_impl(char *path, char *sub_dir, char *filename, sdmmc_storage_t
|
||||||
#define PATCHED_RELOC_ENTRY 0x40010000
|
#define PATCHED_RELOC_ENTRY 0x40010000
|
||||||
#define EXT_PAYLOAD_ADDR 0xC0000000
|
#define EXT_PAYLOAD_ADDR 0xC0000000
|
||||||
#define RCM_PAYLOAD_ADDR (EXT_PAYLOAD_ADDR + ALIGN(PATCHED_RELOC_SZ, 0x10))
|
#define RCM_PAYLOAD_ADDR (EXT_PAYLOAD_ADDR + ALIGN(PATCHED_RELOC_SZ, 0x10))
|
||||||
#define COREBOOT_ADDR (0xD0000000 - 0x100000)
|
#define COREBOOT_END_ADDR 0xD0000000
|
||||||
#define CBFS_DRAM_EN_ADDR 0x4003e000
|
#define CBFS_DRAM_EN_ADDR 0x4003e000
|
||||||
#define CBFS_DRAM_MAGIC 0x4452414D // "DRAM"
|
#define CBFS_DRAM_MAGIC 0x4452414D // "DRAM"
|
||||||
|
|
||||||
|
static void *coreboot_addr;
|
||||||
|
|
||||||
void reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size)
|
void reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size)
|
||||||
{
|
{
|
||||||
memcpy((u8 *)payload_src, (u8 *)NYX_LOAD_ADDR, PATCHED_RELOC_SZ);
|
memcpy((u8 *)payload_src, (u8 *)NYX_LOAD_ADDR, PATCHED_RELOC_SZ);
|
||||||
|
@ -234,7 +236,7 @@ void reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size)
|
||||||
|
|
||||||
if (payload_size == 0x7000)
|
if (payload_size == 0x7000)
|
||||||
{
|
{
|
||||||
memcpy((u8 *)(payload_src + ALIGN(PATCHED_RELOC_SZ, 0x10)), (u8 *)COREBOOT_ADDR, 0x7000); //Bootblock
|
memcpy((u8 *)(payload_src + ALIGN(PATCHED_RELOC_SZ, 0x10)), coreboot_addr, 0x7000); //Bootblock
|
||||||
*(vu32 *)CBFS_DRAM_EN_ADDR = CBFS_DRAM_MAGIC;
|
*(vu32 *)CBFS_DRAM_EN_ADDR = CBFS_DRAM_MAGIC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -257,7 +259,6 @@ lv_res_t launch_payload(lv_obj_t *list)
|
||||||
if (f_open(&fp, path, FA_READ))
|
if (f_open(&fp, path, FA_READ))
|
||||||
{
|
{
|
||||||
EPRINTFARGS("Payload file is missing!\n(%s)", path);
|
EPRINTFARGS("Payload file is missing!\n(%s)", path);
|
||||||
sd_unmount(false);
|
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -269,13 +270,15 @@ lv_res_t launch_payload(lv_obj_t *list)
|
||||||
if (size < 0x30000)
|
if (size < 0x30000)
|
||||||
buf = (void *)RCM_PAYLOAD_ADDR;
|
buf = (void *)RCM_PAYLOAD_ADDR;
|
||||||
else
|
else
|
||||||
buf = (void *)COREBOOT_ADDR;
|
{
|
||||||
|
coreboot_addr = (void *)(COREBOOT_END_ADDR - size);
|
||||||
|
buf = coreboot_addr;
|
||||||
|
}
|
||||||
|
|
||||||
if (f_read(&fp, buf, size, NULL))
|
if (f_read(&fp, buf, size, NULL))
|
||||||
{
|
{
|
||||||
f_close(&fp);
|
f_close(&fp);
|
||||||
sd_unmount(false);
|
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -304,6 +307,8 @@ lv_res_t launch_payload(lv_obj_t *list)
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
sd_unmount(false);
|
||||||
|
|
||||||
return LV_RES_OK;
|
return LV_RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue