Skip to content

Commit

Permalink
arm: apple: Switch to fully dynamic mem layout
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Mark Kettenis <[email protected]>
  • Loading branch information
jannau authored and trini committed Feb 28, 2022
1 parent 551f426 commit 6fb4f73
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 6 deletions.
33 changes: 33 additions & 0 deletions arch/arm/mach-apple/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 2 additions & 1 deletion configs/apple_m1_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 0 additions & 5 deletions include/configs/apple.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -33,7 +29,6 @@

#define CONFIG_EXTRA_ENV_SETTINGS \
ENV_DEVICE_SETTINGS \
ENV_MEM_LAYOUT_SETTINGS \
BOOTENV

#endif

0 comments on commit 6fb4f73

Please sign in to comment.