Exosphere: Fix remaining crt0 bugs, we now make it to pk2ldr.

This commit is contained in:
Michael Scire 2018-05-18 07:16:41 -06:00
parent 6954925f71
commit 9424510f8f
2 changed files with 3 additions and 3 deletions

View file

@ -107,12 +107,13 @@ static void configure_ttbls(void) {
static void do_relocation(const coldboot_crt0_reloc_list_t *reloc_list, size_t index) { static void do_relocation(const coldboot_crt0_reloc_list_t *reloc_list, size_t index) {
extern const uint8_t __glob_origin__[]; extern const uint8_t __glob_origin__[];
uint64_t *p_vma = (uint64_t *)reloc_list->relocs[index].vma; uint64_t *p_vma = (uint64_t *)reloc_list->relocs[index].vma;
bool is_clear = reloc_list->relocs[index].lma == 0;
size_t offset = reloc_list->relocs[index].lma - (uintptr_t)__glob_origin__; size_t offset = reloc_list->relocs[index].lma - (uintptr_t)__glob_origin__;
const uint64_t *p_lma = (const uint64_t *)(reloc_list->reloc_base + offset); const uint64_t *p_lma = (const uint64_t *)(reloc_list->reloc_base + offset);
size_t size = reloc_list->relocs[index].end_vma - reloc_list->relocs[index].vma; size_t size = reloc_list->relocs[index].end_vma - reloc_list->relocs[index].vma;
for(size_t i = 0; i < size / 8; i++) { for(size_t i = 0; i < size / 8; i++) {
p_vma[i] = offset != 0 ? p_lma[i] : 0; p_vma[i] = is_clear ? 0 : p_lma[i];
} }
} }
@ -160,7 +161,6 @@ void coldboot_init(coldboot_crt0_reloc_list_t *reloc_list, uintptr_t start_cold)
for(size_t i = 0; i < reloc_list->nb_relocs_post_mmu_init; i++) { for(size_t i = 0; i < reloc_list->nb_relocs_post_mmu_init; i++) {
do_relocation(reloc_list, reloc_list->nb_relocs_pre_mmu_init + i); do_relocation(reloc_list, reloc_list->nb_relocs_pre_mmu_init + i);
} }
// MAKE_REG32(MMIO_GET_DEVICE_ADDRESS(MMIO_DEVID_RTC_PMC) + 0x400ull) = 0x10;
flush_dcache_all(); flush_dcache_all();
invalidate_icache_all(); invalidate_icache_all();

View file

@ -111,7 +111,7 @@ _post_cold_crt0_reloc:
ldr x0, =0x80010000 ldr x0, =0x80010000
add x20, x20, x0 add x20, x20, x0
ldr x2, =__loaded_end_lma__ ldr x2, =__loaded_end_lma__
ldr x3, =0x40020000 ldr x3, =__glob_origin__
sub x21, x2, x3 sub x21, x2, x3
mov x1, x19 mov x1, x19
mov x2, x21 mov x2, x21