arm: apple: Switch to fully dynamic mem layout
Support for Apple M1 Pro and Max will allow using a single binary for all M1 SoCs. The M1 Pro/Max have a different memory layout. The RAM start address is 0x100_0000_0000 instead of 0x8_0000_0000. Replace the hardcoded memory layout with dynamic initialized environment variables in board_late_init(). Tested on Mac Mini (2020) and Macbook Pro 14-inch (2021). Signed-off-by: Janne Grunau <j@jannau.net> Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
This commit is contained in:
parent
551f426011
commit
6fb4f7387e
@ -265,3 +265,36 @@ u64 get_page_table_size(void)
|
||||
{
|
||||
return SZ_256K;
|
||||
}
|
||||
|
||||
int board_late_init(void)
|
||||
{
|
||||
unsigned long base;
|
||||
unsigned long top;
|
||||
u32 status = 0;
|
||||
|
||||
/* Reserve 4M each for scriptaddr and pxefile_addr_r at the top of RAM
|
||||
* at least 1M below the stack.
|
||||
*/
|
||||
top = gd->start_addr_sp - CONFIG_STACK_SIZE - SZ_8M - SZ_1M;
|
||||
top = ALIGN_DOWN(top, SZ_8M);
|
||||
|
||||
status |= env_set_hex("scriptaddr", top + SZ_4M);
|
||||
status |= env_set_hex("pxefile_addr_r", top);
|
||||
|
||||
/* somewhat based on the Linux Kernel boot requirements:
|
||||
* align by 2M and maximal FDT size 2M
|
||||
*/
|
||||
base = ALIGN(gd->ram_base, SZ_2M);
|
||||
|
||||
status |= env_set_hex("fdt_addr_r", base);
|
||||
status |= env_set_hex("kernel_addr_r", base + SZ_2M);
|
||||
status |= env_set_hex("ramdisk_addr_r", base + SZ_128M);
|
||||
status |= env_set_hex("loadaddr", base + SZ_2G);
|
||||
status |= env_set_hex("kernel_comp_addr_r", base + SZ_2G - SZ_128M);
|
||||
status |= env_set_hex("kernel_comp_size", SZ_128M);
|
||||
|
||||
if (status)
|
||||
log_warning("late_init: Failed to set run time variables\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -3,10 +3,11 @@ CONFIG_ARCH_APPLE=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="t8103-j274"
|
||||
CONFIG_DEBUG_UART_BASE=0x235200000
|
||||
CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x880000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x0
|
||||
CONFIG_USE_PREBOOT=y
|
||||
# CONFIG_DISPLAY_CPUINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
CONFIG_BOARD_LATE_INIT=y
|
||||
# CONFIG_NET is not set
|
||||
CONFIG_APPLE_SPI_KEYB=y
|
||||
# CONFIG_MMC is not set
|
||||
|
@ -9,10 +9,6 @@
|
||||
"stdout=serial,vidconsole\0" \
|
||||
"stderr=serial,vidconsole\0"
|
||||
|
||||
#define ENV_MEM_LAYOUT_SETTINGS \
|
||||
"fdt_addr_r=0x960100000\0" \
|
||||
"kernel_addr_r=0x960200000\0"
|
||||
|
||||
#if CONFIG_IS_ENABLED(CMD_NVME)
|
||||
#define BOOT_TARGET_NVME(func) func(NVME, nvme, 0)
|
||||
#else
|
||||
@ -33,7 +29,6 @@
|
||||
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
ENV_DEVICE_SETTINGS \
|
||||
ENV_MEM_LAYOUT_SETTINGS \
|
||||
BOOTENV
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user