All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
@ 2021-02-16 20:11 Peter Seiderer
  2021-02-16 20:11 ` [Buildroot] [RFC/next v2 2/2] package/rpi-firmware: add option for the debug set of start/fixup boot files Peter Seiderer
                   ` (3 more replies)
  0 siblings, 4 replies; 15+ messages in thread
From: Peter Seiderer @ 2021-02-16 20:11 UTC (permalink / raw)
  To: buildroot

Try to be less smart (focused on the one target/one use-case),
instead reduce the rpi-firmware package to a selectable list
of (verbatim) installed firmware files.

- change rpi-firmware config handling from rpi-variant/rpi-flavour
  choices to bootcode.bin, pi-default/-extended/-cut-down and
  pi4-/default/-extended/-cut-down selection

- add BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE option to select installable
  config.txt file

- remove config.txt modify code/handling from raspberry post-image.sh
  script

- add different customized config.txt files to the raspberry board
  section

- change raspberry defconfigs to select appropiate rpi-firmware
  and config.txt files

- change genimage-raspberrypi4.cfg/genimage-raspberrypi4-64.cfg to
  use start4.elf and fixup4.dat

With this changes a better support for custom use-cases should
be possible, specially multi-target SD cards as suggested by
Stefan Agner ([1]).

[1] http://lists.busybox.net/pipermail/buildroot/2021-February/303318.html

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
---
Changes v1 -> v2:
  - update genimage-raspberrypi4.cfg/genimage-raspberrypi4-64.cfg to
    use start4.elf and fixup4.dat
---
 .../raspberrypi/config_0w.txt                 |  7 +-
 board/raspberrypi/config_3.txt                | 26 +++++++
 board/raspberrypi/config_3_64bit.txt          | 30 +++++++
 board/raspberrypi/config_3_qt5we.txt          | 26 +++++++
 board/raspberrypi/config_4.txt                | 26 +++++++
 board/raspberrypi/config_4_64bit.txt          | 30 +++++++
 board/raspberrypi/config_default.txt          | 23 ++++++
 .../raspberrypi/genimage-raspberrypi4-64.cfg  |  4 +-
 board/raspberrypi/genimage-raspberrypi4.cfg   |  4 +-
 board/raspberrypi/post-image.sh               | 33 --------
 configs/raspberrypi0_defconfig                |  3 +
 configs/raspberrypi0w_defconfig               |  4 +-
 configs/raspberrypi2_defconfig                |  3 +
 configs/raspberrypi3_64_defconfig             |  4 +-
 configs/raspberrypi3_defconfig                |  4 +-
 configs/raspberrypi3_qt5we_defconfig          |  4 +-
 configs/raspberrypi4_64_defconfig             |  4 +-
 configs/raspberrypi4_defconfig                |  2 +-
 configs/raspberrypi_defconfig                 |  3 +
 package/rpi-firmware/Config.in                | 78 ++++++++-----------
 package/rpi-firmware/rpi-firmware.mk          | 53 ++++++++++---
 21 files changed, 270 insertions(+), 101 deletions(-)
 rename package/rpi-firmware/config.txt => board/raspberrypi/config_0w.txt (79%)
 create mode 100644 board/raspberrypi/config_3.txt
 create mode 100644 board/raspberrypi/config_3_64bit.txt
 create mode 100644 board/raspberrypi/config_3_qt5we.txt
 create mode 100644 board/raspberrypi/config_4.txt
 create mode 100644 board/raspberrypi/config_4_64bit.txt
 create mode 100644 board/raspberrypi/config_default.txt

diff --git a/package/rpi-firmware/config.txt b/board/raspberrypi/config_0w.txt
similarity index 79%
rename from package/rpi-firmware/config.txt
rename to board/raspberrypi/config_0w.txt
index 4a92a4dd95..771b975046 100644
--- a/package/rpi-firmware/config.txt
+++ b/board/raspberrypi/config_0w.txt
@@ -1,11 +1,9 @@
 # Please note that this is only a sample, we recommend you to change it to fit
 # your needs.
-# You should override this file using a post-build script.
+# 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
 
-# We always use the same names, the real used variant is selected by
-# BR2_PACKAGE_RPI_FIRMWARE_{DEFAULT,X,CD} choice
 start_file=start.elf
 fixup_file=fixup.dat
 
@@ -23,3 +21,6 @@ disable_overscan=1
 gpu_mem_256=100
 gpu_mem_512=100
 gpu_mem_1024=100
+
+# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
+dtoverlay=miniuart-bt
diff --git a/board/raspberrypi/config_3.txt b/board/raspberrypi/config_3.txt
new file mode 100644
index 0000000000..771b975046
--- /dev/null
+++ b/board/raspberrypi/config_3.txt
@@ -0,0 +1,26 @@
+# 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
+
+start_file=start.elf
+fixup_file=fixup.dat
+
+kernel=zImage
+
+# 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
+
+# How much memory in MB to assign to the GPU on Pi models having
+# 256, 512 or 1024 MB total memory
+gpu_mem_256=100
+gpu_mem_512=100
+gpu_mem_1024=100
+
+# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
+dtoverlay=miniuart-bt
diff --git a/board/raspberrypi/config_3_64bit.txt b/board/raspberrypi/config_3_64bit.txt
new file mode 100644
index 0000000000..965f63cc80
--- /dev/null
+++ b/board/raspberrypi/config_3_64bit.txt
@@ -0,0 +1,30 @@
+# 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
+
+start_file=start.elf
+fixup_file=fixup.dat
+
+kernel=zImage
+
+# 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
+
+# How much memory in MB to assign to the GPU on Pi models having
+# 256, 512 or 1024 MB total memory
+gpu_mem_256=100
+gpu_mem_512=100
+gpu_mem_1024=100
+
+# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
+dtoverlay=miniuart-bt
+
+# enable 64bits support
+arm_64bit=1
+
diff --git a/board/raspberrypi/config_3_qt5we.txt b/board/raspberrypi/config_3_qt5we.txt
new file mode 100644
index 0000000000..752310b179
--- /dev/null
+++ b/board/raspberrypi/config_3_qt5we.txt
@@ -0,0 +1,26 @@
+# 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
+
+start_file=start.elf
+fixup_file=fixup.dat
+
+kernel=zImage
+
+# 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
+
+# How much memory in MB to assign to the GPU on Pi models having
+# 256, 512 or 1024 MB total memory
+gpu_mem_256=100
+gpu_mem_512=100
+gpu_mem_1024=200
+
+# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
+dtoverlay=miniuart-bt
diff --git a/board/raspberrypi/config_4.txt b/board/raspberrypi/config_4.txt
new file mode 100644
index 0000000000..01f60395b3
--- /dev/null
+++ b/board/raspberrypi/config_4.txt
@@ -0,0 +1,26 @@
+# 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
+
+start_file=start4.elf
+fixup_file=fixup4.dat
+
+kernel=zImage
+
+# 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
+
+# How much memory in MB to assign to the GPU on Pi models having
+# 256, 512 or 1024 MB total memory
+gpu_mem_256=100
+gpu_mem_512=100
+gpu_mem_1024=100
+
+# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
+dtoverlay=miniuart-bt
diff --git a/board/raspberrypi/config_4_64bit.txt b/board/raspberrypi/config_4_64bit.txt
new file mode 100644
index 0000000000..704efebe96
--- /dev/null
+++ b/board/raspberrypi/config_4_64bit.txt
@@ -0,0 +1,30 @@
+# 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
+
+start_file=start4.elf
+fixup_file=fixup4.dat
+
+kernel=zImage
+
+# 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
+
+# How much memory in MB to assign to the GPU on Pi models having
+# 256, 512 or 1024 MB total memory
+gpu_mem_256=100
+gpu_mem_512=100
+gpu_mem_1024=100
+
+# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
+dtoverlay=miniuart-bt
+
+# enable 64bits support
+arm_64bit=1
+
diff --git a/board/raspberrypi/config_default.txt b/board/raspberrypi/config_default.txt
new file mode 100644
index 0000000000..c09ecca1a9
--- /dev/null
+++ b/board/raspberrypi/config_default.txt
@@ -0,0 +1,23 @@
+# 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
+
+start_file=start.elf
+fixup_file=fixup.dat
+
+kernel=zImage
+
+# 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
+
+# How much memory in MB to assign to the GPU on Pi models having
+# 256, 512 or 1024 MB total memory
+gpu_mem_256=100
+gpu_mem_512=100
+gpu_mem_1024=100
diff --git a/board/raspberrypi/genimage-raspberrypi4-64.cfg b/board/raspberrypi/genimage-raspberrypi4-64.cfg
index 854e0c7e31..3c480e98f0 100644
--- a/board/raspberrypi/genimage-raspberrypi4-64.cfg
+++ b/board/raspberrypi/genimage-raspberrypi4-64.cfg
@@ -4,8 +4,8 @@ image boot.vfat {
       "bcm2711-rpi-4-b.dtb",
       "rpi-firmware/cmdline.txt",
       "rpi-firmware/config.txt",
-      "rpi-firmware/fixup.dat",
-      "rpi-firmware/start.elf",
+      "rpi-firmware/fixup4.dat",
+      "rpi-firmware/start4.elf",
       "rpi-firmware/overlays",
       "Image"
     }
diff --git a/board/raspberrypi/genimage-raspberrypi4.cfg b/board/raspberrypi/genimage-raspberrypi4.cfg
index 60e1f23bcc..4e4742f3ef 100644
--- a/board/raspberrypi/genimage-raspberrypi4.cfg
+++ b/board/raspberrypi/genimage-raspberrypi4.cfg
@@ -4,8 +4,8 @@ image boot.vfat {
       "bcm2711-rpi-4-b.dtb",
       "rpi-firmware/cmdline.txt",
       "rpi-firmware/config.txt",
-      "rpi-firmware/fixup.dat",
-      "rpi-firmware/start.elf",
+      "rpi-firmware/fixup4.dat",
+      "rpi-firmware/start4.elf",
       "rpi-firmware/overlays",
       "zImage"
     }
diff --git a/board/raspberrypi/post-image.sh b/board/raspberrypi/post-image.sh
index 9dbd98ef9b..6cad20fb9e 100755
--- a/board/raspberrypi/post-image.sh
+++ b/board/raspberrypi/post-image.sh
@@ -7,39 +7,6 @@ BOARD_NAME="$(basename ${BOARD_DIR})"
 GENIMAGE_CFG="${BOARD_DIR}/genimage-${BOARD_NAME}.cfg"
 GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"
 
-for arg in "$@"
-do
-	case "${arg}" in
-		--add-miniuart-bt-overlay)
-		if ! grep -qE '^dtoverlay=' "${BINARIES_DIR}/rpi-firmware/config.txt"; then
-			echo "Adding 'dtoverlay=miniuart-bt' to config.txt (fixes ttyAMA0 serial console)."
-			cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt"
-
-# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
-dtoverlay=miniuart-bt
-__EOF__
-		fi
-		;;
-		--aarch64)
-		# Run a 64bits kernel (armv8)
-		sed -e '/^kernel=/s,=.*,=Image,' -i "${BINARIES_DIR}/rpi-firmware/config.txt"
-		if ! grep -qE '^arm_64bit=1' "${BINARIES_DIR}/rpi-firmware/config.txt"; then
-			cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt"
-
-# enable 64bits support
-arm_64bit=1
-__EOF__
-		fi
-		;;
-		--gpu_mem_256=*|--gpu_mem_512=*|--gpu_mem_1024=*)
-		# Set GPU memory
-		gpu_mem="${arg:2}"
-		sed -e "/^${gpu_mem%=*}=/s,=.*,=${gpu_mem##*=}," -i "${BINARIES_DIR}/rpi-firmware/config.txt"
-		;;
-	esac
-
-done
-
 # Pass an empty rootpath. genimage makes a full copy of the given rootpath to
 # ${GENIMAGE_TMP}/root so passing TARGET_DIR would be a waste of time and disk
 # space. We don't rely on genimage to build the rootfs image, just to insert a
diff --git a/configs/raspberrypi0_defconfig b/configs/raspberrypi0_defconfig
index c06d6dfcb5..3f6fbbf176 100644
--- a/configs/raspberrypi0_defconfig
+++ b/configs/raspberrypi0_defconfig
@@ -20,6 +20,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2708-rpi-zero"
 BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
 
 BR2_PACKAGE_RPI_FIRMWARE=y
+BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
+BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi0/config_default.txt"
 # BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
 
 # Required tools to create the SD image
diff --git a/configs/raspberrypi0w_defconfig b/configs/raspberrypi0w_defconfig
index b54bb34ad9..82413ef327 100644
--- a/configs/raspberrypi0w_defconfig
+++ b/configs/raspberrypi0w_defconfig
@@ -16,6 +16,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2708-rpi-zero-w"
 BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
 
 BR2_PACKAGE_RPI_FIRMWARE=y
+BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
+BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi0w/config_0w.txt"
 
 # Required tools to create the SD image
 BR2_PACKAGE_HOST_DOSFSTOOLS=y
@@ -29,4 +32,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
 # BR2_TARGET_ROOTFS_TAR is not set
 BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi0w/post-build.sh"
 BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi0w/post-image.sh"
-BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay"
diff --git a/configs/raspberrypi2_defconfig b/configs/raspberrypi2_defconfig
index 5104422cb1..9a56e15f0a 100644
--- a/configs/raspberrypi2_defconfig
+++ b/configs/raspberrypi2_defconfig
@@ -22,6 +22,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2709-rpi-2-b"
 BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
 
 BR2_PACKAGE_RPI_FIRMWARE=y
+BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
+BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi/config_default.txt"
 # BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
 
 # Required tools to create the SD image
diff --git a/configs/raspberrypi3_64_defconfig b/configs/raspberrypi3_64_defconfig
index 65c1291e6a..d964058c96 100644
--- a/configs/raspberrypi3_64_defconfig
+++ b/configs/raspberrypi3_64_defconfig
@@ -21,6 +21,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2710-rpi-3-b broadcom/bcm2710-rpi-
 BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
 
 BR2_PACKAGE_RPI_FIRMWARE=y
+BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
+BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi3-64/config_3_64bit.txt"
 
 # Required tools to create the SD image
 BR2_PACKAGE_HOST_DOSFSTOOLS=y
@@ -34,4 +37,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
 # BR2_TARGET_ROOTFS_TAR is not set
 BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3-64/post-build.sh"
 BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi3-64/post-image.sh"
-BR2_ROOTFS_POST_SCRIPT_ARGS="--aarch64 --add-miniuart-bt-overlay"
diff --git a/configs/raspberrypi3_defconfig b/configs/raspberrypi3_defconfig
index 96eca54f0d..b5fa794d5c 100644
--- a/configs/raspberrypi3_defconfig
+++ b/configs/raspberrypi3_defconfig
@@ -21,6 +21,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2710-rpi-3-b bcm2710-rpi-3-b-plus bcm2710-r
 BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
 
 BR2_PACKAGE_RPI_FIRMWARE=y
+BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
+BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi3/config_3.txt"
 
 # Required tools to create the SD image
 BR2_PACKAGE_HOST_DOSFSTOOLS=y
@@ -34,4 +37,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
 # BR2_TARGET_ROOTFS_TAR is not set
 BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3/post-build.sh"
 BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi3/post-image.sh"
-BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay"
diff --git a/configs/raspberrypi3_qt5we_defconfig b/configs/raspberrypi3_qt5we_defconfig
index 8015288acb..ffdc258534 100644
--- a/configs/raspberrypi3_qt5we_defconfig
+++ b/configs/raspberrypi3_qt5we_defconfig
@@ -31,6 +31,9 @@ BR2_PACKAGE_QT5BASE_PNG=y
 BR2_PACKAGE_QT5WEBENGINE=y
 BR2_PACKAGE_QT5WEBENGINE_PROPRIETARY_CODECS=y
 BR2_PACKAGE_RPI_FIRMWARE=y
+BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
+BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi3/config_3_qt5we.txt"
 BR2_PACKAGE_RPI_USERLAND=y
 BR2_PACKAGE_CA_CERTIFICATES=y
 BR2_PACKAGE_NTP=y
@@ -48,4 +51,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="400M"
 BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
 BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3/post-build.sh"
 BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi3/post-image.sh"
-BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay --gpu_mem_1024=200"
diff --git a/configs/raspberrypi4_64_defconfig b/configs/raspberrypi4_64_defconfig
index 94ac5cf5ec..ffc34fff1a 100644
--- a/configs/raspberrypi4_64_defconfig
+++ b/configs/raspberrypi4_64_defconfig
@@ -21,6 +21,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2711-rpi-4-b"
 BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
 
 BR2_PACKAGE_RPI_FIRMWARE=y
+BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi4-64/config_4.txt"
+
 BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
 
 # Required tools to create the SD image
@@ -35,4 +38,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
 # BR2_TARGET_ROOTFS_TAR is not set
 BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi4-64/post-build.sh"
 BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi4-64/post-image.sh"
-BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay --aarch64"
diff --git a/configs/raspberrypi4_defconfig b/configs/raspberrypi4_defconfig
index c2ed5e73c5..f9a90eb1cb 100644
--- a/configs/raspberrypi4_defconfig
+++ b/configs/raspberrypi4_defconfig
@@ -22,6 +22,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
 
 BR2_PACKAGE_RPI_FIRMWARE=y
 BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi4/config_4.txt"
 
 # Required tools to create the SD image
 BR2_PACKAGE_HOST_DOSFSTOOLS=y
@@ -35,4 +36,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
 # BR2_TARGET_ROOTFS_TAR is not set
 BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi4/post-build.sh"
 BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi4/post-image.sh"
-BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay"
diff --git a/configs/raspberrypi_defconfig b/configs/raspberrypi_defconfig
index 2d3bb536bf..9c9513277b 100644
--- a/configs/raspberrypi_defconfig
+++ b/configs/raspberrypi_defconfig
@@ -21,6 +21,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2708-rpi-b bcm2708-rpi-b-plus bcm2708-rpi-c
 BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
 
 BR2_PACKAGE_RPI_FIRMWARE=y
+BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
+BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
+BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi/config_default.txt"
 # BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
 
 # Required tools to create the SD image
diff --git a/package/rpi-firmware/Config.in b/package/rpi-firmware/Config.in
index f5a25c5680..424122d654 100644
--- a/package/rpi-firmware/Config.in
+++ b/package/rpi-firmware/Config.in
@@ -11,63 +11,53 @@ config BR2_PACKAGE_RPI_FIRMWARE
 
 if BR2_PACKAGE_RPI_FIRMWARE
 
-choice
-	bool "rpi variant"
+config BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN
+	bool "rpi 0/1/2/3 bootcode.bin"
 	help
-	  The Raspberry Pi 4 introduced a slightly different naming
-	  convention and set of boot files. This option controls which
-	  format to use.
+	  The bootcode.bin for versions Zero/1/2/3 (not needed on rpi4,
+	  because it has been replaced by boot code in the onboard
+	  EEPROM).
 
 config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI
-	bool "rpi 0/1/2/3"
+	bool "rpi 0/1/2/3 (default)"
 	help
-	  The default set of files, for versions pre-4
+	  The default set of files for versions Zero/1/2/3.
 
-config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
-	bool "rpi 4"
+config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X
+	bool "rpi 0/1/2/3 (extended)"
 	help
-	  The Raspberry Pi 4 files
-endchoice
+	  The extended set of files for versions Zero/1/2/3 (additional
+	  GPU features, eg. more audio/video codecs).
 
-choice
-	bool "Firmware to boot"
-	default BR2_PACKAGE_RPI_FIRMWARE_DEFAULT
+config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD
+	bool "rpi 0/1/2/3 (cut-down)"
 	help
-	  There are three different firmware files:
-	    - the default firmware, that enables standard GPU
-	      features;
-	    - the extended firmware, that enables additional GPU
-	      features (eg. more audio/video codecs);
-	    - the cut-down firmware, for emergency situations, with
-	      only features required to boot a Linux kernel.
-
-config BR2_PACKAGE_RPI_FIRMWARE_DEFAULT
-	bool "default"
+	  The cut-down set of files for versions Zero/1/2/3 (only
+	  features required to boot a Linux kernel).
+
+config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
+	bool "rpi 4 (default)"
+	help
+	  The default set of files for versions 4 (standard GPU
+	  features).
+
+config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X
+	bool "rpi 4 (extended)"
 	help
-	  The default firmware, that enables standard GPU features.
+	  The extended set of files for versions 4 (additional GPU
+	  features, eg. more audio/video codecs).
 
-config BR2_PACKAGE_RPI_FIRMWARE_X
-	bool "extended ('x', more codecs)"
+config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD
+	bool "rpi 4 (cut-down)"
 	help
-	  The extended firmware, that enables additional GPU features
-	  (eg. more audio/video codecs).
+	  The cut-down set of files for versions 4 (only features
+	  required to boot a Linux kernel).
 
-config BR2_PACKAGE_RPI_FIRMWARE_CD
-	bool "cut-down ('cd', emergency)"
+config BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE
+	string "Patch to a file stored as boot/config.txt"
 	help
-	  The cut-down firmware, for emergency situations, with only
-	  features required to boot a Linux kernel.
-
-endchoice
-
-config BR2_PACKAGE_RPI_FIRMWARE_BOOT
-	string
-	default ""      if BR2_PACKAGE_RPI_FIRMWARE_DEFAULT && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI
-	default "4"     if BR2_PACKAGE_RPI_FIRMWARE_DEFAULT && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
-	default "_x"    if BR2_PACKAGE_RPI_FIRMWARE_X && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI
-	default "4x"    if BR2_PACKAGE_RPI_FIRMWARE_X && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
-	default "_cd"   if BR2_PACKAGE_RPI_FIRMWARE_CD && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI
-	default "4cd"   if BR2_PACKAGE_RPI_FIRMWARE_CD && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
+	  Path to a file stored as config.txt in the boot partiton
+	  of the generated SD card image.
 
 config BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS
 	bool "Install Device Tree Blobs (DTBs)"
diff --git a/package/rpi-firmware/rpi-firmware.mk b/package/rpi-firmware/rpi-firmware.mk
index f3d28ef825..a7ab8f0f14 100644
--- a/package/rpi-firmware/rpi-firmware.mk
+++ b/package/rpi-firmware/rpi-firmware.mk
@@ -10,6 +10,46 @@ RPI_FIRMWARE_LICENSE = BSD-3-Clause
 RPI_FIRMWARE_LICENSE_FILES = boot/LICENCE.broadcom
 RPI_FIRMWARE_INSTALL_IMAGES = YES
 
+ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN),y)
+RPI_FIRMWARE_FILES += bootcode.bin
+endif
+
+ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),y)
+RPI_FIRMWARE_FILES += start.elf fixup.dat
+endif
+
+ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X),y)
+RPI_FIRMWARE_FILES += startx.elf fixupx.dat
+endif
+
+ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD),y)
+RPI_FIRMWARE_FILES += start_cd.elf fixup_cd.dat
+endif
+
+ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4),y)
+RPI_FIRMWARE_FILES += start4.elf fixup4.dat
+endif
+
+ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X),y)
+RPI_FIRMWARE_FILES += start4x.elf fixup4x.dat
+endif
+
+ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD),y)
+RPI_FIRMWARE_FILES += start4cd.elf fixup4cd.dat
+endif
+
+define RPI_FIRMWARE_INSTALL_BIN
+	for firmwbin in  $(RPI_FIRMWARE_FILES); do \
+		$(INSTALL) -D -m 0644 $(@D)/boot/$${firmwbin} $(BINARIES_DIR)/rpi-firmware/$${firmwbin} || exit 1; \
+	done
+endef
+
+ifneq ($(BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE),)
+define RPI_FIRMWARE_INSTALL_CONFIG
+	$(INSTALL) -D -m 0644 $(BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE) $(BINARIES_DIR)/rpi-firmware/config.txt
+endef
+endif
+
 ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS),y)
 define RPI_FIRMWARE_INSTALL_DTB
 	$(foreach dtb,$(wildcard $(@D)/boot/*.dtb), \
@@ -41,19 +81,10 @@ define RPI_FIRMWARE_INSTALL_TARGET_CMDS
 endef
 endif # INSTALL_VCDBG
 
-ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),y)
-# bootcode.bin is not used on rpi4, because it has been replaced by boot code in the onboard EEPROM
-define RPI_FIRMWARE_INSTALL_BOOTCODE_BIN
-	$(INSTALL) -D -m 0644 $(@D)/boot/bootcode.bin $(BINARIES_DIR)/rpi-firmware/bootcode.bin
-endef
-endif
-
 define RPI_FIRMWARE_INSTALL_IMAGES_CMDS
-	$(INSTALL) -D -m 0644 package/rpi-firmware/config.txt $(BINARIES_DIR)/rpi-firmware/config.txt
 	$(INSTALL) -D -m 0644 package/rpi-firmware/cmdline.txt $(BINARIES_DIR)/rpi-firmware/cmdline.txt
-	$(INSTALL) -D -m 0644 $(@D)/boot/start$(BR2_PACKAGE_RPI_FIRMWARE_BOOT).elf $(BINARIES_DIR)/rpi-firmware/start.elf
-	$(INSTALL) -D -m 0644 $(@D)/boot/fixup$(BR2_PACKAGE_RPI_FIRMWARE_BOOT).dat $(BINARIES_DIR)/rpi-firmware/fixup.dat
-	$(RPI_FIRMWARE_INSTALL_BOOTCODE_BIN)
+	$(RPI_FIRMWARE_INSTALL_BIN)
+	$(RPI_FIRMWARE_INSTALL_CONFIG)
 	$(RPI_FIRMWARE_INSTALL_DTB)
 	$(RPI_FIRMWARE_INSTALL_DTB_OVERLAYS)
 endef
-- 
2.30.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 2/2] package/rpi-firmware: add option for the debug set of start/fixup boot files
  2021-02-16 20:11 [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling Peter Seiderer
@ 2021-02-16 20:11 ` Peter Seiderer
  2021-02-17  9:21 ` [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling Stefan Agner
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 15+ messages in thread
From: Peter Seiderer @ 2021-02-16 20:11 UTC (permalink / raw)
  To: buildroot

Add option for the debug set of start/fixup boot files.

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
---
Changes v1 -> v2:
  - new patch
---
 package/rpi-firmware/Config.in       | 10 ++++++++++
 package/rpi-firmware/rpi-firmware.mk |  8 ++++++++
 2 files changed, 18 insertions(+)

diff --git a/package/rpi-firmware/Config.in b/package/rpi-firmware/Config.in
index 424122d654..a1ad402228 100644
--- a/package/rpi-firmware/Config.in
+++ b/package/rpi-firmware/Config.in
@@ -35,6 +35,11 @@ config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD
 	  The cut-down set of files for versions Zero/1/2/3 (only
 	  features required to boot a Linux kernel).
 
+config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_DB
+	bool "rpi 0/1/2/3 (debug)"
+	help
+	  The debug set of files for versions Zero/1/2/3.
+
 config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
 	bool "rpi 4 (default)"
 	help
@@ -53,6 +58,11 @@ config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD
 	  The cut-down set of files for versions 4 (only features
 	  required to boot a Linux kernel).
 
+config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_DB
+	bool "rpi 4 (debug)"
+	help
+	  The debug set of files for versions 4.
+
 config BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE
 	string "Patch to a file stored as boot/config.txt"
 	help
diff --git a/package/rpi-firmware/rpi-firmware.mk b/package/rpi-firmware/rpi-firmware.mk
index a7ab8f0f14..34b71710d2 100644
--- a/package/rpi-firmware/rpi-firmware.mk
+++ b/package/rpi-firmware/rpi-firmware.mk
@@ -26,6 +26,10 @@ ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD),y)
 RPI_FIRMWARE_FILES += start_cd.elf fixup_cd.dat
 endif
 
+ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_DB),y)
+RPI_FIRMWARE_FILES += start_db.elf fixup_db.dat
+endif
+
 ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4),y)
 RPI_FIRMWARE_FILES += start4.elf fixup4.dat
 endif
@@ -38,6 +42,10 @@ ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD),y)
 RPI_FIRMWARE_FILES += start4cd.elf fixup4cd.dat
 endif
 
+ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_DB),y)
+RPI_FIRMWARE_FILES += start4db.elf fixup4db.dat
+endif
+
 define RPI_FIRMWARE_INSTALL_BIN
 	for firmwbin in  $(RPI_FIRMWARE_FILES); do \
 		$(INSTALL) -D -m 0644 $(@D)/boot/$${firmwbin} $(BINARIES_DIR)/rpi-firmware/$${firmwbin} || exit 1; \
-- 
2.30.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-02-16 20:11 [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling Peter Seiderer
  2021-02-16 20:11 ` [Buildroot] [RFC/next v2 2/2] package/rpi-firmware: add option for the debug set of start/fixup boot files Peter Seiderer
@ 2021-02-17  9:21 ` Stefan Agner
  2021-03-08 21:55 ` Yann E. MORIN
  2021-03-08 22:04 ` Yann E. MORIN
  3 siblings, 0 replies; 15+ messages in thread
From: Stefan Agner @ 2021-02-17  9:21 UTC (permalink / raw)
  To: buildroot

On 2021-02-16 21:11, Peter Seiderer wrote:
> Try to be less smart (focused on the one target/one use-case),
> instead reduce the rpi-firmware package to a selectable list
> of (verbatim) installed firmware files.
> 
> - change rpi-firmware config handling from rpi-variant/rpi-flavour
>   choices to bootcode.bin, pi-default/-extended/-cut-down and
>   pi4-/default/-extended/-cut-down selection
> 
> - add BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE option to select installable
>   config.txt file
> 
> - remove config.txt modify code/handling from raspberry post-image.sh
>   script
> 
> - add different customized config.txt files to the raspberry board
>   section
> 
> - change raspberry defconfigs to select appropiate rpi-firmware
>   and config.txt files
> 
> - change genimage-raspberrypi4.cfg/genimage-raspberrypi4-64.cfg to
>   use start4.elf and fixup4.dat
> 
> With this changes a better support for custom use-cases should
> be possible, specially multi-target SD cards as suggested by
> Stefan Agner ([1]).
> 
> [1] http://lists.busybox.net/pipermail/buildroot/2021-February/303318.html

Thanks for the patch! This seems to fit my use case nicely.

--
Stefan

> 
> Signed-off-by: Peter Seiderer <ps.report@gmx.net>
> ---
> Changes v1 -> v2:
>   - update genimage-raspberrypi4.cfg/genimage-raspberrypi4-64.cfg to
>     use start4.elf and fixup4.dat
> ---
>  .../raspberrypi/config_0w.txt                 |  7 +-
>  board/raspberrypi/config_3.txt                | 26 +++++++
>  board/raspberrypi/config_3_64bit.txt          | 30 +++++++
>  board/raspberrypi/config_3_qt5we.txt          | 26 +++++++
>  board/raspberrypi/config_4.txt                | 26 +++++++
>  board/raspberrypi/config_4_64bit.txt          | 30 +++++++
>  board/raspberrypi/config_default.txt          | 23 ++++++
>  .../raspberrypi/genimage-raspberrypi4-64.cfg  |  4 +-
>  board/raspberrypi/genimage-raspberrypi4.cfg   |  4 +-
>  board/raspberrypi/post-image.sh               | 33 --------
>  configs/raspberrypi0_defconfig                |  3 +
>  configs/raspberrypi0w_defconfig               |  4 +-
>  configs/raspberrypi2_defconfig                |  3 +
>  configs/raspberrypi3_64_defconfig             |  4 +-
>  configs/raspberrypi3_defconfig                |  4 +-
>  configs/raspberrypi3_qt5we_defconfig          |  4 +-
>  configs/raspberrypi4_64_defconfig             |  4 +-
>  configs/raspberrypi4_defconfig                |  2 +-
>  configs/raspberrypi_defconfig                 |  3 +
>  package/rpi-firmware/Config.in                | 78 ++++++++-----------
>  package/rpi-firmware/rpi-firmware.mk          | 53 ++++++++++---
>  21 files changed, 270 insertions(+), 101 deletions(-)
>  rename package/rpi-firmware/config.txt => board/raspberrypi/config_0w.txt (79%)
>  create mode 100644 board/raspberrypi/config_3.txt
>  create mode 100644 board/raspberrypi/config_3_64bit.txt
>  create mode 100644 board/raspberrypi/config_3_qt5we.txt
>  create mode 100644 board/raspberrypi/config_4.txt
>  create mode 100644 board/raspberrypi/config_4_64bit.txt
>  create mode 100644 board/raspberrypi/config_default.txt
> 
> diff --git a/package/rpi-firmware/config.txt b/board/raspberrypi/config_0w.txt
> similarity index 79%
> rename from package/rpi-firmware/config.txt
> rename to board/raspberrypi/config_0w.txt
> index 4a92a4dd95..771b975046 100644
> --- a/package/rpi-firmware/config.txt
> +++ b/board/raspberrypi/config_0w.txt
> @@ -1,11 +1,9 @@
>  # Please note that this is only a sample, we recommend you to change it to fit
>  # your needs.
> -# You should override this file using a post-build script.
> +# 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
>  
> -# We always use the same names, the real used variant is selected by
> -# BR2_PACKAGE_RPI_FIRMWARE_{DEFAULT,X,CD} choice
>  start_file=start.elf
>  fixup_file=fixup.dat
>  
> @@ -23,3 +21,6 @@ disable_overscan=1
>  gpu_mem_256=100
>  gpu_mem_512=100
>  gpu_mem_1024=100
> +
> +# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
> +dtoverlay=miniuart-bt
> diff --git a/board/raspberrypi/config_3.txt b/board/raspberrypi/config_3.txt
> new file mode 100644
> index 0000000000..771b975046
> --- /dev/null
> +++ b/board/raspberrypi/config_3.txt
> @@ -0,0 +1,26 @@
> +# 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
> +
> +start_file=start.elf
> +fixup_file=fixup.dat
> +
> +kernel=zImage
> +
> +# 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
> +
> +# How much memory in MB to assign to the GPU on Pi models having
> +# 256, 512 or 1024 MB total memory
> +gpu_mem_256=100
> +gpu_mem_512=100
> +gpu_mem_1024=100
> +
> +# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
> +dtoverlay=miniuart-bt
> diff --git a/board/raspberrypi/config_3_64bit.txt
> b/board/raspberrypi/config_3_64bit.txt
> new file mode 100644
> index 0000000000..965f63cc80
> --- /dev/null
> +++ b/board/raspberrypi/config_3_64bit.txt
> @@ -0,0 +1,30 @@
> +# 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
> +
> +start_file=start.elf
> +fixup_file=fixup.dat
> +
> +kernel=zImage
> +
> +# 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
> +
> +# How much memory in MB to assign to the GPU on Pi models having
> +# 256, 512 or 1024 MB total memory
> +gpu_mem_256=100
> +gpu_mem_512=100
> +gpu_mem_1024=100
> +
> +# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
> +dtoverlay=miniuart-bt
> +
> +# enable 64bits support
> +arm_64bit=1
> +
> diff --git a/board/raspberrypi/config_3_qt5we.txt
> b/board/raspberrypi/config_3_qt5we.txt
> new file mode 100644
> index 0000000000..752310b179
> --- /dev/null
> +++ b/board/raspberrypi/config_3_qt5we.txt
> @@ -0,0 +1,26 @@
> +# 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
> +
> +start_file=start.elf
> +fixup_file=fixup.dat
> +
> +kernel=zImage
> +
> +# 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
> +
> +# How much memory in MB to assign to the GPU on Pi models having
> +# 256, 512 or 1024 MB total memory
> +gpu_mem_256=100
> +gpu_mem_512=100
> +gpu_mem_1024=200
> +
> +# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
> +dtoverlay=miniuart-bt
> diff --git a/board/raspberrypi/config_4.txt b/board/raspberrypi/config_4.txt
> new file mode 100644
> index 0000000000..01f60395b3
> --- /dev/null
> +++ b/board/raspberrypi/config_4.txt
> @@ -0,0 +1,26 @@
> +# 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
> +
> +start_file=start4.elf
> +fixup_file=fixup4.dat
> +
> +kernel=zImage
> +
> +# 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
> +
> +# How much memory in MB to assign to the GPU on Pi models having
> +# 256, 512 or 1024 MB total memory
> +gpu_mem_256=100
> +gpu_mem_512=100
> +gpu_mem_1024=100
> +
> +# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
> +dtoverlay=miniuart-bt
> diff --git a/board/raspberrypi/config_4_64bit.txt
> b/board/raspberrypi/config_4_64bit.txt
> new file mode 100644
> index 0000000000..704efebe96
> --- /dev/null
> +++ b/board/raspberrypi/config_4_64bit.txt
> @@ -0,0 +1,30 @@
> +# 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
> +
> +start_file=start4.elf
> +fixup_file=fixup4.dat
> +
> +kernel=zImage
> +
> +# 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
> +
> +# How much memory in MB to assign to the GPU on Pi models having
> +# 256, 512 or 1024 MB total memory
> +gpu_mem_256=100
> +gpu_mem_512=100
> +gpu_mem_1024=100
> +
> +# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
> +dtoverlay=miniuart-bt
> +
> +# enable 64bits support
> +arm_64bit=1
> +
> diff --git a/board/raspberrypi/config_default.txt
> b/board/raspberrypi/config_default.txt
> new file mode 100644
> index 0000000000..c09ecca1a9
> --- /dev/null
> +++ b/board/raspberrypi/config_default.txt
> @@ -0,0 +1,23 @@
> +# 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
> +
> +start_file=start.elf
> +fixup_file=fixup.dat
> +
> +kernel=zImage
> +
> +# 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
> +
> +# How much memory in MB to assign to the GPU on Pi models having
> +# 256, 512 or 1024 MB total memory
> +gpu_mem_256=100
> +gpu_mem_512=100
> +gpu_mem_1024=100
> diff --git a/board/raspberrypi/genimage-raspberrypi4-64.cfg
> b/board/raspberrypi/genimage-raspberrypi4-64.cfg
> index 854e0c7e31..3c480e98f0 100644
> --- a/board/raspberrypi/genimage-raspberrypi4-64.cfg
> +++ b/board/raspberrypi/genimage-raspberrypi4-64.cfg
> @@ -4,8 +4,8 @@ image boot.vfat {
>        "bcm2711-rpi-4-b.dtb",
>        "rpi-firmware/cmdline.txt",
>        "rpi-firmware/config.txt",
> -      "rpi-firmware/fixup.dat",
> -      "rpi-firmware/start.elf",
> +      "rpi-firmware/fixup4.dat",
> +      "rpi-firmware/start4.elf",
>        "rpi-firmware/overlays",
>        "Image"
>      }
> diff --git a/board/raspberrypi/genimage-raspberrypi4.cfg
> b/board/raspberrypi/genimage-raspberrypi4.cfg
> index 60e1f23bcc..4e4742f3ef 100644
> --- a/board/raspberrypi/genimage-raspberrypi4.cfg
> +++ b/board/raspberrypi/genimage-raspberrypi4.cfg
> @@ -4,8 +4,8 @@ image boot.vfat {
>        "bcm2711-rpi-4-b.dtb",
>        "rpi-firmware/cmdline.txt",
>        "rpi-firmware/config.txt",
> -      "rpi-firmware/fixup.dat",
> -      "rpi-firmware/start.elf",
> +      "rpi-firmware/fixup4.dat",
> +      "rpi-firmware/start4.elf",
>        "rpi-firmware/overlays",
>        "zImage"
>      }
> diff --git a/board/raspberrypi/post-image.sh b/board/raspberrypi/post-image.sh
> index 9dbd98ef9b..6cad20fb9e 100755
> --- a/board/raspberrypi/post-image.sh
> +++ b/board/raspberrypi/post-image.sh
> @@ -7,39 +7,6 @@ BOARD_NAME="$(basename ${BOARD_DIR})"
>  GENIMAGE_CFG="${BOARD_DIR}/genimage-${BOARD_NAME}.cfg"
>  GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"
>  
> -for arg in "$@"
> -do
> -	case "${arg}" in
> -		--add-miniuart-bt-overlay)
> -		if ! grep -qE '^dtoverlay=' "${BINARIES_DIR}/rpi-firmware/config.txt"; then
> -			echo "Adding 'dtoverlay=miniuart-bt' to config.txt (fixes ttyAMA0
> serial console)."
> -			cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt"
> -
> -# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
> -dtoverlay=miniuart-bt
> -__EOF__
> -		fi
> -		;;
> -		--aarch64)
> -		# Run a 64bits kernel (armv8)
> -		sed -e '/^kernel=/s,=.*,=Image,' -i "${BINARIES_DIR}/rpi-firmware/config.txt"
> -		if ! grep -qE '^arm_64bit=1' "${BINARIES_DIR}/rpi-firmware/config.txt"; then
> -			cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt"
> -
> -# enable 64bits support
> -arm_64bit=1
> -__EOF__
> -		fi
> -		;;
> -		--gpu_mem_256=*|--gpu_mem_512=*|--gpu_mem_1024=*)
> -		# Set GPU memory
> -		gpu_mem="${arg:2}"
> -		sed -e "/^${gpu_mem%=*}=/s,=.*,=${gpu_mem##*=}," -i
> "${BINARIES_DIR}/rpi-firmware/config.txt"
> -		;;
> -	esac
> -
> -done
> -
>  # Pass an empty rootpath. genimage makes a full copy of the given rootpath to
>  # ${GENIMAGE_TMP}/root so passing TARGET_DIR would be a waste of time and disk
>  # space. We don't rely on genimage to build the rootfs image, just to insert a
> diff --git a/configs/raspberrypi0_defconfig b/configs/raspberrypi0_defconfig
> index c06d6dfcb5..3f6fbbf176 100644
> --- a/configs/raspberrypi0_defconfig
> +++ b/configs/raspberrypi0_defconfig
> @@ -20,6 +20,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2708-rpi-zero"
>  BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
>  
>  BR2_PACKAGE_RPI_FIRMWARE=y
> +BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
> +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
> +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi0/config_default.txt"
>  # BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
>  
>  # Required tools to create the SD image
> diff --git a/configs/raspberrypi0w_defconfig b/configs/raspberrypi0w_defconfig
> index b54bb34ad9..82413ef327 100644
> --- a/configs/raspberrypi0w_defconfig
> +++ b/configs/raspberrypi0w_defconfig
> @@ -16,6 +16,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2708-rpi-zero-w"
>  BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
>  
>  BR2_PACKAGE_RPI_FIRMWARE=y
> +BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
> +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
> +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi0w/config_0w.txt"
>  
>  # Required tools to create the SD image
>  BR2_PACKAGE_HOST_DOSFSTOOLS=y
> @@ -29,4 +32,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
>  # BR2_TARGET_ROOTFS_TAR is not set
>  BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi0w/post-build.sh"
>  BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi0w/post-image.sh"
> -BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay"
> diff --git a/configs/raspberrypi2_defconfig b/configs/raspberrypi2_defconfig
> index 5104422cb1..9a56e15f0a 100644
> --- a/configs/raspberrypi2_defconfig
> +++ b/configs/raspberrypi2_defconfig
> @@ -22,6 +22,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2709-rpi-2-b"
>  BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
>  
>  BR2_PACKAGE_RPI_FIRMWARE=y
> +BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
> +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
> +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi/config_default.txt"
>  # BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
>  
>  # Required tools to create the SD image
> diff --git a/configs/raspberrypi3_64_defconfig
> b/configs/raspberrypi3_64_defconfig
> index 65c1291e6a..d964058c96 100644
> --- a/configs/raspberrypi3_64_defconfig
> +++ b/configs/raspberrypi3_64_defconfig
> @@ -21,6 +21,9 @@
> BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2710-rpi-3-b
> broadcom/bcm2710-rpi-
>  BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
>  
>  BR2_PACKAGE_RPI_FIRMWARE=y
> +BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
> +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
> +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi3-64/config_3_64bit.txt"
>  
>  # Required tools to create the SD image
>  BR2_PACKAGE_HOST_DOSFSTOOLS=y
> @@ -34,4 +37,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
>  # BR2_TARGET_ROOTFS_TAR is not set
>  BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3-64/post-build.sh"
>  BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi3-64/post-image.sh"
> -BR2_ROOTFS_POST_SCRIPT_ARGS="--aarch64 --add-miniuart-bt-overlay"
> diff --git a/configs/raspberrypi3_defconfig b/configs/raspberrypi3_defconfig
> index 96eca54f0d..b5fa794d5c 100644
> --- a/configs/raspberrypi3_defconfig
> +++ b/configs/raspberrypi3_defconfig
> @@ -21,6 +21,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2710-rpi-3-b
> bcm2710-rpi-3-b-plus bcm2710-r
>  BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
>  
>  BR2_PACKAGE_RPI_FIRMWARE=y
> +BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
> +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
> +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi3/config_3.txt"
>  
>  # Required tools to create the SD image
>  BR2_PACKAGE_HOST_DOSFSTOOLS=y
> @@ -34,4 +37,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
>  # BR2_TARGET_ROOTFS_TAR is not set
>  BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3/post-build.sh"
>  BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi3/post-image.sh"
> -BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay"
> diff --git a/configs/raspberrypi3_qt5we_defconfig
> b/configs/raspberrypi3_qt5we_defconfig
> index 8015288acb..ffdc258534 100644
> --- a/configs/raspberrypi3_qt5we_defconfig
> +++ b/configs/raspberrypi3_qt5we_defconfig
> @@ -31,6 +31,9 @@ BR2_PACKAGE_QT5BASE_PNG=y
>  BR2_PACKAGE_QT5WEBENGINE=y
>  BR2_PACKAGE_QT5WEBENGINE_PROPRIETARY_CODECS=y
>  BR2_PACKAGE_RPI_FIRMWARE=y
> +BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
> +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
> +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi3/config_3_qt5we.txt"
>  BR2_PACKAGE_RPI_USERLAND=y
>  BR2_PACKAGE_CA_CERTIFICATES=y
>  BR2_PACKAGE_NTP=y
> @@ -48,4 +51,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="400M"
>  BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
>  BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3/post-build.sh"
>  BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi3/post-image.sh"
> -BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay --gpu_mem_1024=200"
> diff --git a/configs/raspberrypi4_64_defconfig
> b/configs/raspberrypi4_64_defconfig
> index 94ac5cf5ec..ffc34fff1a 100644
> --- a/configs/raspberrypi4_64_defconfig
> +++ b/configs/raspberrypi4_64_defconfig
> @@ -21,6 +21,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2711-rpi-4-b"
>  BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
>  
>  BR2_PACKAGE_RPI_FIRMWARE=y
> +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
> +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi4-64/config_4.txt"
> +
>  BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
>  
>  # Required tools to create the SD image
> @@ -35,4 +38,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
>  # BR2_TARGET_ROOTFS_TAR is not set
>  BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi4-64/post-build.sh"
>  BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi4-64/post-image.sh"
> -BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay --aarch64"
> diff --git a/configs/raspberrypi4_defconfig b/configs/raspberrypi4_defconfig
> index c2ed5e73c5..f9a90eb1cb 100644
> --- a/configs/raspberrypi4_defconfig
> +++ b/configs/raspberrypi4_defconfig
> @@ -22,6 +22,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
>  
>  BR2_PACKAGE_RPI_FIRMWARE=y
>  BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
> +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi4/config_4.txt"
>  
>  # Required tools to create the SD image
>  BR2_PACKAGE_HOST_DOSFSTOOLS=y
> @@ -35,4 +36,3 @@ BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
>  # BR2_TARGET_ROOTFS_TAR is not set
>  BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi4/post-build.sh"
>  BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi4/post-image.sh"
> -BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay"
> diff --git a/configs/raspberrypi_defconfig b/configs/raspberrypi_defconfig
> index 2d3bb536bf..9c9513277b 100644
> --- a/configs/raspberrypi_defconfig
> +++ b/configs/raspberrypi_defconfig
> @@ -21,6 +21,9 @@ BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2708-rpi-b
> bcm2708-rpi-b-plus bcm2708-rpi-c
>  BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
>  
>  BR2_PACKAGE_RPI_FIRMWARE=y
> +BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y
> +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y
> +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi/config_default.txt"
>  # BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
>  
>  # Required tools to create the SD image
> diff --git a/package/rpi-firmware/Config.in b/package/rpi-firmware/Config.in
> index f5a25c5680..424122d654 100644
> --- a/package/rpi-firmware/Config.in
> +++ b/package/rpi-firmware/Config.in
> @@ -11,63 +11,53 @@ config BR2_PACKAGE_RPI_FIRMWARE
>  
>  if BR2_PACKAGE_RPI_FIRMWARE
>  
> -choice
> -	bool "rpi variant"
> +config BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN
> +	bool "rpi 0/1/2/3 bootcode.bin"
>  	help
> -	  The Raspberry Pi 4 introduced a slightly different naming
> -	  convention and set of boot files. This option controls which
> -	  format to use.
> +	  The bootcode.bin for versions Zero/1/2/3 (not needed on rpi4,
> +	  because it has been replaced by boot code in the onboard
> +	  EEPROM).
>  
>  config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI
> -	bool "rpi 0/1/2/3"
> +	bool "rpi 0/1/2/3 (default)"
>  	help
> -	  The default set of files, for versions pre-4
> +	  The default set of files for versions Zero/1/2/3.
>  
> -config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
> -	bool "rpi 4"
> +config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X
> +	bool "rpi 0/1/2/3 (extended)"
>  	help
> -	  The Raspberry Pi 4 files
> -endchoice
> +	  The extended set of files for versions Zero/1/2/3 (additional
> +	  GPU features, eg. more audio/video codecs).
>  
> -choice
> -	bool "Firmware to boot"
> -	default BR2_PACKAGE_RPI_FIRMWARE_DEFAULT
> +config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD
> +	bool "rpi 0/1/2/3 (cut-down)"
>  	help
> -	  There are three different firmware files:
> -	    - the default firmware, that enables standard GPU
> -	      features;
> -	    - the extended firmware, that enables additional GPU
> -	      features (eg. more audio/video codecs);
> -	    - the cut-down firmware, for emergency situations, with
> -	      only features required to boot a Linux kernel.
> -
> -config BR2_PACKAGE_RPI_FIRMWARE_DEFAULT
> -	bool "default"
> +	  The cut-down set of files for versions Zero/1/2/3 (only
> +	  features required to boot a Linux kernel).
> +
> +config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
> +	bool "rpi 4 (default)"
> +	help
> +	  The default set of files for versions 4 (standard GPU
> +	  features).
> +
> +config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X
> +	bool "rpi 4 (extended)"
>  	help
> -	  The default firmware, that enables standard GPU features.
> +	  The extended set of files for versions 4 (additional GPU
> +	  features, eg. more audio/video codecs).
>  
> -config BR2_PACKAGE_RPI_FIRMWARE_X
> -	bool "extended ('x', more codecs)"
> +config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD
> +	bool "rpi 4 (cut-down)"
>  	help
> -	  The extended firmware, that enables additional GPU features
> -	  (eg. more audio/video codecs).
> +	  The cut-down set of files for versions 4 (only features
> +	  required to boot a Linux kernel).
>  
> -config BR2_PACKAGE_RPI_FIRMWARE_CD
> -	bool "cut-down ('cd', emergency)"
> +config BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE
> +	string "Patch to a file stored as boot/config.txt"
>  	help
> -	  The cut-down firmware, for emergency situations, with only
> -	  features required to boot a Linux kernel.
> -
> -endchoice
> -
> -config BR2_PACKAGE_RPI_FIRMWARE_BOOT
> -	string
> -	default ""      if BR2_PACKAGE_RPI_FIRMWARE_DEFAULT &&
> BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI
> -	default "4"     if BR2_PACKAGE_RPI_FIRMWARE_DEFAULT &&
> BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
> -	default "_x"    if BR2_PACKAGE_RPI_FIRMWARE_X &&
> BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI
> -	default "4x"    if BR2_PACKAGE_RPI_FIRMWARE_X &&
> BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
> -	default "_cd"   if BR2_PACKAGE_RPI_FIRMWARE_CD &&
> BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI
> -	default "4cd"   if BR2_PACKAGE_RPI_FIRMWARE_CD &&
> BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4
> +	  Path to a file stored as config.txt in the boot partiton
> +	  of the generated SD card image.
>  
>  config BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS
>  	bool "Install Device Tree Blobs (DTBs)"
> diff --git a/package/rpi-firmware/rpi-firmware.mk
> b/package/rpi-firmware/rpi-firmware.mk
> index f3d28ef825..a7ab8f0f14 100644
> --- a/package/rpi-firmware/rpi-firmware.mk
> +++ b/package/rpi-firmware/rpi-firmware.mk
> @@ -10,6 +10,46 @@ RPI_FIRMWARE_LICENSE = BSD-3-Clause
>  RPI_FIRMWARE_LICENSE_FILES = boot/LICENCE.broadcom
>  RPI_FIRMWARE_INSTALL_IMAGES = YES
>  
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN),y)
> +RPI_FIRMWARE_FILES += bootcode.bin
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),y)
> +RPI_FIRMWARE_FILES += start.elf fixup.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X),y)
> +RPI_FIRMWARE_FILES += startx.elf fixupx.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD),y)
> +RPI_FIRMWARE_FILES += start_cd.elf fixup_cd.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4),y)
> +RPI_FIRMWARE_FILES += start4.elf fixup4.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X),y)
> +RPI_FIRMWARE_FILES += start4x.elf fixup4x.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD),y)
> +RPI_FIRMWARE_FILES += start4cd.elf fixup4cd.dat
> +endif
> +
> +define RPI_FIRMWARE_INSTALL_BIN
> +	for firmwbin in  $(RPI_FIRMWARE_FILES); do \
> +		$(INSTALL) -D -m 0644 $(@D)/boot/$${firmwbin}
> $(BINARIES_DIR)/rpi-firmware/$${firmwbin} || exit 1; \
> +	done
> +endef
> +
> +ifneq ($(BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE),)
> +define RPI_FIRMWARE_INSTALL_CONFIG
> +	$(INSTALL) -D -m 0644 $(BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE)
> $(BINARIES_DIR)/rpi-firmware/config.txt
> +endef
> +endif
> +
>  ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS),y)
>  define RPI_FIRMWARE_INSTALL_DTB
>  	$(foreach dtb,$(wildcard $(@D)/boot/*.dtb), \
> @@ -41,19 +81,10 @@ define RPI_FIRMWARE_INSTALL_TARGET_CMDS
>  endef
>  endif # INSTALL_VCDBG
>  
> -ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),y)
> -# bootcode.bin is not used on rpi4, because it has been replaced by
> boot code in the onboard EEPROM
> -define RPI_FIRMWARE_INSTALL_BOOTCODE_BIN
> -	$(INSTALL) -D -m 0644 $(@D)/boot/bootcode.bin
> $(BINARIES_DIR)/rpi-firmware/bootcode.bin
> -endef
> -endif
> -
>  define RPI_FIRMWARE_INSTALL_IMAGES_CMDS
> -	$(INSTALL) -D -m 0644 package/rpi-firmware/config.txt
> $(BINARIES_DIR)/rpi-firmware/config.txt
>  	$(INSTALL) -D -m 0644 package/rpi-firmware/cmdline.txt
> $(BINARIES_DIR)/rpi-firmware/cmdline.txt
> -	$(INSTALL) -D -m 0644
> $(@D)/boot/start$(BR2_PACKAGE_RPI_FIRMWARE_BOOT).elf
> $(BINARIES_DIR)/rpi-firmware/start.elf
> -	$(INSTALL) -D -m 0644
> $(@D)/boot/fixup$(BR2_PACKAGE_RPI_FIRMWARE_BOOT).dat
> $(BINARIES_DIR)/rpi-firmware/fixup.dat
> -	$(RPI_FIRMWARE_INSTALL_BOOTCODE_BIN)
> +	$(RPI_FIRMWARE_INSTALL_BIN)
> +	$(RPI_FIRMWARE_INSTALL_CONFIG)
>  	$(RPI_FIRMWARE_INSTALL_DTB)
>  	$(RPI_FIRMWARE_INSTALL_DTB_OVERLAYS)
>  endef

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-02-16 20:11 [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling Peter Seiderer
  2021-02-16 20:11 ` [Buildroot] [RFC/next v2 2/2] package/rpi-firmware: add option for the debug set of start/fixup boot files Peter Seiderer
  2021-02-17  9:21 ` [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling Stefan Agner
@ 2021-03-08 21:55 ` Yann E. MORIN
  2021-03-08 22:14   ` Peter Seiderer
  2021-03-08 22:04 ` Yann E. MORIN
  3 siblings, 1 reply; 15+ messages in thread
From: Yann E. MORIN @ 2021-03-08 21:55 UTC (permalink / raw)
  To: buildroot

Peter, All,

On 2021-02-16 21:11 +0100, Peter Seiderer spake thusly:
> Try to be less smart (focused on the one target/one use-case),
> instead reduce the rpi-firmware package to a selectable list
> of (verbatim) installed firmware files.
> 
> - change rpi-firmware config handling from rpi-variant/rpi-flavour
>   choices to bootcode.bin, pi-default/-extended/-cut-down and
>   pi4-/default/-extended/-cut-down selection
> 
> - add BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE option to select installable
>   config.txt file
> 
> - remove config.txt modify code/handling from raspberry post-image.sh
>   script
> 
> - add different customized config.txt files to the raspberry board
>   section
> 
> - change raspberry defconfigs to select appropiate rpi-firmware
>   and config.txt files
> 
> - change genimage-raspberrypi4.cfg/genimage-raspberrypi4-64.cfg to
>   use start4.elf and fixup4.dat
> 
> With this changes a better support for custom use-cases should
> be possible, specially multi-target SD cards as suggested by
> Stefan Agner ([1]).
> 
> [1] http://lists.busybox.net/pipermail/buildroot/2021-February/303318.html
> 
> Signed-off-by: Peter Seiderer <ps.report@gmx.net>

So I have started looking at this patch, and although I think it is
going in the right direction, there are two things I am not very happy
with...

I'm not saying they would be definite blockers, just that I'd like we
think a bit more about it.

So, the first thing that bugs me, are all the varions config.txt files
that are mostly identical, except of a few tweaks:

  - dtoverlay=miniuart-bt or not
  - arm_64bit=1 or not

And the arm_64bit=1 can be automatically added when Buildroot is
configured for BR2_aarch64=y anyway.

And of course, a single outlier, the qt5we example, that has
gpu_mem_1024=200...

Still, that makes me nervous to mostly duplicate all those config.txt...

The second thing leaves me thinking is the new config option that
points to the config.txt to use. My first reaction was 'hell-no, this
belongs to the post-image script and we should have it passed with
BR2_ROOTFS_POST_SCRIPT_ARGS="board/rpiXXX/config_XXX.txt".'

But them this means that the rpi post-image script diverges from the
others; the few others I've had a look at are just callinggenimage
without amy preparation whatsoever. The rpi one is already diverging, as
it creates a temporary empty rootpath (commit ee47fea5781) and currently
has a few options that none of the others have.

Getting rid of the existing options --miniuart, --aarch64, et al. is a
nice thing, because it helps get it more inline with the others...

But still, I am not too fond of this new BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE
option...

And really, both issues are really just me wondering if we can't do
better...

So, let's keep the qt5 example aside, and see what we can do. What if
we'd go with the following:

  - keep a single, generic config.txt in rpi-firmware, and install that,

  - if BR2_aarch64=y, add arm_64bit=1

  - add an option to rpi-firmware:

    config BR2_PKG_RPI_FW_DTOVERLAY_LIST
        string "DT overlays to load"
        depends on BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS
        help
          Space-separated list of DT overlays to be loaded from config.txt.

          For example, miniuart-bt on rpi0w to restore the serial console.

    and if this option is not empty, construct the list of dtoverlay and
    add it to config.txt.

  - eventually, adapt the defconfigs with that list of dtoverlays

Thoughts?

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-02-16 20:11 [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling Peter Seiderer
                   ` (2 preceding siblings ...)
  2021-03-08 21:55 ` Yann E. MORIN
@ 2021-03-08 22:04 ` Yann E. MORIN
  2021-03-09 20:25   ` Peter Seiderer
  3 siblings, 1 reply; 15+ messages in thread
From: Yann E. MORIN @ 2021-03-08 22:04 UTC (permalink / raw)
  To: buildroot

Peter, All,

Second part of the review... ;-)

On 2021-02-16 21:11 +0100, Peter Seiderer spake thusly:
> Try to be less smart (focused on the one target/one use-case),
> instead reduce the rpi-firmware package to a selectable list
> of (verbatim) installed firmware files.
> 
> - change rpi-firmware config handling from rpi-variant/rpi-flavour
>   choices to bootcode.bin, pi-default/-extended/-cut-down and
>   pi4-/default/-extended/-cut-down selection
> 
> - add BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE option to select installable
>   config.txt file
> 
> - remove config.txt modify code/handling from raspberry post-image.sh
>   script
> 
> - add different customized config.txt files to the raspberry board
>   section
> 
> - change raspberry defconfigs to select appropiate rpi-firmware
>   and config.txt files
> 
> - change genimage-raspberrypi4.cfg/genimage-raspberrypi4-64.cfg to
>   use start4.elf and fixup4.dat
> 
> With this changes a better support for custom use-cases should
> be possible, specially multi-target SD cards as suggested by
> Stefan Agner ([1]).
> 
> [1] http://lists.busybox.net/pipermail/buildroot/2021-February/303318.html
> 
> Signed-off-by: Peter Seiderer <ps.report@gmx.net>
[--SNIP--]
> diff --git a/package/rpi-firmware/rpi-firmware.mk b/package/rpi-firmware/rpi-firmware.mk
> index f3d28ef825..a7ab8f0f14 100644
> --- a/package/rpi-firmware/rpi-firmware.mk
> +++ b/package/rpi-firmware/rpi-firmware.mk
> @@ -10,6 +10,46 @@ RPI_FIRMWARE_LICENSE = BSD-3-Clause
>  RPI_FIRMWARE_LICENSE_FILES = boot/LICENCE.broadcom
>  RPI_FIRMWARE_INSTALL_IMAGES = YES
>  
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN),y)
> +RPI_FIRMWARE_FILES += bootcode.bin
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),y)
> +RPI_FIRMWARE_FILES += start.elf fixup.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X),y)
> +RPI_FIRMWARE_FILES += startx.elf fixupx.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD),y)
> +RPI_FIRMWARE_FILES += start_cd.elf fixup_cd.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4),y)
> +RPI_FIRMWARE_FILES += start4.elf fixup4.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X),y)
> +RPI_FIRMWARE_FILES += start4x.elf fixup4x.dat
> +endif
> +
> +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD),y)
> +RPI_FIRMWARE_FILES += start4cd.elf fixup4cd.dat
> +endif

What about:

    RPI_FIRMWARE_FILES = \
        $(if $(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN),bootcode.bin) \
        $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),start.elf fixup.dat) \
        $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X),startx.elf fixupx.dat) \
        $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD),start_cd.elf fixup_cd.dat) \
        $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4),start4.elf fixup4.dat) \
        $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X),start4x.elf fixup4x.dat) \
        $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD),start4cd.elf fixup4cd.dat)

Or alternatively:

    RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN) += bootcode.bin
    RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI) += start.elf fixup.dat
    RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X) += startx.elf fixupx.dat
    RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD) += start_cd.elf fixup_cd.dat
    RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4) += start4.elf fixup4.dat
    RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X) += start4x.elf fixup4x.dat
    RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD) += start4cd.elf fixup4cd.dat

    define RPI_FIRMWARE_INSTALL_BIN
        $(foreach f,$(RPI_FIRMWARE_FILES_y),
            $(INSTALL) -D -m 0644 $(@D)/$(f) $(BINARIES_DIR)/rpi-firmware/$(f)
        )
    endef

> +define RPI_FIRMWARE_INSTALL_BIN
> +	for firmwbin in  $(RPI_FIRMWARE_FILES); do \
> +		$(INSTALL) -D -m 0644 $(@D)/boot/$${firmwbin} $(BINARIES_DIR)/rpi-firmware/$${firmwbin} || exit 1; \
> +	done

Use a make-level $(foreach) loop rather than a shell loop (see example
above).

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-08 21:55 ` Yann E. MORIN
@ 2021-03-08 22:14   ` Peter Seiderer
  2021-03-08 22:27     ` Yann E. MORIN
  0 siblings, 1 reply; 15+ messages in thread
From: Peter Seiderer @ 2021-03-08 22:14 UTC (permalink / raw)
  To: buildroot

Hello Yann,

On Mon, 8 Mar 2021 22:55:41 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:

> Peter, All,
>
> On 2021-02-16 21:11 +0100, Peter Seiderer spake thusly:
> > Try to be less smart (focused on the one target/one use-case),
> > instead reduce the rpi-firmware package to a selectable list
> > of (verbatim) installed firmware files.
> >
> > - change rpi-firmware config handling from rpi-variant/rpi-flavour
> >   choices to bootcode.bin, pi-default/-extended/-cut-down and
> >   pi4-/default/-extended/-cut-down selection
> >
> > - add BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE option to select installable
> >   config.txt file
> >
> > - remove config.txt modify code/handling from raspberry post-image.sh
> >   script
> >
> > - add different customized config.txt files to the raspberry board
> >   section
> >
> > - change raspberry defconfigs to select appropiate rpi-firmware
> >   and config.txt files
> >
> > - change genimage-raspberrypi4.cfg/genimage-raspberrypi4-64.cfg to
> >   use start4.elf and fixup4.dat
> >
> > With this changes a better support for custom use-cases should
> > be possible, specially multi-target SD cards as suggested by
> > Stefan Agner ([1]).
> >
> > [1] http://lists.busybox.net/pipermail/buildroot/2021-February/303318.html
> >
> > Signed-off-by: Peter Seiderer <ps.report@gmx.net>
>
> So I have started looking at this patch, and although I think it is
> going in the right direction, there are two things I am not very happy
> with...
>
> I'm not saying they would be definite blockers, just that I'd like we
> think a bit more about it.
>
> So, the first thing that bugs me, are all the varions config.txt files
> that are mostly identical, except of a few tweaks:
>
>   - dtoverlay=miniuart-bt or not
>   - arm_64bit=1 or not
>
> And the arm_64bit=1 can be automatically added when Buildroot is
> configured for BR2_aarch64=y anyway.
>
> And of course, a single outlier, the qt5we example, that has
> gpu_mem_1024=200...
>
> Still, that makes me nervous to mostly duplicate all those config.txt...
>
> The second thing leaves me thinking is the new config option that
> points to the config.txt to use. My first reaction was 'hell-no, this
> belongs to the post-image script and we should have it passed with
> BR2_ROOTFS_POST_SCRIPT_ARGS="board/rpiXXX/config_XXX.txt".'
>
> But them this means that the rpi post-image script diverges from the
> others; the few others I've had a look at are just callinggenimage
> without amy preparation whatsoever. The rpi one is already diverging, as
> it creates a temporary empty rootpath (commit ee47fea5781) and currently
> has a few options that none of the others have.
>
> Getting rid of the existing options --miniuart, --aarch64, et al. is a
> nice thing, because it helps get it more inline with the others...
>
> But still, I am not too fond of this new BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE
> option...
>
> And really, both issues are really just me wondering if we can't do
> better...
>
> So, let's keep the qt5 example aside, and see what we can do. What if
> we'd go with the following:
>
>   - keep a single, generic config.txt in rpi-firmware, and install that,
>
>   - if BR2_aarch64=y, add arm_64bit=1
>
>   - add an option to rpi-firmware:
>
>     config BR2_PKG_RPI_FW_DTOVERLAY_LIST
>         string "DT overlays to load"
>         depends on BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS
>         help
>           Space-separated list of DT overlays to be loaded from config.txt.
>
>           For example, miniuart-bt on rpi0w to restore the serial console.
>
>     and if this option is not empty, construct the list of dtoverlay and
>     add it to config.txt.
>
>   - eventually, adapt the defconfigs with that list of dtoverlays

...but back to the direction of trying to being smart..., which can work for
90% of the buildroot defconfig cases, but will not work for the rest of the
buildroot ones (one at the moment) and not for customized ones (none dtoverlay
extensions, multi-bootable SD-Cards, ...)...

Regards,
Peter

>
> Thoughts?
>
> Regards,
> Yann E. MORIN.
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-08 22:14   ` Peter Seiderer
@ 2021-03-08 22:27     ` Yann E. MORIN
  2021-03-09 20:32       ` Peter Seiderer
  0 siblings, 1 reply; 15+ messages in thread
From: Yann E. MORIN @ 2021-03-08 22:27 UTC (permalink / raw)
  To: buildroot

Peter, All,

On 2021-03-08 23:14 +0100, Peter Seiderer spake thusly:
> On Mon, 8 Mar 2021 22:55:41 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > On 2021-02-16 21:11 +0100, Peter Seiderer spake thusly:
> > > Try to be less smart (focused on the one target/one use-case),
> > > instead reduce the rpi-firmware package to a selectable list
> > > of (verbatim) installed firmware files.
[--SNIP--]
> > So, let's keep the qt5 example aside, and see what we can do. What if
> > we'd go with the following:
> >
> >   - keep a single, generic config.txt in rpi-firmware, and install that,
> >
> >   - if BR2_aarch64=y, add arm_64bit=1
> >
> >   - add an option to rpi-firmware:
> >
> >     config BR2_PKG_RPI_FW_DTOVERLAY_LIST
> >         string "DT overlays to load"
> >         depends on BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS
> >         help
> >           Space-separated list of DT overlays to be loaded from config.txt.
> >
> >           For example, miniuart-bt on rpi0w to restore the serial console.
> >
> >     and if this option is not empty, construct the list of dtoverlay and
> >     add it to config.txt.
> >
> >   - eventually, adapt the defconfigs with that list of dtoverlays
> 
> ...but back to the direction of trying to being smart..., which can work for
> 90% of the buildroot defconfig cases, but will not work for the rest of the
> buildroot ones (one at the moment) and not for customized ones (none dtoverlay
> extensions, multi-bootable SD-Cards, ...)...

I would think quite the opposite, in fact: with an otion, it's up to the
user to specify what DT overlays to load; this is more flexible than a
config.txt file.

For fixup.dat and start/elf, we'd still use your changes, of course.

And for arm_64bit=1 this is really a non-option: if we build for 64-bit
then we *must* have arm_64bit=1, while if we build for 32-bit, the we
*must not* have arm_64bit=1.

The only case that this indeed does not cover, is the case where the
user wants to pas their completely customsied config.txt that totally
differs from ours. In that case, they can still do so with a post-build
script that copies their config.txt over ours in BINARIES_DIR.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-08 22:04 ` Yann E. MORIN
@ 2021-03-09 20:25   ` Peter Seiderer
  2021-03-09 20:33     ` Yann E. MORIN
  0 siblings, 1 reply; 15+ messages in thread
From: Peter Seiderer @ 2021-03-09 20:25 UTC (permalink / raw)
  To: buildroot

Hello Yann,

On Mon, 8 Mar 2021 23:04:31 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:

> Peter, All,
>
> Second part of the review... ;-)
>
> On 2021-02-16 21:11 +0100, Peter Seiderer spake thusly:
> > Try to be less smart (focused on the one target/one use-case),
> > instead reduce the rpi-firmware package to a selectable list
> > of (verbatim) installed firmware files.
> >
> > - change rpi-firmware config handling from rpi-variant/rpi-flavour
> >   choices to bootcode.bin, pi-default/-extended/-cut-down and
> >   pi4-/default/-extended/-cut-down selection
> >
> > - add BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE option to select installable
> >   config.txt file
> >
> > - remove config.txt modify code/handling from raspberry post-image.sh
> >   script
> >
> > - add different customized config.txt files to the raspberry board
> >   section
> >
> > - change raspberry defconfigs to select appropiate rpi-firmware
> >   and config.txt files
> >
> > - change genimage-raspberrypi4.cfg/genimage-raspberrypi4-64.cfg to
> >   use start4.elf and fixup4.dat
> >
> > With this changes a better support for custom use-cases should
> > be possible, specially multi-target SD cards as suggested by
> > Stefan Agner ([1]).
> >
> > [1] http://lists.busybox.net/pipermail/buildroot/2021-February/303318.html
> >
> > Signed-off-by: Peter Seiderer <ps.report@gmx.net>
> [--SNIP--]
> > diff --git a/package/rpi-firmware/rpi-firmware.mk b/package/rpi-firmware/rpi-firmware.mk
> > index f3d28ef825..a7ab8f0f14 100644
> > --- a/package/rpi-firmware/rpi-firmware.mk
> > +++ b/package/rpi-firmware/rpi-firmware.mk
> > @@ -10,6 +10,46 @@ RPI_FIRMWARE_LICENSE = BSD-3-Clause
> >  RPI_FIRMWARE_LICENSE_FILES = boot/LICENCE.broadcom
> >  RPI_FIRMWARE_INSTALL_IMAGES = YES
> >
> > +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN),y)
> > +RPI_FIRMWARE_FILES += bootcode.bin
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),y)
> > +RPI_FIRMWARE_FILES += start.elf fixup.dat
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X),y)
> > +RPI_FIRMWARE_FILES += startx.elf fixupx.dat
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD),y)
> > +RPI_FIRMWARE_FILES += start_cd.elf fixup_cd.dat
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4),y)
> > +RPI_FIRMWARE_FILES += start4.elf fixup4.dat
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X),y)
> > +RPI_FIRMWARE_FILES += start4x.elf fixup4x.dat
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD),y)
> > +RPI_FIRMWARE_FILES += start4cd.elf fixup4cd.dat
> > +endif
>
> What about:
>
>     RPI_FIRMWARE_FILES = \
>         $(if $(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN),bootcode.bin) \
>         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),start.elf fixup.dat) \
>         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X),startx.elf fixupx.dat) \
>         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD),start_cd.elf fixup_cd.dat) \
>         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4),start4.elf fixup4.dat) \
>         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X),start4x.elf fixup4x.dat) \
>         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD),start4cd.elf fixup4cd.dat)
>
> Or alternatively:
>
>     RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN) += bootcode.bin
>     RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI) += start.elf fixup.dat
>     RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X) += startx.elf fixupx.dat
>     RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD) += start_cd.elf fixup_cd.dat
>     RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4) += start4.elf fixup4.dat
>     RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X) += start4x.elf fixup4x.dat
>     RPI_FIRMWARE_FILES_$(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD) += start4cd.elf fixup4cd.dat

Unsettled which of the three versions is the nicest one, seems a matter of
taste (and a matter of trading more lines against long lines), and personal not
much of a friend of the '.._y' pattern...

>
>     define RPI_FIRMWARE_INSTALL_BIN
>         $(foreach f,$(RPI_FIRMWARE_FILES_y),
>             $(INSTALL) -D -m 0644 $(@D)/$(f) $(BINARIES_DIR)/rpi-firmware/$(f)
>         )
>     endef
>
> > +define RPI_FIRMWARE_INSTALL_BIN
> > +	for firmwbin in  $(RPI_FIRMWARE_FILES); do \
> > +		$(INSTALL) -D -m 0644 $(@D)/boot/$${firmwbin} $(BINARIES_DIR)/rpi-firmware/$${firmwbin} || exit 1; \
> > +	done
>
> Use a make-level $(foreach) loop rather than a shell loop (see example
> above).

Definitely an improvement as it avoids the '|| exit 1;' part...

Will rework the patch accordingly...

Regards,
Peter

>
> Regards,
> Yann E. MORIN.
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-08 22:27     ` Yann E. MORIN
@ 2021-03-09 20:32       ` Peter Seiderer
  2021-03-09 21:29         ` Yann E. MORIN
  0 siblings, 1 reply; 15+ messages in thread
From: Peter Seiderer @ 2021-03-09 20:32 UTC (permalink / raw)
  To: buildroot

Hello Yann,

On Mon, 8 Mar 2021 23:27:53 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:

> Peter, All,
>
> On 2021-03-08 23:14 +0100, Peter Seiderer spake thusly:
> > On Mon, 8 Mar 2021 22:55:41 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > > On 2021-02-16 21:11 +0100, Peter Seiderer spake thusly:
> > > > Try to be less smart (focused on the one target/one use-case),
> > > > instead reduce the rpi-firmware package to a selectable list
> > > > of (verbatim) installed firmware files.
> [--SNIP--]
> > > So, let's keep the qt5 example aside, and see what we can do. What if
> > > we'd go with the following:
> > >
> > >   - keep a single, generic config.txt in rpi-firmware, and install that,
> > >
> > >   - if BR2_aarch64=y, add arm_64bit=1
> > >
> > >   - add an option to rpi-firmware:
> > >
> > >     config BR2_PKG_RPI_FW_DTOVERLAY_LIST
> > >         string "DT overlays to load"
> > >         depends on BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS
> > >         help
> > >           Space-separated list of DT overlays to be loaded from config.txt.
> > >
> > >           For example, miniuart-bt on rpi0w to restore the serial console.
> > >
> > >     and if this option is not empty, construct the list of dtoverlay and
> > >     add it to config.txt.
> > >
> > >   - eventually, adapt the defconfigs with that list of dtoverlays
> >
> > ...but back to the direction of trying to being smart..., which can work for
> > 90% of the buildroot defconfig cases, but will not work for the rest of the
> > buildroot ones (one at the moment) and not for customized ones (none dtoverlay
> > extensions, multi-bootable SD-Cards, ...)...
>
> I would think quite the opposite, in fact: with an otion, it's up to the
> user to specify what DT overlays to load; this is more flexible than a
> config.txt file.

More flexible than the possibility for a custom config.txt (mind that there
are overlays with parameters and more possible options besides the overlays)?

>
> For fixup.dat and start/elf, we'd still use your changes, of course.
>
> And for arm_64bit=1 this is really a non-option: if we build for 64-bit
> then we *must* have arm_64bit=1, while if we build for 32-bit, the we
> *must not* have arm_64bit=1.
>
> The only case that this indeed does not cover, is the case where the
> user wants to pas their completely customsied config.txt that totally
> differs from ours. In that case, they can still do so with a post-build
> script that copies their config.txt over ours in BINARIES_DIR.

The part with 'override' feels a little bit ugly and would count for me as
an argument against the hard-coded logic/overlays-only approach, still
believing that sooner or later most/every beyond-buildroot-defconfig-only
user will use a hand-crafted config.txt file...

Regards,
Peter


>
> Regards,
> Yann E. MORIN.
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-09 20:25   ` Peter Seiderer
@ 2021-03-09 20:33     ` Yann E. MORIN
  0 siblings, 0 replies; 15+ messages in thread
From: Yann E. MORIN @ 2021-03-09 20:33 UTC (permalink / raw)
  To: buildroot

Peter, All,

On 2021-03-09 21:25 +0100, Peter Seiderer spake thusly:
> On Mon, 8 Mar 2021 23:04:31 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > On 2021-02-16 21:11 +0100, Peter Seiderer spake thusly:
> > > +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN),y)
> > > +RPI_FIRMWARE_FILES += bootcode.bin
> > > +endif
> > > +
> > > +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),y)
> > > +RPI_FIRMWARE_FILES += start.elf fixup.dat
> > > +endif
[--SNIP--]
> > What about:
> >     RPI_FIRMWARE_FILES = \
> >         $(if $(BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN),bootcode.bin) \
> >         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),start.elf fixup.dat) \
> >         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_X),startx.elf fixupx.dat) \
> >         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI_CD),start_cd.elf fixup_cd.dat) \
> >         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4),start4.elf fixup4.dat) \
> >         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X),start4x.elf fixup4x.dat) \
> >         $(if $(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_CD),start4cd.elf fixup4cd.dat)
> Unsettled which of the three versions is the nicest one, seems a matter of
> taste (and a matter of trading more lines against long lines), and personal not
> much of a friend of the '.._y' pattern...

Then I think the one-assignment (kept above) is the one I'd prefer over
the many-conditional-assignments.

[--SNIP--]
> > Use a make-level $(foreach) loop rather than a shell loop (see example
> > above).
> Definitely an improvement as it avoids the '|| exit 1;' part...
> Will rework the patch accordingly...

Thanks.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-09 20:32       ` Peter Seiderer
@ 2021-03-09 21:29         ` Yann E. MORIN
  2021-03-09 21:35           ` Yann E. MORIN
  2021-03-18 22:25           ` Peter Seiderer
  0 siblings, 2 replies; 15+ messages in thread
From: Yann E. MORIN @ 2021-03-09 21:29 UTC (permalink / raw)
  To: buildroot

Peter, All,

On 2021-03-09 21:32 +0100, Peter Seiderer spake thusly:
> On Mon, 8 Mar 2021 23:27:53 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > On 2021-03-08 23:14 +0100, Peter Seiderer spake thusly:
> > > On Mon, 8 Mar 2021 22:55:41 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > > > On 2021-02-16 21:11 +0100, Peter Seiderer spake thusly:
> > > > > Try to be less smart (focused on the one target/one use-case),
> > > > > instead reduce the rpi-firmware package to a selectable list
> > > > > of (verbatim) installed firmware files.
> > [--SNIP--]
> > > > So, let's keep the qt5 example aside, and see what we can do. What if
> > > > we'd go with the following:
> > > >
> > > >   - keep a single, generic config.txt in rpi-firmware, and install that,
> > > >
> > > >   - if BR2_aarch64=y, add arm_64bit=1
> > > >
> > > >   - add an option to rpi-firmware:
> > > >
> > > >     config BR2_PKG_RPI_FW_DTOVERLAY_LIST
> > > >         string "DT overlays to load"
> > > >         depends on BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS
> > > >         help
> > > >           Space-separated list of DT overlays to be loaded from config.txt.
> > > >
> > > >           For example, miniuart-bt on rpi0w to restore the serial console.
> > > >
> > > >     and if this option is not empty, construct the list of dtoverlay and
> > > >     add it to config.txt.
> > > >
> > > >   - eventually, adapt the defconfigs with that list of dtoverlays
[--SNIP--]
> More flexible than the possibility for a custom config.txt (mind that there
> are overlays with parameters and more possible options besides the overlays)?
[--SNIP--]
> The part with 'override' feels a little bit ugly and would count for me as
> an argument against the hard-coded logic/overlays-only approach, still
> believing that sooner or later most/every beyond-buildroot-defconfig-only
> user will use a hand-crafted config.txt file...

OK, so here's my new proposal:

  - keep your BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE, which points to a
    default, basic one, not unlike the busybox default config:
        default "package/rpi-firmware/config.txt"

  - package/rpi-firmware/config.txt is just the common part of all the
    config.txt you currently had in your patch

  - rpi-firmware.mk will add arm_64bit=1 as needed, based on
    BR2_aarch64=y, because that *really* is not an option.

  - add BR2_PKG_RPI_FW_DTOVERLAY_LIST as I suggest above, which is not
    empty, will be copied as is to dtoverlay

  - change the defconfig files to just set:
    BR2_PKG_RPI_FW_DTOVERLAY_LIST="miniuart-bt"

That way, we get best of both worlds:

  - we avoid duplication of the config.txt, and we can still customise
    it a bit with just "easy stuff" that we need for our example
    defconfigs,

  - users can stil point to their custom, fine-tuned config.txt (in
    which case they will probably not set BR2_PKG_RPI_FW_DTOVERLAY_LIST)

Thoughts?

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-09 21:29         ` Yann E. MORIN
@ 2021-03-09 21:35           ` Yann E. MORIN
  2021-03-18 22:25           ` Peter Seiderer
  1 sibling, 0 replies; 15+ messages in thread
From: Yann E. MORIN @ 2021-03-09 21:35 UTC (permalink / raw)
  To: buildroot

Peter, All,

On 2021-03-09 22:29 +0100, Yann E. MORIN spake thusly:
[--SNIP--]
> OK, so here's my new proposal:
> 
>   - keep your BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE, which points to a
>     default, basic one, not unlike the busybox default config:
>         default "package/rpi-firmware/config.txt"

I meant:  "not unlike what we do with the busybox default config"

Sorry for any confusion...

Regards,
Yann E. MORIN.

>   - package/rpi-firmware/config.txt is just the common part of all the
>     config.txt you currently had in your patch
> 
>   - rpi-firmware.mk will add arm_64bit=1 as needed, based on
>     BR2_aarch64=y, because that *really* is not an option.
> 
>   - add BR2_PKG_RPI_FW_DTOVERLAY_LIST as I suggest above, which is not
>     empty, will be copied as is to dtoverlay
> 
>   - change the defconfig files to just set:
>     BR2_PKG_RPI_FW_DTOVERLAY_LIST="miniuart-bt"
> 
> That way, we get best of both worlds:
> 
>   - we avoid duplication of the config.txt, and we can still customise
>     it a bit with just "easy stuff" that we need for our example
>     defconfigs,
> 
>   - users can stil point to their custom, fine-tuned config.txt (in
>     which case they will probably not set BR2_PKG_RPI_FW_DTOVERLAY_LIST)
> 
> Thoughts?
> 
> Regards,
> Yann E. MORIN.
> 
> -- 
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-09 21:29         ` Yann E. MORIN
  2021-03-09 21:35           ` Yann E. MORIN
@ 2021-03-18 22:25           ` Peter Seiderer
  2021-03-20 22:09             ` Yann E. MORIN
  1 sibling, 1 reply; 15+ messages in thread
From: Peter Seiderer @ 2021-03-18 22:25 UTC (permalink / raw)
  To: buildroot

Hello Yann,

On Tue, 9 Mar 2021 22:29:42 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:

> Peter, All,
>
> On 2021-03-09 21:32 +0100, Peter Seiderer spake thusly:
> > On Mon, 8 Mar 2021 23:27:53 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > > On 2021-03-08 23:14 +0100, Peter Seiderer spake thusly:
> > > > On Mon, 8 Mar 2021 22:55:41 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > > > > On 2021-02-16 21:11 +0100, Peter Seiderer spake thusly:
> > > > > > Try to be less smart (focused on the one target/one use-case),
> > > > > > instead reduce the rpi-firmware package to a selectable list
> > > > > > of (verbatim) installed firmware files.
> > > [--SNIP--]
> > > > > So, let's keep the qt5 example aside, and see what we can do. What if
> > > > > we'd go with the following:
> > > > >
> > > > >   - keep a single, generic config.txt in rpi-firmware, and install that,
> > > > >
> > > > >   - if BR2_aarch64=y, add arm_64bit=1
> > > > >
> > > > >   - add an option to rpi-firmware:
> > > > >
> > > > >     config BR2_PKG_RPI_FW_DTOVERLAY_LIST
> > > > >         string "DT overlays to load"
> > > > >         depends on BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS
> > > > >         help
> > > > >           Space-separated list of DT overlays to be loaded from config.txt.
> > > > >
> > > > >           For example, miniuart-bt on rpi0w to restore the serial console.
> > > > >
> > > > >     and if this option is not empty, construct the list of dtoverlay and
> > > > >     add it to config.txt.
> > > > >
> > > > >   - eventually, adapt the defconfigs with that list of dtoverlays
> [--SNIP--]
> > More flexible than the possibility for a custom config.txt (mind that there
> > are overlays with parameters and more possible options besides the overlays)?
> [--SNIP--]
> > The part with 'override' feels a little bit ugly and would count for me as
> > an argument against the hard-coded logic/overlays-only approach, still
> > believing that sooner or later most/every beyond-buildroot-defconfig-only
> > user will use a hand-crafted config.txt file...
>
> OK, so here's my new proposal:
>
>   - keep your BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE, which points to a
>     default, basic one, not unlike the busybox default config:
>         default "package/rpi-firmware/config.txt"
>
>   - package/rpi-firmware/config.txt is just the common part of all the
>     config.txt you currently had in your patch
>
>   - rpi-firmware.mk will add arm_64bit=1 as needed, based on
>     BR2_aarch64=y, because that *really* is not an option.
>
>   - add BR2_PKG_RPI_FW_DTOVERLAY_LIST as I suggest above, which is not
>     empty, will be copied as is to dtoverlay
>
>   - change the defconfig files to just set:
>     BR2_PKG_RPI_FW_DTOVERLAY_LIST="miniuart-bt"
>
> That way, we get best of both worlds:
>
>   - we avoid duplication of the config.txt, and we can still customise
>     it a bit with just "easy stuff" that we need for our example
>     defconfigs,
>
>   - users can stil point to their custom, fine-tuned config.txt (in
>     which case they will probably not set BR2_PKG_RPI_FW_DTOVERLAY_LIST)

Finally found time for a new iteration of the patch set:

- fixed two bugs
- changed the firmware list handling to one-assignment style
- changed the firmware install to make-level foreach loop
- changed the dtb overlay install to make-level foreach loop

- kept the verbatim BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE option,
  as your suggestion missed one more point where the config.txt
  files diverge (aside from dtoverlay=miniuart-bt and arm_64bit=1),
  the start_file=start.elf/fixup_file=fixup.dat or start_file=start4.elf/
  fixup_file=fixup4.dat as the firmware files are now copied verbatim...,
  and still confident that the principal of taking a verbatim copy of
  a given file is more flexible than implementing some more or less smart
  logic...

Regards,
Peter


>
> Thoughts?
>
> Regards,
> Yann E. MORIN.
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-18 22:25           ` Peter Seiderer
@ 2021-03-20 22:09             ` Yann E. MORIN
  2021-03-21 12:00               ` Peter Seiderer
  0 siblings, 1 reply; 15+ messages in thread
From: Yann E. MORIN @ 2021-03-20 22:09 UTC (permalink / raw)
  To: buildroot

Peter, All,

On 2021-03-18 23:25 +0100, Peter Seiderer spake thusly:
> On Tue, 9 Mar 2021 22:29:42 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > OK, so here's my new proposal:
> >
> >   - keep your BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE, which points to a
> >     default, basic one, not unlike the busybox default config:
> >         default "package/rpi-firmware/config.txt"
> >
> >   - package/rpi-firmware/config.txt is just the common part of all the
> >     config.txt you currently had in your patch
> >
> >   - rpi-firmware.mk will add arm_64bit=1 as needed, based on
> >     BR2_aarch64=y, because that *really* is not an option.
> >
> >   - add BR2_PKG_RPI_FW_DTOVERLAY_LIST as I suggest above, which is not
> >     empty, will be copied as is to dtoverlay
> >
> >   - change the defconfig files to just set:
> >     BR2_PKG_RPI_FW_DTOVERLAY_LIST="miniuart-bt"
> >
> > That way, we get best of both worlds:
> >
> >   - we avoid duplication of the config.txt, and we can still customise
> >     it a bit with just "easy stuff" that we need for our example
> >     defconfigs,
> >
> >   - users can stil point to their custom, fine-tuned config.txt (in
> >     which case they will probably not set BR2_PKG_RPI_FW_DTOVERLAY_LIST)
> 
> Finally found time for a new iteration of the patch set:
> 
> - fixed two bugs
> - changed the firmware list handling to one-assignment style
> - changed the firmware install to make-level foreach loop
> - changed the dtb overlay install to make-level foreach loop
> 
> - kept the verbatim BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE option,
>   as your suggestion missed one more point where the config.txt
>   files diverge (aside from dtoverlay=miniuart-bt and arm_64bit=1),
>   the start_file=start.elf/fixup_file=fixup.dat or start_file=start4.elf/
>   fixup_file=fixup4.dat as the firmware files are now copied verbatim...,
>   and still confident that the principal of taking a verbatim copy of
>   a given file is more flexible than implementing some more or less smart
>   logic...

But now, you will notice that all the config.txt will load the default
fixups/start_file blobs appropriate for the hardware, so they do not
need to be specified. The rpi docs state they are "an advanced option".

Also, I wonder why we specify a memory split. 100M for the GPU seems
arbitrary. We should keep the defaults unless there is a reason not to,
and thus not specify any.

We're now left with just the qt5we defconfig that differs just because
a bit more memory is allocated tp the GPU on the 1GB+ models. But if we
indeed drop setting the memory split between CPU/GPU, then we no longer
need a special config.txt for qt5we either, at the expense of a bit of
memory on the ARM side (but that should be OK as it is OK for smaller
RAMs...).

As for the 64-bit thing: I insist that we *must* enforce it to be set
to the proper value, i.e. 0 (or not set) for 32-bit builds, and 1 for
64-bit builds, because that variable is not an option: its value really
depends on theconfiguration of the build, not on users' customisation
will.

Eventually, we're left with the dtoverlay variable. Appending the value
of that variable, if set, verbatim into the config.txt is not trying to
be too smart, I believe. ;-)

So we can have a single config.txt, with a very easy way for users to
base off that with dtoverlay customisations, and if they need more
tricks, they can provide their own config.txt and/or their own
post-build script, to apply whatever customisations they need.

At the very extreme, if the BR2_PKG_RPI_FW_DTOVERLAY_LIST variable is
still seen as being too smart, then I think we could maybe have two
config.txt: one that loads the miniuart-bt dtoverlay, and one that does
not.

And finally, we should get rid of the commented-out initramfs setting.
I don't want that we document the file; rather, I want users to read the
documentation at the source, i.e. the rpi foundation-maintained docs:

    https://www.raspberrypi.org/documentation/configuration/config-txt/README.md
    https://www.raspberrypi.org/documentation/configuration/boot_folder.md

Regards,
Yann E. MORIN.


-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling
  2021-03-20 22:09             ` Yann E. MORIN
@ 2021-03-21 12:00               ` Peter Seiderer
  0 siblings, 0 replies; 15+ messages in thread
From: Peter Seiderer @ 2021-03-21 12:00 UTC (permalink / raw)
  To: buildroot

Hello Yann, All,

On Sat, 20 Mar 2021 23:09:46 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:

> Peter, All,
>
> On 2021-03-18 23:25 +0100, Peter Seiderer spake thusly:
> > On Tue, 9 Mar 2021 22:29:42 +0100, "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > > OK, so here's my new proposal:
> > >
> > >   - keep your BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE, which points to a
> > >     default, basic one, not unlike the busybox default config:
> > >         default "package/rpi-firmware/config.txt"
> > >
> > >   - package/rpi-firmware/config.txt is just the common part of all the
> > >     config.txt you currently had in your patch
> > >
> > >   - rpi-firmware.mk will add arm_64bit=1 as needed, based on
> > >     BR2_aarch64=y, because that *really* is not an option.
> > >
> > >   - add BR2_PKG_RPI_FW_DTOVERLAY_LIST as I suggest above, which is not
> > >     empty, will be copied as is to dtoverlay
> > >
> > >   - change the defconfig files to just set:
> > >     BR2_PKG_RPI_FW_DTOVERLAY_LIST="miniuart-bt"
> > >
> > > That way, we get best of both worlds:
> > >
> > >   - we avoid duplication of the config.txt, and we can still customise
> > >     it a bit with just "easy stuff" that we need for our example
> > >     defconfigs,
> > >
> > >   - users can stil point to their custom, fine-tuned config.txt (in
> > >     which case they will probably not set BR2_PKG_RPI_FW_DTOVERLAY_LIST)
> >
> > Finally found time for a new iteration of the patch set:
> >
> > - fixed two bugs
> > - changed the firmware list handling to one-assignment style
> > - changed the firmware install to make-level foreach loop
> > - changed the dtb overlay install to make-level foreach loop
> >
> > - kept the verbatim BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE option,
> >   as your suggestion missed one more point where the config.txt
> >   files diverge (aside from dtoverlay=miniuart-bt and arm_64bit=1),
> >   the start_file=start.elf/fixup_file=fixup.dat or start_file=start4.elf/
> >   fixup_file=fixup4.dat as the firmware files are now copied verbatim...,
> >   and still confident that the principal of taking a verbatim copy of
> >   a given file is more flexible than implementing some more or less smart
> >   logic...
>
> But now, you will notice that all the config.txt will load the default
> fixups/start_file blobs appropriate for the hardware, so they do not
> need to be specified. The rpi docs state they are "an advanced option".

But it does not hurt (and is a good hint/starting point for how to use
the other available files provided by rpi-firmware), and I would call the
buildroot users advanced (in comparison to the plain raspian users) ;-)

>
> Also, I wonder why we specify a memory split. 100M for the GPU seems
> arbitrary. We should keep the defaults unless there is a reason not to,
> and thus not specify any.

Not part of this patch set/discussion, but for sure something to improve
(in a preliminary patch or afterwards)...

>
> We're now left with just the qt5we defconfig that differs just because
> a bit more memory is allocated tp the GPU on the 1GB+ models. But if we
> indeed drop setting the memory split between CPU/GPU, then we no longer
> need a special config.txt for qt5we either, at the expense of a bit of
> memory on the ARM side (but that should be OK as it is OK for smaller
> RAMs...).

And the kernel image name....

>
> As for the 64-bit thing: I insist that we *must* enforce it to be set
> to the proper value, i.e. 0 (or not set) for 32-bit builds, and 1 for
> 64-bit builds, because that variable is not an option: its value really
> depends on theconfiguration of the build, not on users' customisation
> will.
>
> Eventually, we're left with the dtoverlay variable. Appending the value
> of that variable, if set, verbatim into the config.txt is not trying to
> be too smart, I believe. ;-)
>
> So we can have a single config.txt, with a very easy way for users to
> base off that with dtoverlay customisations, and if they need more
> tricks, they can provide their own config.txt and/or their own
> post-build script, to apply whatever customisations they need.

Still do not see the advantage of tweaking one config.txt file to
suit the different use cases instead of a configure option for
selecting a verbatim copied one (we store different genimage files too
instead of tweaking one to fit)....

What is so bad about providing a RPI_FIRMWARE_CONFIG_FILE option (similar
as already done for uboot, kernel, busybox, uclibc,...)? An option
which is easily explained to buildroot users compared to '...you must
adjust a script to copy (or tweak) some file to some specific
location....'?

>
> At the very extreme, if the BR2_PKG_RPI_FW_DTOVERLAY_LIST variable is
> still seen as being too smart, then I think we could maybe have two
> config.txt: one that loads the miniuart-bt dtoverlay, and one that does
> not.

See above, already provided by RPI_FIRMWARE_CONFIG_FILE option...

>
> And finally, we should get rid of the commented-out initramfs setting.
> I don't want that we document the file; rather, I want users to read the
> documentation at the source, i.e. the rpi foundation-maintained docs:
>
>     https://www.raspberrypi.org/documentation/configuration/config-txt/README.md
>     https://www.raspberrypi.org/documentation/configuration/boot_folder.md

Not part of this patch set/discussion, but for sure something to improve
(in a preliminary patch or afterwards)...

Regards,
Peter

>
> Regards,
> Yann E. MORIN.
>
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2021-03-21 12:00 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-16 20:11 [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling Peter Seiderer
2021-02-16 20:11 ` [Buildroot] [RFC/next v2 2/2] package/rpi-firmware: add option for the debug set of start/fixup boot files Peter Seiderer
2021-02-17  9:21 ` [Buildroot] [RFC/next v2 1/2] package/rpi-firmware: rework boot/config file handling Stefan Agner
2021-03-08 21:55 ` Yann E. MORIN
2021-03-08 22:14   ` Peter Seiderer
2021-03-08 22:27     ` Yann E. MORIN
2021-03-09 20:32       ` Peter Seiderer
2021-03-09 21:29         ` Yann E. MORIN
2021-03-09 21:35           ` Yann E. MORIN
2021-03-18 22:25           ` Peter Seiderer
2021-03-20 22:09             ` Yann E. MORIN
2021-03-21 12:00               ` Peter Seiderer
2021-03-08 22:04 ` Yann E. MORIN
2021-03-09 20:25   ` Peter Seiderer
2021-03-09 20:33     ` Yann E. MORIN

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.