Files
LithosAnanake/include/starkernel/rpi5_dtb.h
T
Robert Allan JamesandClaude Sonnet 5 ca52ce8243
Build / build-amd64-iso (push) Waiting to run
Build / build-aarch64-iso (push) Waiting to run
Build / build-riscv64-img (push) Waiting to run
rpi5_dtb.c: wire fdt.c's node-scoped lookup into the Pi 5 UART/mailbox addresses
New include/starkernel/rpi5_dtb.h / src/starkernel/arch/aarch64/rpi5_dtb.c:
rpi5_uart_base()/rpi5_mailbox_base(), each finding their peripheral by
compatible string ("arm,pl011" / "brcm,bcm2835-mbox") via fdt_find_node_by_
compatible() then reading its "reg" via fdt_find_prop_in_node().

Found and fixed a real translation gap before it could have silently
produced a wrong address: confirmed directly against bcm2712.dtsi
(raspberrypi/linux) that both peripherals live under one "soc"
simple-bus node whose ranges property adds a fixed 0x10_0000_0000
offset to every child reg value. fdt.c's reader deliberately doesn't
apply ranges translation generally (not a general devicetree
library); this file applies that one, fixed, SoC-wide offset
explicitly, documented with the exact devicetree excerpt that
confirmed it.

Compile-only verification -- no caller wired in yet, these two
functions are what the still-open entry-stub and mailbox-framebuffer-
driver punch-list items will call. Verified 3-arch boot to ok>
(amd64/aarch64/riscv64, each in the foreground; rpi5_dtb.o confirmed
built on aarch64, the only arch that compiles this file).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YcT3H2PQeyujrzjqS3Var
2026-09-04 13:36:08 -04:00

49 lines
1.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
StarForth — Steady-State Virtual Machine Runtime
Copyright (c) 20232025 Robert A. James. All rights reserved.
Licensed under the StarForth License, Version 1.0.
*/
/**
* rpi5_dtb.h - Raspberry Pi 5 (BCM2712) devicetree-based peripheral
* discovery, for the native (non-UEFI) boot path (FABRIC-3.md §IV.3).
*
* Two lookups: the PL011 UART (early console) and the VideoCore mailbox
* property interface (framebuffer setup, §IV.3 item 3). Both peripherals
* live under BCM2712's own devicetree "soc" simple-bus node, which
* applies one fixed address translation to every child `reg` value —
* see `rpi5_dtb.c`'s own doc comment for the confirmed offset and where
* it was verified. `fdt.c`'s reader deliberately does not do general
* `ranges`-property translation (it is "not a general devicetree
* library"); this file applies the one, fixed, SoC-wide offset by name
* instead of teaching `fdt.c` a general mechanism for a single known
* hardware fact.
*/
#ifndef STARKERNEL_RPI5_DTB_H
#define STARKERNEL_RPI5_DTB_H
#include <stdint.h>
/**
* @brief Find the PL011 UART's CPU-physical base address from the DTB.
*
* @param dtb Devicetree blob, as passed to the native boot entry (or
* `BootInfo->dtb`); NULL is safe.
* @return Final CPU-physical MMIO base address, or 0 if the node is
* absent, malformed, or @p dtb is invalid.
*/
uint64_t rpi5_uart_base(const void* dtb);
/**
* @brief Find the VideoCore mailbox property interface's CPU-physical
* base address from the DTB.
*
* @param dtb Devicetree blob; NULL is safe.
* @return Final CPU-physical MMIO base address, or 0 if the node is
* absent, malformed, or @p dtb is invalid.
*/
uint64_t rpi5_mailbox_base(const void* dtb);
#endif /* STARKERNEL_RPI5_DTB_H */