diff mbox series

[v3,1/1] configs: add raspberrypi 5 defconfig

Message ID 20240209204441.86187-1-gael.portay@rtone.fr
State New
Headers show
Series [v3,1/1] configs: add raspberrypi 5 defconfig | expand

Commit Message

Gaël PORTAY Feb. 9, 2024, 8:44 p.m. UTC
This configuration builds an image for the RaspberryPi 5.

Cc: Adam Duskett <adam.duskett@amarulasolutions.com>
Cc: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Gaël PORTAY <gael.portay@rtone.fr>
---
Dear maintainers,

That change adds the raspberrypi5_defconfig for the Raspberry Pi 5
64-bit.

It uses the defconfig bcm2712_defconfig[2] and the device-tree source
bcm2712-rpi-5-b.dts[3].

Note: The kernel defconfig defaults to 16k page-size; a kernel fragment
is added to use a 4k page-size to compile and run using all toolchains.

The Raspberry Pi 5 has now a dedicated debug UART connector[4] (it is
always active and enabled; there is no more need to enable_uart=1 in the
file config.txt).

The UART device name changes to ttyAMA10 and the command line has to be
updated in the file cmdline.txt.

The Raspberry Pi 5 only supports 64-bit kernel[5].

Tested on internal toolchain:

	[    0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2023.11-1117-g95a905918c) 12.3.0, GNU ld (GNU Binutils) 2.40) #1 SMP PREEMPT Fri Feb  9 20:09:08 CET 2024
	(...)
	# grep PageSize /proc/1/smaps | sort -u
	KernelPageSize:        4 kB
	MMUPageSize:           4 kB

Tested on external Bootlin toolchain:

	[    0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-linux-gcc.br_real (Buildroot 2021.11-10014-g6257e8c) 13.2.0, GNU ld (GNU Binutils) 2.41) #1 SMP PREEMPT Fri Feb  9 20:54:08 CET 2024
	(...)
	# grep PageSize /proc/1/smaps | sort -u
	KernelPageSize:        4 kB
	MMUPageSize:           4 kB

Tested on external ARM toolchain:

	[    0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-none-linux-gnu-gcc (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 13.2.1 20231009, GNU ld (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 2.41.0.20231009) #1 SMP PREEMPT Fri Feb  9 21:00:24 CET 2024
	(...)
	# grep PageSize /proc/1/smaps | sort -u
	KernelPageSize:        4 kB
	MMUPageSize:           4 kB

Changes since RFC:
 - Update README to add model Pi 5 B
 - Add support for 64K MMU page-size for ARM64 and Raspberry Pi 5
 - Add Raspberry Pi 5 specific cmdline_5.txt to set its console on its
   debug uart (ttyAMA10 instead of ttyAMA0)
 - Remove 32-bit variant since Raspberry Pi 5 supports booting a 64-bit
   kernel only
 - Remove the property arm_64bit=1 from config_5_64bit.txt
 - Remove the _64bit suffix
 - Remove unecessary Pi 5 variant from package rpi-firmware

Changes since v1:
 - Rebase on top of master
 - Remove the bumps for the rpi-firmware and linux packages
 - Bump the kernel to linux-17f135b742c4edb340afb365873c3a574f7e16cb
   (6.1.61, i.e. the same version as the other raspberrypi defconfigs)

Changes since v2:
 - Rebase on top of master (remove applied patch)
 - Add a kernel fragment to force 4k page-size
 - Remove BR2_ARM64_PAGE_SIZE_16K from the board's defconfig

[0]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#introduction
[1]: https://www.raspberrypi.com/documentation/computers/config_txt.html#kernel
[2]: https://github.com/raspberrypi/linux/commit/9cfb379147f803b0362b0fe249e5b145d232bea3
[3]: https://github.com/raspberrypi/linux/commit/1196bf1a7736ff0ab79f5012fa84082e298031a7
[4]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#uart-connector
[5]: https://www.raspberrypi.com/documentation/computers/config_txt.html#arm_64bit

Kind Regards,
Gaël PORTAY

 board/raspberrypi/cmdline_5.txt               |  1 +
 board/raspberrypi/config_5.txt                | 14 ++++++
 board/raspberrypi/linux-4k-page-size.fragment |  1 +
 board/raspberrypi/readme.txt                  |  6 +++
 board/raspberrypi5                            |  1 +
 configs/raspberrypi5_defconfig                | 47 +++++++++++++++++++
 6 files changed, 70 insertions(+)
 create mode 100644 board/raspberrypi/cmdline_5.txt
 create mode 100644 board/raspberrypi/config_5.txt
 create mode 100644 board/raspberrypi/linux-4k-page-size.fragment
 create mode 120000 board/raspberrypi5
 create mode 100644 configs/raspberrypi5_defconfig

--
2.43.0
diff mbox series

Patch

diff --git a/board/raspberrypi/cmdline_5.txt b/board/raspberrypi/cmdline_5.txt
new file mode 100644
index 0000000000..ac457353e2
--- /dev/null
+++ b/board/raspberrypi/cmdline_5.txt
@@ -0,0 +1 @@ 
+root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA10,115200
diff --git a/board/raspberrypi/config_5.txt b/board/raspberrypi/config_5.txt
new file mode 100644
index 0000000000..bbed19fe46
--- /dev/null
+++ b/board/raspberrypi/config_5.txt
@@ -0,0 +1,14 @@ 
+# Please note that this is only a sample, we recommend you to change it to fit
+# your needs.
+# You should override this file using BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE.
+# See http://buildroot.org/manual.html#rootfs-custom
+# and http://elinux.org/RPiconfig for a description of config.txt syntax
+
+kernel=Image
+
+# To use an external initramfs file
+#initramfs rootfs.cpio.gz
+
+# Disable overscan assuming the display supports displaying the full resolution
+# If the text shown on the screen disappears off the edge, comment this out
+disable_overscan=1
diff --git a/board/raspberrypi/linux-4k-page-size.fragment b/board/raspberrypi/linux-4k-page-size.fragment
new file mode 100644
index 0000000000..5df91df1aa
--- /dev/null
+++ b/board/raspberrypi/linux-4k-page-size.fragment
@@ -0,0 +1 @@ 
+CONFIG_ARM64_4K_PAGES=y
diff --git a/board/raspberrypi/readme.txt b/board/raspberrypi/readme.txt
index 9202b5ff37..aa6421ea01 100644
--- a/board/raspberrypi/readme.txt
+++ b/board/raspberrypi/readme.txt
@@ -10,6 +10,7 @@  These instructions apply to all models of the Raspberry Pi:
   - the model B3 (aka Raspberry Pi 3).
   - the model B4 (aka Raspberry Pi 4).
   - the model CM4 (aka Raspberry Pi Compute Module 4 and IO Board).
+  - the model B5 (aka Raspberry Pi 5).

 How to build it
 ===============
@@ -64,6 +65,10 @@  or for CM4 (on IO Board - 64 bit):

   $ make raspberrypicm4io_64_defconfig

+For model 5 B:
+
+  $ make raspberrypi5_defconfig
+
 Build the rootfs
 ----------------

@@ -94,6 +99,7 @@  After building, you should obtain this tree:
     +-- bcm2710-rpi-cm3.dtb         [1]
     +-- bcm2711-rpi-4-b.dtb         [1]
     +-- bcm2711-rpi-cm4.dtb         [1]
+    +-- bcm2712-rpi-5-b.dtb         [1]
     +-- bcm2837-rpi-3-b.dtb         [1]
     +-- boot.vfat
     +-- rootfs.ext4
diff --git a/board/raspberrypi5 b/board/raspberrypi5
new file mode 120000
index 0000000000..fcdafc81ed
--- /dev/null
+++ b/board/raspberrypi5
@@ -0,0 +1 @@ 
+raspberrypi
\ No newline at end of file
diff --git a/configs/raspberrypi5_defconfig b/configs/raspberrypi5_defconfig
new file mode 100644
index 0000000000..d0760824bd
--- /dev/null
+++ b/configs/raspberrypi5_defconfig
@@ -0,0 +1,47 @@ 
+BR2_aarch64=y
+BR2_cortex_a76_a55=y
+BR2_ARM_FPU_VFPV4=y
+
+BR2_TOOLCHAIN_BUILDROOT_CXX=y
+
+BR2_SYSTEM_DHCP="eth0"
+
+# Linux headers same as kernel, a 6.1 series
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_1=y
+
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/raspberrypi/linux-4k-page-size.fragment"
+BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
+BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,17f135b742c4edb340afb365873c3a574f7e16cb)/linux-17f135b742c4edb340afb365873c3a574f7e16cb.tar.gz"
+BR2_LINUX_KERNEL_DEFCONFIG="bcm2712"
+
+# Build the DTB from the kernel sources
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2712-rpi-5-b"
+
+BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+
+BR2_PACKAGE_RPI_FIRMWARE=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi5/config_5.txt"
+BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="board/raspberrypi5/cmdline_5.txt"
+# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
+
+# Required tools to create the SD image
+BR2_PACKAGE_HOST_DOSFSTOOLS=y
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_HOST_MTOOLS=y
+
+# Filesystem / image
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
+# BR2_TARGET_ROOTFS_TAR is not set
+BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi5/post-build.sh"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi5/post-image.sh"
+
+# Enable compressed kernel module support
+BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
+BR2_PACKAGE_KMOD_TOOLS=y
+BR2_PACKAGE_XZ=y
+BR2_PACKAGE_KMOD=y
+BR2_PACKAGE_HOST_KMOD_XZ=y