Repository: home-assistant/operating-system
Pull request #4063: Enable usage of rpi-eeprom-update on Raspberry Pi 4/5/Yellow
Author: login: sairon
Labels: name: cla-signed
name: board/raspberrypi
description: Raspberry Pi Boards
name: board/yellow
description: Home Assistant Yellow
Created: 2025-05-13T16:39:48Z | Merged: 2025-05-14T15:25:29Z

Add tools for updating of Raspberry Pi EEPROM from HAOS and distribute the latest `default` firmware binary in the rootfs, so `rpi-eeprom-update -a` can be used to update to the latest verified EEPROM firmware. 

At this point these changes serve mostly just as QoL improvement, so users don't need to switch to RPi OS or use SD card with the recovery flashed. It's also essential as a foundation for later unattended upgrades or updates through update entities.

There are some drawbacks on Yellow, because CM4 ROM does not support update through `recovery.bin`, and self-update requires jumping through many hoops, so we would likely won't be able to implement one-click updates there. However, adding the firmware binary to Yellow image makes it easy to compare what's the default/recommended version and the installed one. On the other hand on CM5 it should be possible to easily update the EEPROM through `flashrom`.

Last not least, this PR brings rather significant bloat (~10M) of the rootfs because of the Python dependency. This wouldn't be necessary if we rewrote the `rpi-eeprom-update` tool e.g. to C (I started but ditched the idea at some point). There's currently enough of space in the image and diverging from what RPi OS does could bite us, so let's go the easy route now.

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added support for Raspberry Pi EEPROM firmware update tools and utilities, including selective installation for Raspberry Pi 4 and 5.
  - Introduced the vcgencmd utility for querying VideoCore GPU information on Raspberry Pi devices.
  - Enabled flashrom utility in select device configurations.
- **Improvements**
  - Enhanced EEPROM update script to better detect HassOS boot partitions and simplified user instructions.
  - Added configuration options for more granular control over which EEPROM files are included in builds.
- **Integrity**
  - Included hash files for firmware and utility verification.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/buildroot-external/Config.in b/buildroot-external/Config.in
index 1bdb1b9225b..c2e9b877ad7 100644
--- a/buildroot-external/Config.in
+++ b/buildroot-external/Config.in
@@ -17,4 +17,5 @@ source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-rf-mod/Config.in"
 source "$BR2_EXTERNAL_HASSOS_PATH/package/rtl88x2bu/Config.in"
 source "$BR2_EXTERNAL_HASSOS_PATH/package/tempio/Config.in.host"
 source "$BR2_EXTERNAL_HASSOS_PATH/package/udisks2/Config.in"
+source "$BR2_EXTERNAL_HASSOS_PATH/package/vcgencmd/Config.in"
 source "$BR2_EXTERNAL_HASSOS_PATH/package/xe-guest-utilities/Config.in"
diff --git a/buildroot-external/configs/rpi4_64_defconfig b/buildroot-external/configs/rpi4_64_defconfig
index b90128956d1..70c9c154db3 100644
--- a/buildroot-external/configs/rpi4_64_defconfig
+++ b/buildroot-external/configs/rpi4_64_defconfig
@@ -160,6 +160,8 @@ BR2_PACKAGE_HASSIO_MACHINE="raspberrypi4-64"
 BR2_PACKAGE_OS_AGENT=y
 BR2_PACKAGE_OS_AGENT_BOARD="RaspberryPi4"
 BR2_PACKAGE_PI_BLUETOOTH=y
+BR2_PACKAGE_RPI_EEPROM=y
+BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4=y
 BR2_PACKAGE_RPI_RF_MOD=y
 BR2_PACKAGE_RPI_RF_MOD_DTS=y
 BR2_PACKAGE_RTL88X2BU=y
diff --git a/buildroot-external/configs/rpi4_defconfig b/buildroot-external/configs/rpi4_defconfig
index a3a5c0c7ba1..ce7dd1d7c97 100644
--- a/buildroot-external/configs/rpi4_defconfig
+++ b/buildroot-external/configs/rpi4_defconfig
@@ -158,6 +158,8 @@ BR2_PACKAGE_HASSIO_MACHINE="raspberrypi4"
 BR2_PACKAGE_OS_AGENT=y
 BR2_PACKAGE_OS_AGENT_BOARD="RaspberryPi4"
 BR2_PACKAGE_PI_BLUETOOTH=y
+BR2_PACKAGE_RPI_EEPROM=y
+BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4=y
 BR2_PACKAGE_RPI_RF_MOD=y
 BR2_PACKAGE_RPI_RF_MOD_DTS=y
 BR2_PACKAGE_RTL88X2BU=y
diff --git a/buildroot-external/configs/rpi5_64_defconfig b/buildroot-external/configs/rpi5_64_defconfig
index f674b7bfaae..d62ef601170 100644
--- a/buildroot-external/configs/rpi5_64_defconfig
+++ b/buildroot-external/configs/rpi5_64_defconfig
@@ -75,6 +75,7 @@ BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW89=y
 BR2_PACKAGE_LINUX_FIRMWARE_RTL_815X=y
 BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
 BR2_PACKAGE_DBUS_BROKER=y
+BR2_PACKAGE_FLASHROM=y
 BR2_PACKAGE_GPTFDISK=y
 BR2_PACKAGE_GPTFDISK_SGDISK=y
 # BR2_PACKAGE_LVM2_STANDARD_INSTALL is not set
@@ -151,6 +152,8 @@ BR2_PACKAGE_HASSIO_MACHINE="raspberrypi5-64"
 BR2_PACKAGE_OS_AGENT=y
 BR2_PACKAGE_OS_AGENT_BOARD="RaspberryPi5"
 BR2_PACKAGE_PI_BLUETOOTH=y
+BR2_PACKAGE_RPI_EEPROM=y
+BR2_PACKAGE_RPI_EEPROM_TARGET_RPI5=y
 BR2_PACKAGE_RPI_RF_MOD=y
 BR2_PACKAGE_RPI_RF_MOD_DTS=y
 BR2_PACKAGE_RTL88X2BU=y
diff --git a/buildroot-external/configs/yellow_defconfig b/buildroot-external/configs/yellow_defconfig
index dd6e0a5a2f6..22ec270ab5d 100644
--- a/buildroot-external/configs/yellow_defconfig
+++ b/buildroot-external/configs/yellow_defconfig
@@ -77,6 +77,7 @@ BR2_PACKAGE_RPI_FIRMWARE=y
 BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
 # BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
 BR2_PACKAGE_DBUS_BROKER=y
+BR2_PACKAGE_FLASHROM=y
 BR2_PACKAGE_GPTFDISK=y
 BR2_PACKAGE_GPTFDISK_SGDISK=y
 BR2_PACKAGE_INPUT_EVENT_DAEMON=y
@@ -164,6 +165,7 @@ BR2_PACKAGE_HASSIO_MACHINE="yellow"
 BR2_PACKAGE_OS_AGENT=y
 BR2_PACKAGE_OS_AGENT_BOARD="Yellow"
 BR2_PACKAGE_PI_BLUETOOTH=y
+BR2_PACKAGE_RPI_EEPROM=y
 BR2_PACKAGE_RPI_RF_MOD=y
 BR2_PACKAGE_RPI_RF_MOD_DTS=y
 BR2_PACKAGE_RPI_RF_MOD_DTS_YELLOW=y
diff --git a/buildroot-external/package/rpi-eeprom/0001-rpi-eeprom-update-adjust-hassos-boot-discovery.patch b/buildroot-external/package/rpi-eeprom/0001-rpi-eeprom-update-adjust-hassos-boot-discovery.patch
new file mode 100644
index 00000000000..e99c1853a2d
--- /dev/null
+++ b/buildroot-external/package/rpi-eeprom/0001-rpi-eeprom-update-adjust-hassos-boot-discovery.patch
@@ -0,0 +1,30 @@
+From ecc0714d0c132acdce1d7363567917e00ece26f9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
+Date: Tue, 13 May 2025 17:19:59 +0200
+Subject: [PATCH] rpi-eeprom-update: adjust hassos-boot discovery
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Make discovery of boot partition compatible with HAOS without the need
+to set BOOTFS in /etc/default/rpi-eeprom-update.
+
+Signed-off-by: Jan Čermák <sairon@sairon.cz>
+Upstream: not applicable
+---
+ rpi-eeprom-update | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/rpi-eeprom-update b/rpi-eeprom-update
+index b970142..720efb7 100755
+--- a/rpi-eeprom-update
++++ b/rpi-eeprom-update
+@@ -725,7 +725,7 @@ findBootFS()
+    # If ${BOOTFS} is not writable OR is not on /dev/mmcblk0 then error because the ROM
+    # can only load recovery.bin from the on-board SD-CARD slot or the EEPROM.
+ 
+-   if blkid | grep -qE "/dev/mmcblk0p1.*LABEL_FATBOOT.*RECOVERY.*TYPE.*vfat"; then
++   if blkid | grep -qE "/dev/mmcblk0p1.*LABEL_FATBOOT.*hassos-boot.*TYPE.*vfat"; then
+       TMP_BOOTFS_MNT="$(mktemp -d)"
+       mount /dev/mmcblk0p1 "${TMP_BOOTFS_MNT}"
+       BOOTFS="${TMP_BOOTFS_MNT}"
diff --git a/buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch b/buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch
new file mode 100644
index 00000000000..846f068a622
--- /dev/null
+++ b/buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch
@@ -0,0 +1,68 @@
+From bea845559542e556dfaffcec7334695a6387e0d9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
+Date: Tue, 13 May 2025 18:07:13 +0200
+Subject: [PATCH] rpi-eeprom-update: remove raspi-config mentions and
+ unnecessary sudo in help
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There is no sudo on HAOS, remove it from messages that could be shown to
+users. Also remove raspi-config mention, we will only carry the default
+release.
+
+Signed-off-by: Jan Čermák <sairon@sairon.cz>
+Upstream: not applicable
+---
+ rpi-eeprom-update | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/rpi-eeprom-update b/rpi-eeprom-update
+index 720efb7..eb19872 100755
+--- a/rpi-eeprom-update
++++ b/rpi-eeprom-update
+@@ -30,7 +30,6 @@ FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-default}
+ FIRMWARE_BACKUP_DIR=${FIRMWARE_BACKUP_DIR:-/var/lib/raspberrypi/bootloader/backup}
+ ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1}
+ CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0}
+-RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}"
+ 
+ # Self-update is preferred to using recovery.bin because it avoids modifiy the
+ # boot partition in order to rename recovery.bin after use. Since the 2711 ROM
+@@ -315,7 +314,7 @@ applyRecoveryUpdate()
+    echo "EEPROM updates pending. Please reboot to apply the update."
+ 
+    if [ "${RPI_EEPROM_USE_FLASHROM}" = 0 ]; then
+-      echo "To cancel a pending update run \"sudo rpi-eeprom-update -r\"."
++      echo "To cancel a pending update run \"rpi-eeprom-update -r\"."
+    fi
+ }
+ 
+@@ -634,7 +633,7 @@ To update the configuration file in an EEPROM image:
+    rpi-eeprom-config pieeprom.bin --config bootconf.txt --out pieeprom-new.bin
+ 
+ To flash the new image:
+-   sudo rpi-eeprom-update -d -f ./pieeprom-new.bin
++   rpi-eeprom-update -d -f ./pieeprom-new.bin
+ 
+ The syntax is the same as config.txt See online documentation for the list of parameters.
+ 
+@@ -694,7 +693,6 @@ printVersions()
+    echo "   CURRENT: $(date -u "-d@${BOOTLOADER_CURRENT_VERSION}") (${BOOTLOADER_CURRENT_VERSION})"
+    echo "    LATEST: $(date -u "-d@${BOOTLOADER_UPDATE_VERSION}") (${BOOTLOADER_UPDATE_VERSION})"
+    echo "   RELEASE: ${FIRMWARE_RELEASE_STATUS} (${FIRMWARE_IMAGE_DIR})"
+-   echo "            Use ${RPI_EEPROM_UPDATE_CONFIG_TOOL} to change the release."
+ 
+    if [ "${BCM_CHIP}" = 2711 ]; then
+       echo ""
+@@ -905,9 +903,7 @@ checkVersion()
+    if [ "${ACTION_UPDATE_BOOTLOADER}" = 1 ] || [ "${ACTION_UPDATE_VL805}" = 1 ]; then
+       echo "*** UPDATE AVAILABLE ***"
+       echo ""
+-      echo "Run \"sudo rpi-eeprom-update -a\" to install this update now."
+-      echo
+-      echo "To configure the bootloader update policy run \"sudo ${RPI_EEPROM_UPDATE_CONFIG_TOOL}\""
++      echo "Run \"rpi-eeprom-update -a\" to install this update now."
+       echo ""
+       printVersions
+       write_status_info "EXIT_UPDATE_REQUIRED"
diff --git a/buildroot-external/package/rpi-eeprom/Config.in b/buildroot-external/package/rpi-eeprom/Config.in
index 08f6987df7e..3aa59f62150 100644
--- a/buildroot-external/package/rpi-eeprom/Config.in
+++ b/buildroot-external/package/rpi-eeprom/Config.in
@@ -1,6 +1,37 @@
 config BR2_PACKAGE_RPI_EEPROM
 	bool "rpi-eeprom"
+	select BR2_PACKAGE_PYTHON3
+	select BR2_PACKAGE_VCGENCMD
 	help
-	  EEPROM bootloader firmware for Raspberry Pi 4
+	  EEPROM bootloader firmware update tool for Raspberry Pi
 
 	  https://github.com/raspberrypi/rpi-eeprom
+
+if BR2_PACKAGE_RPI_EEPROM
+
+choice
+	prompt "Target platform"
+	default BR2_PACKAGE_RPI_EEPROM_TARGET_ANY
+	help
+	  Select the target platform for the EEPROM files to be
+	  installed. The default is to install all EEPROM files for
+	  all Raspberry Pi boards.
+
+config BR2_PACKAGE_RPI_EEPROM_TARGET_ANY
+	bool "Any Raspberry Pi"
+	help
+	  Install all EEPROM files for all Raspberry Pi boards.
+
+config BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4
+	bool "Raspberry Pi 4"
+	help
+	  Install EEPROM files for Raspberry Pi 4 boards only.
+
+config BR2_PACKAGE_RPI_EEPROM_TARGET_RPI5
+	bool "Raspberry Pi 5"
+	help
+	  Install EEPROM files for Raspberry Pi 5 boards only.
+
+endchoice
+
+endif
diff --git a/buildroot-external/package/rpi-eeprom/rpi-eeprom.hash b/buildroot-external/package/rpi-eeprom/rpi-eeprom.hash
new file mode 100644
index 00000000000..958b57bb8b5
--- /dev/null
+++ b/buildroot-external/package/rpi-eeprom/rpi-eeprom.hash
@@ -0,0 +1,3 @@
+# Locally computed
+sha256  9e64372f0480b8410fce3f9cc12c01548eaac36e36fe0fe8f979535281d41290  rpi-eeprom-cd4048df1d55be89bf84879754a4acf9c92e1f7a.tar.gz
+sha256  594b7565fd3ccf8acd4711a2ec1b199181aafbc3426d0bacaa50ef40edbf7c4a  LICENSE
diff --git a/buildroot-external/package/rpi-eeprom/rpi-eeprom.mk b/buildroot-external/package/rpi-eeprom/rpi-eeprom.mk
index a1ee7d0a6e7..a85e4644ba2 100644
--- a/buildroot-external/package/rpi-eeprom/rpi-eeprom.mk
+++ b/buildroot-external/package/rpi-eeprom/rpi-eeprom.mk
@@ -4,24 +4,34 @@
 #
 ################################################################################
 
-RPI_EEPROM_VERSION = 16bb29427f96dc8276a7102c0526154a1084bffd
+RPI_EEPROM_VERSION = cd4048df1d55be89bf84879754a4acf9c92e1f7a
 RPI_EEPROM_SITE = $(call github,raspberrypi,rpi-eeprom,$(RPI_EEPROM_VERSION))
 RPI_EEPROM_LICENSE = BSD-3-Clause
 RPI_EEPROM_LICENSE_FILES = LICENSE
-RPI_EEPROM_INSTALL_IMAGES = YES
-RPI_EEPROM_FIRMWARE_PATH = firmware/beta/pieeprom-2020-10-28.bin
 
-define RPI_EEPROM_BUILD_CMDS
-	$(@D)/rpi-eeprom-config $(@D)/$(RPI_EEPROM_FIRMWARE_PATH) --out $(@D)/default.conf
-	(cat $(@D)/default.conf | grep -v ^$$; echo HDMI_DELAY=0) > $(@D)/boot.conf
-	$(@D)/rpi-eeprom-config $(@D)/$(RPI_EEPROM_FIRMWARE_PATH) --config $(@D)/boot.conf --out $(@D)/pieeprom.upd
-	sha256sum $(@D)/pieeprom.upd | awk '{ print $$1 }' > $(@D)/pieeprom.sig
-	echo "ts: $$(date -u +%s)" >> $(@D)/pieeprom.sig
+ifneq ($(BR2_PACKAGE_RPI_EEPROM_TARGET_ANY)$(BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4),)
+define RPI_EEPROM_INSTALL_RPI4_FILES
+	$(INSTALL) -d $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2711/default
+	$(INSTALL) -D -m 0644 $(@D)/firmware-2711/default/recovery.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2711/default/
+	$(INSTALL) -D -m 0644 $(@D)/firmware-2711/default/vl805-000138c0.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2711/default/
+	$(INSTALL) -D -m 0644 $(@D)/firmware-2711/default/pieeprom-2025-02-11.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2711/default/
 endef
+endif
 
-define RPI_EEPROM_INSTALL_IMAGES_CMDS
-	$(INSTALL) -D -m 0644 $(@D)/pieeprom.sig $(BINARIES_DIR)/rpi-eeprom/pieeprom.sig
-	$(INSTALL) -D -m 0644 $(@D)/pieeprom.upd $(BINARIES_DIR)/rpi-eeprom/pieeprom.upd
+ifneq ($(BR2_PACKAGE_RPI_EEPROM_TARGET_ANY)$(BR2_PACKAGE_RPI_EEPROM_TARGET_RPI5),)
+define RPI_EEPROM_INSTALL_RPI5_FILES
+	$(INSTALL) -d $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2712/default
+	$(INSTALL) -D -m 0644 $(@D)/firmware-2712/default/recovery.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2712/default/
+	$(INSTALL) -D -m 0644 $(@D)/firmware-2712/default/pieeprom-2025-03-10.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2712/default/
+endef
+endif
+
+define RPI_EEPROM_INSTALL_TARGET_CMDS
+	$(RPI_EEPROM_INSTALL_RPI4_FILES)
+	$(RPI_EEPROM_INSTALL_RPI5_FILES)
+	$(INSTALL) -D -m 0755 $(@D)/rpi-eeprom-config $(TARGET_DIR)/usr/bin/rpi-eeprom-config
+	$(INSTALL) -D -m 0755 $(@D)/rpi-eeprom-digest $(TARGET_DIR)/usr/bin/rpi-eeprom-digest
+	$(INSTALL) -D -m 0755 $(@D)/rpi-eeprom-update $(TARGET_DIR)/usr/bin/rpi-eeprom-update
 endef
 
 $(eval $(generic-package))
diff --git a/buildroot-external/package/vcgencmd/Config.in b/buildroot-external/package/vcgencmd/Config.in
new file mode 100644
index 00000000000..d5e42fb0b7a
--- /dev/null
+++ b/buildroot-external/package/vcgencmd/Config.in
@@ -0,0 +1,5 @@
+config BR2_PACKAGE_VCGENCMD
+	bool "vcgencmd"
+	help
+	  Command line utility that can get various pieces of
+	  information from the VideoCore GPU on the Raspberry Pi.
diff --git a/buildroot-external/package/vcgencmd/vcgencmd.hash b/buildroot-external/package/vcgencmd/vcgencmd.hash
new file mode 100644
index 00000000000..35ed7e00065
--- /dev/null
+++ b/buildroot-external/package/vcgencmd/vcgencmd.hash
@@ -0,0 +1,3 @@
+# Locally computed
+sha256  c31953e8ee666c9b01499d4da639f4f4ec6567822b6daa55dd402468564b1a12  vcgencmd-c57d8c29c46993d93f191218bbc1dc3a73fc7918.tar.gz
+sha256  731da956431d1a7c5073e7ee5ebe01f54e359c5339310b32f0893c6fe6507d5a  LICENSE
diff --git a/buildroot-external/package/vcgencmd/vcgencmd.mk b/buildroot-external/package/vcgencmd/vcgencmd.mk
new file mode 100644
index 00000000000..3c015ae2a51
--- /dev/null
+++ b/buildroot-external/package/vcgencmd/vcgencmd.mk
@@ -0,0 +1,17 @@
+################################################################################
+#
+# vcgencmd
+#
+################################################################################
+
+VCGENCMD_VERSION = c57d8c29c46993d93f191218bbc1dc3a73fc7918
+VCGENCMD_SITE = $(call github,raspberrypi,utils,$(VCGENCMD_VERSION))
+VCGENCMD_LICENSE = BSD-3-Clause
+VCGENCMD_LICENSE_FILES = LICENSE
+VCGENCMD_SUBDIR = vcgencmd
+
+define VCGENCMD_INSTALL_TARGET_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/vcgencmd/vcgencmd $(TARGET_DIR)/usr/bin/vcgencmd
+endef
+
+$(eval $(cmake-package))


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>🧹 Nitpick comments (2)</summary><blockquote>

<details>
<summary>buildroot-external/package/rpi-eeprom/rpi-eeprom.mk (2)</summary><blockquote>

`15-17`: **Consider version-independent firmware references**

The firmware files are referenced with specific version dates (e.g., pieeprom-2025-02-11.bin). While this is common practice, it means the makefile will need updates when new firmware versions are released.

Consider if a more version-independent approach would be beneficial for maintenance, such as using symlinks or a variable to define the current version.

---

`24-25`: **Consider version-independent firmware references**

Similarly to the RPi4 files, the RPi5 firmware file is referenced with a specific version date (pieeprom-2025-03-10.bin).

Consider a more maintainable approach that would make version updates easier without requiring makefile changes.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between d749bb70b4f94e5c52b4f4583c53b7569f7688f2 and 9bb1b59081166e0fbd9131085001d3dc35bd5d60.

</details>

<details>
<summary>📒 Files selected for processing (13)</summary>

* `buildroot-external/Config.in` (1 hunks)
* `buildroot-external/configs/rpi4_64_defconfig` (1 hunks)
* `buildroot-external/configs/rpi4_defconfig` (1 hunks)
* `buildroot-external/configs/rpi5_64_defconfig` (2 hunks)
* `buildroot-external/configs/yellow_defconfig` (2 hunks)
* `buildroot-external/package/rpi-eeprom/0001-rpi-eeprom-update-adjust-hassos-boot-discovery.patch` (1 hunks)
* `buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch` (1 hunks)
* `buildroot-external/package/rpi-eeprom/Config.in` (1 hunks)
* `buildroot-external/package/rpi-eeprom/rpi-eeprom.hash` (1 hunks)
* `buildroot-external/package/rpi-eeprom/rpi-eeprom.mk` (1 hunks)
* `buildroot-external/package/vcgencmd/Config.in` (1 hunks)
* `buildroot-external/package/vcgencmd/vcgencmd.hash` (1 hunks)
* `buildroot-external/package/vcgencmd/vcgencmd.mk` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>📓 Path-based instructions (6)</summary>

<details>
<summary>`*/**(html|markdown|md)`: - For instructional content in documentation, use a direct and authoritative tone. Avoid expressions of politeness such as 'may' or 'please', and ensure t...</summary>

> `*/**(html|markdown|md)`: - For instructional content in documentation, use a direct and authoritative tone. Avoid expressions of politeness such as 'may' or 'please', and ensure the goal of the instruction is fronted.
> - Apply the Microsoft Style Guide to ensure documentation maintains clarity and conciseness.
> - In step-by-step instructions, front the location phrase in the instructional sentence.
> - In step-by-step instructions, front the 'goal' in the instructional sentence.
> - In step-by-step instructions, if in doubt what to front, front the 'goal' before the location phrase in the instructional sentence.
> - do not hyphenate terms like 'top-right' or 'bottom-left' with 'corner'

- `buildroot-external/Config.in`

</details>
<details>
<summary>`*/**(html|markdown|md)`: - Use bold to mark UI strings.
- If "" are used to mark UI strings, replace them by bold.</summary>

> `*/**(html|markdown|md)`: - Use bold to mark UI strings.
> - If "" are used to mark UI strings, replace them by bold.

- `buildroot-external/Config.in`

</details>
<details>
<summary>`*/**(html|markdown|md)`: - Be brief in your replies and don't add fluff like "thank you for..." and "Please let me know if"</summary>

> `*/**(html|markdown|md)`: - Be brief in your replies and don't add fluff like "thank you for..." and "Please let me know if"

- `buildroot-external/Config.in`

</details>
<details>
<summary>`*/**(html|markdown|md)`: - Use sentence-style capitalization also in headings.</summary>

> `*/**(html|markdown|md)`: - Use sentence-style capitalization also in headings.

- `buildroot-external/Config.in`

</details>
<details>
<summary>`*/**(html|markdown|md)`: do not comment on HTML used for icons</summary>

> `*/**(html|markdown|md)`: do not comment on HTML used for icons

- `buildroot-external/Config.in`

</details>
<details>
<summary>`*/**(html|markdown|md)`: Avoid flagging inline HTML for embedding videos in future reviews for this repository.</summary>

> `*/**(html|markdown|md)`: Avoid flagging inline HTML for embedding videos in future reviews for this repository.

- `buildroot-external/Config.in`

</details>

</details>

</details>

<details>
<summary>🔇 Additional comments (21)</summary><blockquote>

<details>
<summary>buildroot-external/package/rpi-eeprom/rpi-eeprom.hash (1)</summary>

`1-3`: **Hash file for rpi-eeprom sources is correct**  
The SHA-256 checksums match the expected tarball (`rpi-eeprom-cd4048df1d55be89bf84879754a4acf9c92e1f7a.tar.gz`) and its `LICENSE`. Ensure this filename aligns with the version specified in `rpi-eeprom.mk`.

</details>
<details>
<summary>buildroot-external/package/vcgencmd/vcgencmd.hash (1)</summary>

`1-3`: **Hash file for vcgencmd sources is correct**  
The SHA-256 sums for `vcgencmd-c57d8c29c46993d93f191218bbc1dc3a73fc7918.tar.gz` and its `LICENSE` are properly recorded. Confirm that this tarball filename matches the one referenced in `vcgencmd.mk`.

</details>
<details>
<summary>buildroot-external/configs/rpi4_64_defconfig (1)</summary>

`163-164`: **Enable rpi-eeprom package and RPI4 target**  
Adding `BR2_PACKAGE_RPI_EEPROM=y` and `BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4=y` correctly activates the EEPROM update tooling for 64-bit Raspberry Pi 4 builds. Placement and ordering are consistent with the surrounding entries.

</details>
<details>
<summary>buildroot-external/Config.in (1)</summary>

`20-20`: **Include vcgencmd package configuration**  
The new `source "$BR2_EXTERNAL_HASSOS_PATH/package/vcgencmd/Config.in"` integrates the `vcgencmd` package into the Buildroot menu. Positioning between `udisks2` and `xe-guest-utilities` preserves alphabetical order.

</details>
<details>
<summary>buildroot-external/package/vcgencmd/Config.in (1)</summary>

`1-5`: **Add BR2_PACKAGE_VCGENCMD configuration entry**  
Defines the `vcgencmd` package boolean option with a clear help description. Conforms to Buildroot style and naming conventions.

</details>
<details>
<summary>buildroot-external/configs/yellow_defconfig (2)</summary>

`80-80`: **Addition of flashrom package for firmware updates**

Adding flashrom support is appropriate for the Raspberry Pi Yellow board. This utility is specifically mentioned in the PR objectives for updating the EEPROM on Compute Module 5 (CM5). It will allow users to interact with flash memory chips for firmware updates.

---

`168-168`: **Enabling EEPROM package for Raspberry Pi Yellow board**

This change appropriately enables the rpi-eeprom package as mentioned in the PR objectives to support EEPROM firmware updates on the Yellow board. This allows for comparing the installed firmware version with the recommended version, which is particularly useful given the limitations of the CM4-based Yellow board described in the PR objectives.

</details>
<details>
<summary>buildroot-external/configs/rpi4_defconfig (1)</summary>

`161-162`: **Enabling EEPROM firmware updates for Raspberry Pi 4**

These additions correctly enable and target the rpi-eeprom package specifically for the Raspberry Pi 4. The `BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4=y` ensures that the appropriate firmware files for RPi4 are installed. This aligns with the PR objective of enabling EEPROM updates directly from Home Assistant OS.

</details>
<details>
<summary>buildroot-external/configs/rpi5_64_defconfig (2)</summary>

`78-78`: **Addition of flashrom package for Raspberry Pi 5**

Including flashrom for the Raspberry Pi 5 is appropriate and consistent with the changes for the Yellow board. As mentioned in the PR objectives, this will enable straightforward EEPROM updates on devices using the Compute Module 5.

---

`155-156`: **Enabling EEPROM firmware updates for Raspberry Pi 5**

These additions correctly enable the rpi-eeprom package with specific targeting for Raspberry Pi 5. This ensures that the proper firmware files are installed for this particular model, allowing users to perform EEPROM updates directly from Home Assistant OS as outlined in the PR objectives.

</details>
<details>
<summary>buildroot-external/package/vcgencmd/vcgencmd.mk (1)</summary>

`1-18`: **New package for vcgencmd utility**

The implementation of the vcgencmd package is clean and follows Buildroot package conventions. The package is properly defined with:
- Specific version pinned to a git commit hash
- Appropriate source repository
- Correct license information
- Simple installation command that copies the binary to the target filesystem

This utility is a necessary dependency for the rpi-eeprom package as it provides access to the VideoCore GPU information needed during EEPROM updates. The integration of this package supports the overall objective of enabling in-system firmware updates.

</details>
<details>
<summary>buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch (3)</summary>

`36-38`: **LGTM: Appropriate removal of sudo reference**

This change correctly removes the `sudo` reference in the user-facing message, which is appropriate as Home Assistant OS doesn't use sudo.

---

`53-55`: **LGTM: Removed unnecessary raspi-config reference**

Removing the reference to the config tool makes sense since Home Assistant OS won't use raspi-config and will only support the default EEPROM release.

---

`58-68`: **LGTM: Simplified update instructions**

Simplifying the update instructions by removing references to sudo and raspi-config makes the messages more appropriate for Home Assistant OS users.

</details>
<details>
<summary>buildroot-external/package/rpi-eeprom/0001-rpi-eeprom-update-adjust-hassos-boot-discovery.patch (1)</summary>

`26-28`: **LGTM: Improved boot partition detection for HassOS**

This change correctly modifies the boot partition detection to look for "hassos-boot" label instead of "RECOVERY", which matches Home Assistant OS's partition scheme. This enables automatic discovery without requiring manual configuration.

</details>
<details>
<summary>buildroot-external/package/rpi-eeprom/Config.in (2)</summary>

`1-9`: **LGTM: Added necessary dependencies**

Adding the Python3 and vcgencmd dependencies is appropriate as the EEPROM update tool requires these components to function. The help text update is also clearer about the purpose of the package.

---

`10-37`: **LGTM: Well-structured target platform configuration**

The new configuration options provide good flexibility for selecting which EEPROM files to install based on the target platform, potentially saving space when only specific boards need to be supported.

</details>
<details>
<summary>buildroot-external/package/rpi-eeprom/rpi-eeprom.mk (4)</summary>

`7-7`: **LGTM: Updated to newer version**

The version update to a newer commit hash is appropriate for getting the latest improvements and fixes.

---

`12-19`: **LGTM: Conditional RPi4 EEPROM file installation**

The conditional installation for RPi4 EEPROM files is well structured and will only run when the appropriate target is selected.

---

`21-27`: **LGTM: Conditional RPi5 EEPROM file installation**

The conditional installation for RPi5 EEPROM files is well structured and will only run when the appropriate target is selected.

---

`29-35`: **LGTM: Clean installation command structure**

The installation command structure is clean and properly leverages the conditional file installation functions while ensuring the necessary utilities are always installed.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-13T16:42:04Z
user: login: agners
body: coderabbitai has a valid typo. Other than that, LGTM!
state: APPROVED
author_association: MEMBER
submitted_at: 2025-05-13T17:21:55Z
user: login: sairon
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-13T18:25:03Z
user: login: sairon
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-13T18:25:58Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-13T18:26:16Z

Review comments:
diff_hunk: @@ -0,0 +1,68 @@
+From bea845559542e556dfaffcec7334695a6387e0d9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
+Date: Tue, 13 May 2025 18:07:13 +0200
+Subject: [PATCH] rpi-eeprom-update: remove raspi-config mentions and
+ unnecessary sudo in help
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There is no sudo on HAOS, remove it from messages that could be shown to
+users. Also remove raspi-config mention, we will only carry the default
+release.
+
+Signed-off-by: Jan Čermák <sairon@sairon.cz>
+Upstream: not applicable
+---
+ rpi-eeprom-update | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/rpi-eeprom-update b/rpi-eeprom-update
+index 720efb7..eb19872 100755
+--- a/rpi-eeprom-update
++++ b/rpi-eeprom-update
+@@ -30,7 +30,6 @@ FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-default}
+ FIRMWARE_BACKUP_DIR=${FIRMWARE_BACKUP_DIR:-/var/lib/raspberrypi/bootloader/backup}
+ ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1}
+ CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0}
+-RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}"
+ 
+ # Self-update is preferred to using recovery.bin because it avoids modifiy the
+ # boot partition in order to rename recovery.bin after use. Since the 2711 ROM
+@@ -315,7 +314,7 @@ applyRecoveryUpdate()
+    echo "EEPROM updates pending. Please reboot to apply the update."
+ 
+    if [ "${RPI_EEPROM_USE_FLASHROM}" = 0 ]; then
+-      echo "To cancel a pending update run \"sudo rpi-eeprom-update -r\"."
++      echo "To cancel a pending update run \"rpi-eeprom-update -r\"."
+    fi
+ }
+ 
+@@ -634,7 +633,7 @@ To update the configuration file in an EEPROM image:
+    rpi-eeprom-config pieeprom.bin --config bootconf.txt --out pieeprom-new.bin
+ 
+ To flash the new image:
+-   sudo rpi-eeprom-update -d -f ./pieeprom-new.bin
++   pi-eeprom-update -d -f ./pieeprom-new.bin
+ 
path: buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Fix typo in command name**

There's a typo in the updated command - it should be `rpi-eeprom-update` but is written as `pi-eeprom-update`.

```diff
-   pi-eeprom-update -d -f ./pieeprom-new.bin
+   rpi-eeprom-update -d -f ./pieeprom-new.bin
```

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-13T16:42:03Z
author_association: NONE
diff_hunk: @@ -1,6 +1,37 @@
 config BR2_PACKAGE_RPI_EEPROM
 	bool "rpi-eeprom"
+	select BR2_PACKAGE_PYTHON3
path: buildroot-external/package/rpi-eeprom/Config.in
user: login: agners
body: I guess this is the biggest contributor to the size increase for this feature?

I assume we have enough free space on Pi's since we don't ship it with that many drivers and firmwares? :thinking: 
created_at: 2025-05-13T17:21:12Z
author_association: MEMBER
diff_hunk: @@ -1,6 +1,37 @@
 config BR2_PACKAGE_RPI_EEPROM
 	bool "rpi-eeprom"
+	select BR2_PACKAGE_PYTHON3
path: buildroot-external/package/rpi-eeprom/Config.in
user: login: sairon
body: Yep, that's what I wrote in the last paragraph. We still have plenty of space (the bloat is from 170M to ~180M), so there's no big concern we would need to evict it soon. It just feels like an overkill to add it just to parse some binary files, that's all.
created_at: 2025-05-13T18:25:03Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,68 @@
+From bea845559542e556dfaffcec7334695a6387e0d9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
+Date: Tue, 13 May 2025 18:07:13 +0200
+Subject: [PATCH] rpi-eeprom-update: remove raspi-config mentions and
+ unnecessary sudo in help
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There is no sudo on HAOS, remove it from messages that could be shown to
+users. Also remove raspi-config mention, we will only carry the default
+release.
+
+Signed-off-by: Jan Čermák <sairon@sairon.cz>
+Upstream: not applicable
+---
+ rpi-eeprom-update | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/rpi-eeprom-update b/rpi-eeprom-update
+index 720efb7..eb19872 100755
+--- a/rpi-eeprom-update
++++ b/rpi-eeprom-update
+@@ -30,7 +30,6 @@ FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-default}
+ FIRMWARE_BACKUP_DIR=${FIRMWARE_BACKUP_DIR:-/var/lib/raspberrypi/bootloader/backup}
+ ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1}
+ CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0}
+-RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}"
+ 
+ # Self-update is preferred to using recovery.bin because it avoids modifiy the
+ # boot partition in order to rename recovery.bin after use. Since the 2711 ROM
+@@ -315,7 +314,7 @@ applyRecoveryUpdate()
+    echo "EEPROM updates pending. Please reboot to apply the update."
+ 
+    if [ "${RPI_EEPROM_USE_FLASHROM}" = 0 ]; then
+-      echo "To cancel a pending update run \"sudo rpi-eeprom-update -r\"."
++      echo "To cancel a pending update run \"rpi-eeprom-update -r\"."
+    fi
+ }
+ 
+@@ -634,7 +633,7 @@ To update the configuration file in an EEPROM image:
+    rpi-eeprom-config pieeprom.bin --config bootconf.txt --out pieeprom-new.bin
+ 
+ To flash the new image:
+-   sudo rpi-eeprom-update -d -f ./pieeprom-new.bin
++   pi-eeprom-update -d -f ./pieeprom-new.bin
+ 
path: buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch
user: login: sairon
body: Thanks, fat fingers probably...
created_at: 2025-05-13T18:25:58Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,68 @@
+From bea845559542e556dfaffcec7334695a6387e0d9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
+Date: Tue, 13 May 2025 18:07:13 +0200
+Subject: [PATCH] rpi-eeprom-update: remove raspi-config mentions and
+ unnecessary sudo in help
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There is no sudo on HAOS, remove it from messages that could be shown to
+users. Also remove raspi-config mention, we will only carry the default
+release.
+
+Signed-off-by: Jan Čermák <sairon@sairon.cz>
+Upstream: not applicable
+---
+ rpi-eeprom-update | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/rpi-eeprom-update b/rpi-eeprom-update
+index 720efb7..eb19872 100755
+--- a/rpi-eeprom-update
++++ b/rpi-eeprom-update
+@@ -30,7 +30,6 @@ FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-default}
+ FIRMWARE_BACKUP_DIR=${FIRMWARE_BACKUP_DIR:-/var/lib/raspberrypi/bootloader/backup}
+ ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1}
+ CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0}
+-RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}"
+ 
+ # Self-update is preferred to using recovery.bin because it avoids modifiy the
+ # boot partition in order to rename recovery.bin after use. Since the 2711 ROM
+@@ -315,7 +314,7 @@ applyRecoveryUpdate()
+    echo "EEPROM updates pending. Please reboot to apply the update."
+ 
+    if [ "${RPI_EEPROM_USE_FLASHROM}" = 0 ]; then
+-      echo "To cancel a pending update run \"sudo rpi-eeprom-update -r\"."
++      echo "To cancel a pending update run \"rpi-eeprom-update -r\"."
+    fi
+ }
+ 
+@@ -634,7 +633,7 @@ To update the configuration file in an EEPROM image:
+    rpi-eeprom-config pieeprom.bin --config bootconf.txt --out pieeprom-new.bin
+ 
+ To flash the new image:
+-   sudo rpi-eeprom-update -d -f ./pieeprom-new.bin
++   pi-eeprom-update -d -f ./pieeprom-new.bin
+ 
path: buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch
user: login: coderabbitai[bot]
body: @sairon No problem! Those kinds of typos happen to everyone. It's a simple fix and shouldn't take much effort to correct. 👍


<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer>@sairon No problem! Those kinds of typos happen to everyone. It's a simple fix and shouldn't take much effort to correct. 👍</answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-13T18:26:16Z
author_association: NONE

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-05-13T16:42:00Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

<details>
<summary>📝 Walkthrough</summary>

"""
## Walkthrough

The changes introduce new Buildroot packages and configuration options for Raspberry Pi EEPROM and the `vcgencmd` utility, update configuration files for multiple Raspberry Pi boards to enable these packages, and enhance the EEPROM firmware packaging logic. Patches to the EEPROM update script improve compatibility with Home Assistant OS and simplify user instructions.

## Changes

| File(s)                                                                                          | Change Summary                                                                                                                                                                                                                               |
|--------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| buildroot-external/Config.in <br> buildroot-external/package/vcgencmd/Config.in                  | Added source inclusion for `vcgencmd` configuration; introduced new `BR2_PACKAGE_VCGENCMD` boolean config option for the `vcgencmd` utility.                                                          |
| buildroot-external/configs/rpi4_64_defconfig <br> buildroot-external/configs/rpi4_defconfig      | Enabled `BR2_PACKAGE_RPI_EEPROM` and `BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4` in both Raspberry Pi 4 defconfigs.                                                                                          |
| buildroot-external/configs/rpi5_64_defconfig                                                     | Enabled `BR2_PACKAGE_FLASHROM`, `BR2_PACKAGE_RPI_EEPROM`, and `BR2_PACKAGE_RPI_EEPROM_TARGET_RPI5` for Raspberry Pi 5 64-bit configuration.                                                                                   |
| buildroot-external/configs/yellow_defconfig                                                      | Enabled `BR2_PACKAGE_FLASHROM` and `BR2_PACKAGE_RPI_EEPROM` in the yellow board configuration.                                                                                                        |
| buildroot-external/package/rpi-eeprom/0001-rpi-eeprom-update-adjust-hassos-boot-discovery.patch  | Patched `rpi-eeprom-update` script to detect HassOS boot partition by label "hassos-boot" instead of "RECOVERY".                                                                                      |
| buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch | Patched `rpi-eeprom-update` script to remove references to `raspi-config` and `sudo` in user messages; removed related variable.                                                                      |
| buildroot-external/package/rpi-eeprom/Config.in                                                  | Enhanced `rpi-eeprom` config: auto-selects `python3` and `vcgencmd` dependencies, updates help text, and adds target selection menu for EEPROM installation (any, RPi4, RPi5).                        |
| buildroot-external/package/rpi-eeprom/rpi-eeprom.hash <br> buildroot-external/package/vcgencmd/vcgencmd.hash | Added hash files for `rpi-eeprom` and `vcgencmd` packages, containing SHA-256 checksums for source and license files.                                                                                 |
| buildroot-external/package/rpi-eeprom/rpi-eeprom.mk                                              | Updated to new EEPROM version, removed static firmware path and build commands, added conditional installation for RPi4/RPi5 firmware, and installed EEPROM utilities.                                 |
| buildroot-external/package/vcgencmd/vcgencmd.mk                                                  | Introduced new makefile for `vcgencmd` package: sets version, source, license, build system (CMake), and install command for the utility.                                                             |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant User
    participant Buildroot
    participant rpi-eeprom Package
    participant vcgencmd Package

    User->>Buildroot: Select BR2_PACKAGE_RPI_EEPROM and/or BR2_PACKAGE_VCGENCMD
    Buildroot->>rpi-eeprom Package: Resolve dependencies (python3, vcgencmd)
    Buildroot->>vcgencmd Package: Build vcgencmd utility (if selected)
    Buildroot->>rpi-eeprom Package: Build EEPROM utilities and select firmware (RPi4, RPi5, or both)
    rpi-eeprom Package->>Buildroot: Install firmware and utilities to target rootfs
    vcgencmd Package->>Buildroot: Install vcgencmd binary to target rootfs
```

```mermaid
sequenceDiagram
    participant rpi-eeprom-update Script
    participant System Partition
    participant User

    rpi-eeprom-update Script->>System Partition: Search for partition label "hassos-boot"
    alt Found
        rpi-eeprom-update Script->>System Partition: Mount partition and set BOOTFS variable
    else Not Found
        rpi-eeprom-update Script->>User: Prompt for manual BOOTFS configuration
    end
```
"""

</details>

<!-- walkthrough_end -->

<!-- announcements_start -->

> [!TIP]
> <details>
> <summary>⚡️ Faster reviews with caching</summary>
> 
> - CodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 16th. To opt out, configure `Review - Disable Cache` at either the organization or repository level. If you prefer to disable all data retention across your organization, simply turn off the `Data Retention` setting under your Organization Settings.
> 
> Enjoy the performance boost—your workflow just got faster.
> 
> </details>

<!-- announcements_end -->

---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 9bb1b59081166e0fbd9131085001d3dc35bd5d60 and 03c13c7f670a3304f31ae28dfaee1295d0e550df.

</details>

<details>
<summary>📒 Files selected for processing (9)</summary>

* `buildroot-external/configs/rpi4_64_defconfig` (1 hunks)
* `buildroot-external/configs/rpi4_defconfig` (1 hunks)
* `buildroot-external/configs/rpi5_64_defconfig` (2 hunks)
* `buildroot-external/configs/yellow_defconfig` (2 hunks)
* `buildroot-external/package/rpi-eeprom/0001-rpi-eeprom-update-adjust-hassos-boot-discovery.patch` (1 hunks)
* `buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch` (1 hunks)
* `buildroot-external/package/rpi-eeprom/Config.in` (1 hunks)
* `buildroot-external/package/rpi-eeprom/rpi-eeprom.hash` (1 hunks)
* `buildroot-external/package/rpi-eeprom/rpi-eeprom.mk` (1 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (9)</summary>

* buildroot-external/configs/rpi4_defconfig
* buildroot-external/package/rpi-eeprom/rpi-eeprom.hash
* buildroot-external/configs/rpi4_64_defconfig
* buildroot-external/configs/rpi5_64_defconfig
* buildroot-external/package/rpi-eeprom/rpi-eeprom.mk
* buildroot-external/configs/yellow_defconfig
* buildroot-external/package/rpi-eeprom/0002-rpi-eeprom-update-remove-raspi-config-mentions-and-u.patch
* buildroot-external/package/rpi-eeprom/0001-rpi-eeprom-update-adjust-hassos-boot-discovery.patch
* buildroot-external/package/rpi-eeprom/Config.in

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=home-assistant/operating-system&utm_content=4063):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` or `@coderabbitai title` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: jens-maus
created_at: 2025-05-13T18:37:32Z
body: Sorry to interfere, but can I ask the question what this PR is really about? I thought that the rpi-eeprom BR package you have in the Buildroot-external directory simple grabs the eeprom files an put them into the boot partition from which a rpi boots and during boot flashes the eeprom of the files in the boot partition have a newer timestamp/version than the one in the eeprom itself.

In fact that's exactly the procedure we have in our RaspberryMatic project and AFAICS it works as expected. So what exactly is the use case why you need that rpi-eeprom-update tool at all? In case of RaspberryMatic we simply regularly update the rpi-eeprom package to ship newer rpi-eeprom version from release to release, this by reflagging the boot partition with each updated image users get newer rpi-eeprom versions which we certify to be valid for a new release..
author_association: MEMBER
user: login: sairon
created_at: 2025-05-14T11:20:04Z
body: @jens-maus We discussed whether we should revive the `rpi-eeprom` package in the state as it was before #1103 or take another approach. Using the former one had several downsides - especially those that were seen in the past already, where things broke unexpectedly in some exotic configurations. And that was back in the days where HAOS had maybe like 10 % of deployments compared to the current state. Simply put, we find it too risky to do it unattended along with the OS upgrade now. Furthermore there could be chicken-egg problems where you need to update to newer EEPROM version before updating the system. This is also an edge case but we already saw it recently, and with the userspace update tools we can make this process less painful if needed (i.e. what I described in the opening post - at least you don't need to switch SD cards to boot another OS). Putting only the image to the OS bundle is much less flexible. Also, it needs to be noted that with the `pieeprom.upd` image created build-time, the bootloader configuration is reset every time, as it's baked in the EEPROM image too.

In short, this PR is about adding the necessary components for the EEPROM update in a user-friendly and safe way, more changes that would actually make updating the EEPROM more user-friendly will come later.
author_association: MEMBER