diff options
author | Dzmitry Sankouski <dsankouski@gmail.com> | 2022-12-27 22:47:09 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2023-01-10 15:39:07 -0500 |
commit | 971ccee2fb74a5dad282e230d60de84e1fb6e6dd (patch) | |
tree | 9a6bd14a01f9e99c3b483acada8e8df51351958c /arch | |
parent | 40c69cc922c7874301bbb543508e5f591f4e30d4 (diff) | |
download | u-boot-971ccee2fb74a5dad282e230d60de84e1fb6e6dd.zip u-boot-971ccee2fb74a5dad282e230d60de84e1fb6e6dd.tar.gz u-boot-971ccee2fb74a5dad282e230d60de84e1fb6e6dd.tar.bz2 |
SoC: sdm845: find and save KASLR to env variables
KASLR address is needed to boot fully functional Android.
KASLR is set by primary bootloader, and since u-boot is used
as a secondary bootloader(replacing kernel) on sdm845 platform,
KASLR may be found by comparing memory chunks at relocaddr over
supposed KASLR range.
Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-snapdragon/init_sdm845.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/arm/mach-snapdragon/init_sdm845.c b/arch/arm/mach-snapdragon/init_sdm845.c index 5f53c21..1f88502 100644 --- a/arch/arm/mach-snapdragon/init_sdm845.c +++ b/arch/arm/mach-snapdragon/init_sdm845.c @@ -78,5 +78,23 @@ __weak int misc_init_r(void) env_set("key_power", "0"); } + /* + * search for kaslr address, set by primary bootloader by searching first + * 0x100 relocated bytes at u-boot's initial load address range + */ + uintptr_t start = gd->ram_base; + uintptr_t end = start + 0x800000; + u8 *addr = (u8 *)start; + phys_addr_t *relocaddr = (phys_addr_t *)gd->relocaddr; + u32 block_size = 0x1000; + + while (memcmp(addr, relocaddr, 0x100) && (uintptr_t)addr < end) + addr += block_size; + + if ((uintptr_t)addr >= end) + printf("KASLR not found in range 0x%lx - 0x%lx", start, end); + else + env_set_addr("KASLR", addr); + return 0; } |