Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions build_sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,16 @@ class KernelPath:
"RPI4_MEMORY": 8192,
},
),
BoardInfo(
name="rpi5b_2gb",
arch=KernelArch.AARCH64,
gcc_cpu="cortex-a76",
loader_link_address=0x10000000,
smp_cores=4,
kernel_options={
"KernelPlatform": "bcm2712",
},
),
BoardInfo(
name="rockpro64",
arch=KernelArch.AARCH64,
Expand Down
21 changes: 21 additions & 0 deletions docs/manual.md
Original file line number Diff line number Diff line change
Expand Up @@ -1266,6 +1266,7 @@ The currently supported platforms are:
* rpi4b_2gb
* rpi4b_4gb
* rpi4b_8gb
* rpi5b_2gb
* serengeti
* star64
* stm32mp2
Expand Down Expand Up @@ -1530,6 +1531,26 @@ For initial board setup, please see the instructions on the
When getting into the U-Boot console you want to load the Microkit binary image to
address 0x10000000 and then run `go 0x10000000`.

For example, if you were to load the image via the MMC you would run the following
U-Boot commands:

=> fatload mmc 0 0x10000000 <SYSTEM IMAGE>
=> go 0x10000000

## Raspberry Pi 5B {#rpi5b_2gb}

Support is available for the Raspberry Pi 5 Model B. As of now, the build defaults
to the 2GB model. This default is set to ensure memory safety across all the memory
variants of the Pi 5 by limiting the possibility of kernel corruption. If you need
access to 4GB, 8GB, or 16GB of RAM you will need to supply a custom Device Tree overlay
via `KernelCustomDTSOverlay` that matches your hardware's memory layout.

For initial board setup, please see the instructions on the
[seL4 website](https://docs.sel4.systems/Hardware/Rpi5.html).

When getting into the U-Boot console you want to load the Microkit binary image to
address 0x10000000 and then run `go 0x10000000`.

For example, if you were to load the image via the MMC you would run the following
U-Boot commands:

Expand Down
2 changes: 2 additions & 0 deletions loader/src/aarch64/cpus.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ static const size_t psci_target_cpus[4] = {0x00, 0x01, 0x02, 0x03};
/* BCM2711 does not use PSCI for CPU bring-up. */
#define SMP_USE_SPIN_TABLE
static const size_t cpus_release_addr[4] = {0xd8, 0xe0, 0xe8, 0xf0};
#elif defined(CONFIG_PLAT_BCM2712)
static const size_t psci_target_cpus[4] = {0x000, 0x100, 0x200, 0x300};
#else

_Static_assert(!is_set(CONFIG_ENABLE_SMP_SUPPORT),
Expand Down
21 changes: 21 additions & 0 deletions loader/src/uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,27 @@ void putc(uint8_t ch)
while (!(*UART_REG(MU_LSR) & MU_LSR_TXIDLE));
*UART_REG(MU_IO) = (ch & 0xff);
}
#elif defined(CONFIG_PLAT_BCM2712)
/* rpi5b */
#define UART_BASE 0x107d001000
#define PL011_TCR 0x030
#define PL011_UARTDR 0x000
#define PL011_UARTFR 0x018
#define PL011_UARTFR_TXFF (1 << 5)
#define PL011_CR_UART_EN (1 << 0)
#define PL011_CR_TX_EN (1 << 8)

void uart_init()
{
/* Enable the device and transmit */
*UART_REG(PL011_TCR) |= (PL011_CR_TX_EN | PL011_CR_UART_EN);
}

void putc(uint8_t ch)
{
while ((*UART_REG(PL011_UARTFR) & PL011_UARTFR_TXFF) != 0);
*UART_REG(PL011_UARTDR) = ch;
}
#elif defined(CONFIG_PLAT_ROCKPRO64)
#define UART_BASE 0xff1a0000
#define UTHR 0x0
Expand Down
3 changes: 3 additions & 0 deletions platforms.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
# This list is ordered based on the order in what the platforms were added
# in.
platforms:
- name: rpi5b_2gb
cmake_plat: bcm2712
since: dev
- name: stm32mp2
cmake_plat: stm32mp2
since: 2.3.0
Expand Down
Loading