boards/BRINGUP.md R2/R3, FABRIC-3 SXXXIX. The entry stub cleans the cache over the image, builds an identity map (the image's GiB Normal, the rest Device) and enables MMU and caches at EL2 (or EL1); rpi5_mmu.c makes the devicetree's RAM Normal and the framebuffer uncached. Mailbox waits give up after one second; the buffer is cleaned around the exchange; the framebuffer address goes through dma-ranges, not a Pi 4 mask. New rpi5-rehearsal target runs the native image on QEMU virt at EL2. It found three more that would each have stopped the board: the PL011 shift (mine, c9519173; the host test asserted it), the GIC address not carried through /soc's ranges (new fdt_reg_address(), checked against the real Pi 5 DTB), and no timer IRQ at EL2 (HCR_EL2.IMO/FMO/AMO). Rehearsal: POST 1052 passed, same parity hash as UEFI. Standard acceptance on three ISAs: POST 1052, hash 0x82f4ae7cb2e2d424. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
78 lines
2.1 KiB
Plaintext
78 lines
2.1 KiB
Plaintext
/* Linker script for the Raspberry Pi 5 native (non-UEFI) kernel image.
|
|
*
|
|
* Linked from the same objects as the aarch64 kernel ELF, entered at
|
|
* rpi5_native_start (arch/aarch64/native_rpi5_entry.S, section
|
|
* .text.entry -- placed first so it sits at the load address), then
|
|
* flattened with `objcopy -O binary` into kernel_2712.img.
|
|
*
|
|
* Load address 0x80000 must match boards/raspi/config.txt's
|
|
* kernel_address=0x80000: Pi 5 firmware's own default for
|
|
* kernel_2712.img is 0x200000, so the address is pinned on both sides
|
|
* rather than left to the firmware default.
|
|
*
|
|
* __kernel_start/__kernel_end span the whole image including .bss so
|
|
* pmm_init() reserves every page the image occupies (aarch64 boot.S's
|
|
* zero-length substitutes are only correct for the UEFI loader path,
|
|
* where UEFI owns the image pages). __bss_start/__bss_end are 16-byte
|
|
* aligned for the entry stub's zeroing loop: firmware does not clear
|
|
* memory past the end of the file it loads.
|
|
*/
|
|
|
|
OUTPUT_FORMAT("elf64-littleaarch64")
|
|
OUTPUT_ARCH(aarch64)
|
|
ENTRY(rpi5_native_start)
|
|
|
|
SECTIONS
|
|
{
|
|
/* RPI5_NATIVE_BASE comes from kernel/Makefile (--defsym): 0x80000 on
|
|
* the Pi 5; 0x40080000 for the QEMU virt rehearsal only, whose RAM
|
|
* starts at 0x40000000 and which loads a raw image 0x80000 into it. */
|
|
. = RPI5_NATIVE_BASE;
|
|
|
|
__kernel_start = .;
|
|
|
|
.text : {
|
|
__text_start = .;
|
|
KEEP(*(.text.entry))
|
|
*(.text .text.*)
|
|
__text_end = .;
|
|
}
|
|
|
|
.rodata : ALIGN(4K) {
|
|
__rodata_start = .;
|
|
*(.rodata .rodata.*)
|
|
__rodata_end = .;
|
|
}
|
|
|
|
.data : ALIGN(4K) {
|
|
__data_start = .;
|
|
*(.data .data.*)
|
|
*(.got .got.*)
|
|
__data_end = .;
|
|
}
|
|
|
|
.rela.dyn : ALIGN(8) {
|
|
*(.rela .rela.*)
|
|
}
|
|
|
|
.bss (NOLOAD) : ALIGN(4K) {
|
|
__bss_start = .;
|
|
*(.bss .bss.*)
|
|
*(COMMON)
|
|
. = ALIGN(16);
|
|
__bss_end = .;
|
|
}
|
|
|
|
. = ALIGN(4K);
|
|
__kernel_end = .;
|
|
|
|
/DISCARD/ : {
|
|
*(.comment)
|
|
*(.note*)
|
|
*(.eh_frame)
|
|
*(.dynamic)
|
|
*(.dynsym)
|
|
*(.interp)
|
|
}
|
|
}
|