Compare commits

..

26 Commits

Author SHA1 Message Date
Tim Gover
b67b21ddda imager: 2712: Move imager release to 2025-01-22 2025-01-22 16:36:34 +00:00
Tim Gover
9c95b83551 2025-01-22: 2712: Promote 2025-01-22 to default release (default) 2025-01-22 10:21:04 +00:00
Tim Gover
7918c84b4b pieeprom-2025-01-22: 2712: Add DT property for hash of signed boot image (latest)
* Add DT /chosen property signed-boot boot.img hash
  Make the sha256 hash of the boot.img file available via
  device-tree /proc/device-tree/chosen/bootloader/boot_img_sha256 if
  signed boot is enabled.
* filesystem: GPT autoboot/reboot partition number fixes for Pi4 and older
* Fix problems when setting arm_freq_min=arm_freq and display clocks
  if performance governor is not enabled.
2025-01-22 08:45:40 +00:00
Tim Gover
478ad485ca test: Update test script 2025-01-19 11:04:52 +00:00
Tim Gover
0944712c0a scripts: Failover to /usr/lib before /lib if FIRMWARE_ROOT is not set
Update the scripts to follow "merged-/usr" conventions by default
https://wiki.debian.org/UsrMerge
2025-01-18 20:12:03 +00:00
Tim Gover
cc58b7d6ce pieeprom-2025-01-14: 2712: Add set_reboot_order API (latest)
* Add set_reboot_order API and config.txt properties
  If set_reboot_order is defined in config.txt or set via vcmailbox
  then this will override the bootloader config BOOT_ORDER property
  on the next reboot. The parameter is stored in a reset safe register
  and is cleared by the bootloader after reading it.
  Typically, the config.txt value only be used via rpiboot to
  override the boot-order on the next reboot. Otherwise, it should
  reside in a conditional section so that the boot order is not
  overridden on every reboot.
  Example, test network boot
  sudo vcmailbox 0x0003808b 4 4 0xf4612; sudo reboot
2025-01-14 15:17:39 +00:00
andrum993
6a7ca681cb 2712 release-notes.md: correct name of new config parameter 2025-01-13 17:08:16 +00:00
Tim Gover
62292b43ad pieeprom-2025-01-13: 2712: Improved SDRAM refresh timings for Pi5 - 16GB (latest)
* Improved SDRAM refresh timings for Pi5 - 16GB
* Add an option to wait for the power button to be pressed before booting.
  If POWER_OFF_ON_HALT=1 and WAIT_FOR_POWER_BTN=1 in the bootloader
  config then the bootloader will wait for either the power button
  to be pressed or an RTC alarm before booting. The wait state
  switches the PMIC to STANDBY mode which is the lowest possible
  power state.
2025-01-13 10:11:55 +00:00
Tim Gover
54d9c333a9 pieeprom-2025-01-08: 2712: Update SDRAM timings for BCM2712D0 products (latest)
* Update SDRAM timings for BCM2712D0 products.
2025-01-08 18:07:33 +00:00
Tim Gover
edf686cd51 pieeprom-2025-01-07: 2712: Fixup M.2 HAT+ detection (latest)
* Fix a potential timing issue introduced in the 2025-01-06
  release when enabling PCIE_PWR when booting from SD/USB.
2025-01-07 17:26:47 +00:00
Tim Gover
888e374d47 pieeprom-2025-01-06: 2712: Stop the fan after fan-probe (latest)
* Stop the fan after after fan-probe
  After the fan-probe has completed drive the fan PWM GPIO
  to high if a fan was detected and let the OS take over.
* Add SD_QUIRKS for hardware bringup / workarounds
  Add a new SD_QUIRKS flags property which can be used to
  disable high-speed mode (bit 0). Other bits are reserved for
  future use.
* Change uart_2ndstage default to 1 on Pi5
  Change the default to 1 because this gives useful diagnostics
  for device-tree loading with minimal overhead. Set uart_2ndstage=0
  or BOOT_UART=0 to disable this.
* Move M.2 HAT+ detection to early boot.
  Initialse M.2 HAT+ detection before DDR init to give NVMe
  drive firmware more time to boot.
2025-01-06 17:43:42 +00:00
Tim Gover
f02f0eaf4e pieeprom-2024-12-19: 2712: Disable PWM fan at shutdown (POWER_OFF_ON_HALT=0) (latest)
* Disable fan PWM before shutdown
  Drive the RP1 fan PWM GPIO high before entering the VPU
  sleep (POWER_OFF_ON_HALT=0) to stop the fan spinning.
* Disable fan PWM GPIO between RP1 init and fan probe
  Drive fan PWM GPIO high during early boot to disable the fan
  until it is probed during the device-tree setup stage.
  This stops the spinning at max rpm during network-install.
* arm_dt: enable_uart defaults to 0 on 2712
  The default value of enable_uart on 2712 is 0, regardless of the
  presence of the debug UART cable, so guarantee that the default is
  always set correctly.
2024-12-19 12:05:43 +00:00
Tim Gover
4ba7cedf18 pieeprom-2024-12-15: 2712: Add net install to boot menu (latest)
* Add net install to boot menu
  Press N (or shift).
* enable_uart: Require enable_uart=1 to enable RP1 UART console
  See: https://github.com/raspberrypi/rpi-eeprom/issues/643
2024-12-16 09:13:08 +00:00
Tim Gover
6b431180b8 rpi-eeprom-update: Update user prompt to indicate how to install update immediately
Also, link to raspi-config as the mechanism for changing bootloader
update policies. raspi-config already provides a UI for selecting
the bootloader release streams and is the best place to provide
any other configuration options.
2024-12-12 13:52:31 +00:00
Tim Gover
adb3b9befc rpi-eeprom-config: Remove misleading message about cancelling updates
Flashrom is the default update mechanism on Pi5 and is not
cancellable. Remove this misleading message.
rpi-eeprom-update already has a message which knows about flashrom.
2024-12-12 13:52:31 +00:00
Phil Elwell
d57c084c9f bug_report template: Be more precise about the UART pins 2024-12-10 14:41:01 +00:00
Tim Gover
585ec185f2 rpi-eeprom-config: Increase default timeouts
Increase the delays to compensate for an (unlikely) retry loop
if flashrom reports an error.
2024-12-09 19:12:00 +00:00
Tim Gover
af0426b473 rpi-eeprom-update: Add retries and verification to flashrom stage
Retry flashrom updates on failure and explicitly verify the images.
So far, there haven't been any reports of flashrom failures but
retrying is the best course of action in case this failure ever
occurs.
2024-12-09 19:12:00 +00:00
Tim Gover
fe7bfc7201 pieeprom-2024-12-07: 2711: 2712: Enable NUMA by default (latest)
* Enable banklow (and so NUMA) by default
  banklow=1 (2712) and banklow=3 (2711) give the best performance.
* enable_uart=1 now enables a Linix UART console on the 40-pin header
  unless a cable is detected on the dedicated boot-uart.
* Recreate internal bl31 stub from clean git tree to fix dirty commit
  message.
2024-12-07 18:14:54 +00:00
Tim Gover
9621ef6a92 pieeprom-2024-11-27: 2712: rp1fw: Add FIFO_STATE & DRAIN_TX, fix CAN_ADD_PROGRAM (latest)
* rp1fw: Add FIFO_STATE & DRAIN_TX, fix CAN_ADD_PROGRAM
  RP1 firmware eb39cfd516f8c90628aa9d91f52370aade5d0a55 adds
  methods to drain the TX FIFO and retrieve the state of both FIFOs. It
  also fixes the CAN_ADD_PROGRAM implementation, which was fatally
  broken.
* network-install - Update the UI to display the board model / variant.
2024-11-27 17:30:53 +00:00
Tim Gover
4a7375bebe imager: Update 2712 imager release to 2024-11-12 2024-11-25 13:56:09 +00:00
Tim Gover
eefb7b83bc image: 2712: Update config for POWER_OFF_ON_HALT and NET_INSTALL_AT_POWER_ON
* The 2024-11-12 automatically sets the POWER_OFF_ON_HALT property
  according to the board-type so remove the override network install
  images.
* Set NET_INSTALL_AT_POWER_ON=1 by default which briefly display
  the network-install / boot-menu UI after a cold power-on.
  This can be switched off by removing the line
  either via "rpi-eeprom-config --edit" or the new menu in raspi-config
  Advanced Options.
2024-11-22 18:08:42 +00:00
Tim Gover
85e8a5924c imager: remove unused boot-conf-default.txt files 2024-11-22 18:08:42 +00:00
Tim Gover
d2f255b464 pieeprom: 2024-11-12-2712: Promote 2024-11-12 to default release (default)
* Promote 2024-11-12 to the default release and archive older versions.
2024-11-22 17:08:35 +00:00
Tim Gover
cc0ad4698e imager: gitignore: Ignore the imager build directories 2024-11-12 18:10:45 +00:00
Tim Gover
96349fe65c pieeprom: 2024-11-12-2712: Enable initial_turbo=60 by default (latest)
* net-install: Fix keyboard detection on hubs
* recovery: Always enable UART debug output on 2712
* Set POWER_OFF_ON_HALT defaults
  The default value for POWER_OFF_ON_HALT on CM5 and Pi 500 will be 1.
  Pi5 defaults to 0 for backwards compatibility.
* boot-time: Remove unnecessary 1 second delay when configuring DWC2 controller.
* Enable initial_turbo=60 by default
  This reduces the time to get load and decompress the kernel.
* logging: Remove superfluous newline on SDRAM refresh changed messages
* Fix initial_turbo duration
  The timeout counter for the previous implementation could run too quickly
  causing the initial-turbo timeout to end earlier than expected.
* rp1-fw: Add the mailbox firmware interface, and PIO support that uses it.
* rp1-fw: Turn off unused 25MHz Ethernet refclk
2024-11-12 18:10:45 +00:00
37 changed files with 178 additions and 31 deletions

View File

@@ -80,7 +80,7 @@ body:
attributes:
label: Bootloader logs
description: |
If the problem can't be diagnosed from the bootloader HDMI diagnostics screen then we'll normally need to see more detailed logs to diagnose the problem. The bootloader and GPU firmware can be configured to enable log output to the UART pins `14` and `15` on the [40-pin GPIO header](https://www.raspberrypi.com/documentation/computers/os.html#gpio-and-the-40-pin-header)
If the problem can't be diagnosed from the bootloader HDMI diagnostics screen then we'll normally need to see more detailed logs to diagnose the problem. The bootloader and GPU firmware can be configured to enable log output to the UART (GPIOs `14` and `15`, pins `8` and `10` on the [40-pin GPIO header](https://www.raspberrypi.com/documentation/computers/os.html#gpio-and-the-40-pin-header, or on the Debug header on a Pi 5)
* To enable UART logging from the bootloader specify [BOOT_UART=1](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#BOOT_UART) in the EEPROM config
* To enable UART logging from the `start.elf` GPU firmware stage add [uart_2ndstage=1](https://www.raspberrypi.com/documentation/computers/config_txt.html#uart_2ndstage) to `config.txt`.
* If you are familiar with using Wireshark then it's also possible to use [NETCONSOLE](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#NETCONSOLE) write logs to UDP packets.

Binary file not shown.

Binary file not shown.

View File

@@ -1,5 +1,10 @@
# Raspberry Pi4 bootloader EEPROM release notes
## 2024-12-07: Enable banklow (and so NUMA) by default (latest)
* Enable banklow (and so NUMA) by default
banklow=1 (2712) and banklow=3 (2711) give the best performance.
## 2024-10-21: Fix PCIe BAR issue for some switches (latest)
* Boot-menu improvements

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,5 +1,125 @@
# Raspberry Pi5 bootloader EEPROM release notes
## 2025-01-22: Promote 2025-01-22 to default release (default)
## 2025-01-22: Add DT /chosen property signed-boot boot.img hash (latest)
* Add DT /chosen property signed-boot boot.img hash
Make the sha256 hash of the boot.img file available via
device-tree /proc/device-tree/chosen/bootloader/boot_img_sha256 if
signed boot is enabled.
* filesystem: GPT autoboot/reboot partition number fixes for Pi4 and older
* Fix problems when setting arm_freq_min=arm_freq and display clocks
if performance governor is not enabled.
## 2025-01-14: Add set_reboot_order API (latest)
* Add set_reboot_order API and config.txt properties
If set_reboot_order is defined in config.txt or set via vcmailbox
then this will override the bootloader config BOOT_ORDER property
on the next reboot. The parameter is stored in a reset safe register
and is cleared by the bootloader after reading it.
Typically, the config.txt value only be used via rpiboot to
override the boot-order on the next reboot. Otherwise, it should
reside in a conditional section so that the boot order is not
overridden on every reboot.
Example, test network boot
sudo vcmailbox 0x0003808b 4 4 0xf4612; sudo reboot
## 2025-01-13: Improved SDRAM refresh timings for Pi5 16GB (latest)
* Improved SDRAM refresh timings for Pi5 - 16GB
* Add an option to wait for the power button to be pressed before booting.
If POWER_OFF_ON_HALT=1 and WAIT_FOR_POWER_BUTTON=1 in the bootloader
config then the bootloader will wait for either the power button
to be pressed or an RTC alarm before booting. The wait state
switches the PMIC to STANDBY mode which is the lowest possible
power state.
## 2025-01-08: Update SDRAM refresh timings for BCM2712D0 products (latest)
* Update SDRAM timings for BCM2712D0 products.
## 2025-01-07: Fixup M.2 HAT+ detection (latest)
* Fix a potential timing issue introduced in the 2025-01-06
release when enabling PCIE_PWR when booting from SD/USB.
## 2025-01-06: Stop the fan after after fan-probe (latest)
* Stop the fan after after fan-probe
After the fan-probe has completed drive the fan PWM GPIO
to high if a fan was detected and let the OS take over.
* Add SD_QUIRKS for hardware bringup / workarounds
Add a new SD_QUIRKS flags property which can be used to
disable high-speed mode (bit 0). Other bits are reserved for
future use.
* Change uart_2ndstage default to 1 on Pi5
Change the default to 1 because this gives useful diagnostics
for device-tree loading with minimal overhead. Set uart_2ndstage=0
or BOOT_UART=0 to disable this.
* Move M.2 HAT+ detection to early boot.
Initialse M.2 HAT+ detection before DDR init to give NVMe
drive firmware more time to boot.
## 2024-12-19: Disable fan PWM before shutdown (latest)
* Disable fan PWM before shutdown
Drive the RP1 fan PWM GPIO high before entering the VPU
sleep (POWER_OFF_ON_HALT=0) to stop the fan spinning.
* Disable fan PWM GPIO between RP1 init and fan probe
Drive fan PWM GPIO high during early boot to disable the fan
until it is probed during the device-tree setup stage.
This stops the spinning at max rpm during network-install.
* arm_dt: enable_uart defaults to 0 on 2712
The default value of enable_uart on 2712 is 0, regardless of the
presence of the debug UART cable, so guarantee that the default is
always set correctly.
## 2024-12-15: Add net install to boot menu (latest)
* Add net install to boot menu
Press N (or shift).
* enable_uart: Require enable_uart=1 to enable RP1 UART console
See: https://github.com/raspberrypi/rpi-eeprom/issues/643
## 2024-12-07: Enable banklow (and so NUMA) by default (latest)
* Enable banklow (and so NUMA) by default
banklow=1 (2712) and banklow=3 (2711) give the best performance.
* enable_uart=1 now enables a Linix UART console on the 40-pin header
unless a cable is detected on the dedicated boot-uart.
* Recreate internal bl31 stub from clean git tree to fix dirty commit message.
## 2024-11-27: rp1fw: Add FIFO_STATE & DRAIN_TX, fix CAN_ADD_PROGRAM (default)
* rp1fw: Add FIFO_STATE & DRAIN_TX, fix CAN_ADD_PROGRAM
RP1 firmware eb39cfd516f8c90628aa9d91f52370aade5d0a55 adds methods
to drain the TX FIFO and retrieve the state of both FIFOs. It also
fixes the CAN_ADD_PROGRAM implementation, which was fatally broken.
* network-install - Update the UI to display the board model / variant.
## 2024-11-12: Promote 2024-11-12 to default release (default)
* Promote 2024-11 to the default release and archive older versions.
## 2024-11-12: Enable initial_turbo=60 by default (latest)
* net-install: Fix keyboard detection on hubs
* recovery: Always enable UART debug output on 2712
* Set POWER_OFF_ON_HALT defaults
The default value for POWER_OFF_ON_HALT on CM5 and Pi 500 will be 1.
Pi5 defaults to 0 for backwards compatibility.
* boot-time: Remove unnecessary 1 second delay when configuring DWC2 controller.
* Enable initial_turbo=60 by default
This reduces the time to get load and decompress the kernel.
* logging: Remove superfluous newline on SDRAM refresh changed messages
* Fix initial_turbo duration
The timeout counter for the previous implementation could run too quickly
causing the initial-turbo timeout to end earlier than expected.
* rp1-fw: Add the mailbox firmware interface, and PIO support that uses it.
* rp1-fw: Turn off unused 25MHz Ethernet refclk
## 2024-11-07: recovery.bin - Update default release to latest version (default)
* Update recovery.bin to the most recent version required for CM5 and Pi500.

4
imager/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
images-2711/
images-2712/
release-2711/
release-2712/

View File

@@ -1,6 +0,0 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
ENABLE_SELF_UPDATE=1
BOOT_ORDER=0xf41

View File

@@ -1,4 +0,0 @@
[all]
BOOT_UART=1
BOOT_ORDER=0xf461
POWER_OFF_ON_HALT=0

View File

@@ -1,5 +1,4 @@
[all]
BOOT_UART=1
BOOT_ORDER=0xf21
POWER_OFF_ON_HALT=0
NET_INSTALL_AT_POWER_ON=1

View File

@@ -1,4 +1,4 @@
[all]
BOOT_UART=1
BOOT_ORDER=0xf461
POWER_OFF_ON_HALT=0
NET_INSTALL_AT_POWER_ON=1

View File

@@ -1,5 +1,4 @@
[all]
BOOT_UART=1
BOOT_ORDER=0xf146
POWER_OFF_ON_HALT=0
NET_INSTALL_AT_POWER_ON=1

View File

@@ -8,4 +8,4 @@ script_dir=$(cd "$(dirname "$0")" && pwd)
${script_dir}/make-release critical 2023-01-11 000138c0 "${script_dir}/2711-config" release-2711 rpi-boot-eeprom-recovery 2711
# Pi5
${script_dir}/make-release critical 2024-09-23 "" "${script_dir}/2712-config" release-2712 rpi-boot-eeprom-recovery 2712
${script_dir}/make-release critical 2025-01-22 "" "${script_dir}/2712-config" release-2712 rpi-boot-eeprom-recovery 2712

View File

@@ -111,7 +111,7 @@ def exit_error(msg):
sys.stderr.write("ERROR: %s\n" % msg)
sys.exit(1)
def shell_cmd(args, timeout=5, echo=False):
def shell_cmd(args, timeout=10, echo=False):
"""
Executes a shell command waits for completion returning STDOUT. If an
error occurs then exit and output the subprocess stdout, stderr messages
@@ -171,8 +171,6 @@ def apply_update(config, eeprom=None, config_src=None):
sys.stdout.write("Updating bootloader EEPROM\n image: %s\nconfig_src: %s\nconfig: %s\n%s\n%s\n%s\n" %
(eeprom_image, config_src, config, '#' * 80, config_str, '#' * 80))
sys.stdout.write("\n*** To cancel this update run 'sudo rpi-eeprom-update -r' ***\n\n")
# Ignore APT package checksums so that this doesn't fail when used
# with EEPROMs with configs delivered outside of APT.
# The checksums are really just a safety check for automatic updates.
@@ -180,7 +178,7 @@ def apply_update(config, eeprom=None, config_src=None):
# If flashrom is used then the command will not return until the EEPROM
# has been updated so use a larger timeout.
shell_cmd(args, timeout=60, echo=True)
shell_cmd(args, timeout=180, echo=True)
def edit_config(eeprom=None):
"""

View File

@@ -14,6 +14,8 @@ LOCAL_MODE=0
if [ -n "$FIRMWARE_ROOT" ]; then
# Provided by environment
true
elif [ -d /usr/lib/firmware/raspberrypi/bootloader ] || [ -d /usr/lib/firmware/raspberrypi/bootloader-2711 ] || [ -d /usr/lib/firmware/raspberrypi/bootloader-2712 ]; then
FIRMWARE_ROOT=/usr/lib/firmware/raspberrypi/bootloader
elif [ -d /lib/firmware/raspberrypi/bootloader ] || [ -d /lib/firmware/raspberrypi/bootloader-2711 ] || [ -d /lib/firmware/raspberrypi/bootloader-2712 ]; then
FIRMWARE_ROOT=/lib/firmware/raspberrypi/bootloader
else
@@ -189,6 +191,32 @@ prepareImage()
fi
}
runFlashrom()
{
attempts=5
freq=16000
# If flashrom fails then retry at a lower speed.
while [ ${attempts} -gt 0 ]; do
echo "flashrom -p linux_spi:dev=${SPIDEV},spispeed=${freq} -w ${BOOTFS}/pieeprom.upd"
if flashrom -p linux_spi:dev=${SPIDEV},spispeed=${freq} -w "${BOOTFS}/pieeprom.upd" >> "${FLASHROM_LOG}"; then
echo "Verifying update"
if flashrom -p linux_spi:dev=${SPIDEV},spispeed=${freq} -v "${BOOTFS}/pieeprom.upd" >> "${FLASHROM_LOG}"; then
echo "VERIFY: SUCCESS"
return 0
else
echo "VERIFY: FAIL"
fi
fi
freq=8000
attempts=$((attempts - 1))
if [ ${attempts} -gt 0 ]; then
echo "Failed to update bootloader using flashrom. Retrying."
fi
done
return 1
}
applyRecoveryUpdate()
{
[ -n "${BOOTLOADER_UPDATE_IMAGE}" ] || [ -n "${VL805_UPDATE_IMAGE}" ] || die "No update images specified"
@@ -266,8 +294,7 @@ applyRecoveryUpdate()
echo "a bootloader rescue SD card image which restores the default bootloader image."
echo
FLASHROM_LOG="$(mktemp)"
echo "flashrom -p linux_spi:dev=${SPIDEV},spispeed=16000 -w ${BOOTFS}/pieeprom.upd"
if flashrom -p linux_spi:dev=${SPIDEV},spispeed=16000 -w "${BOOTFS}/pieeprom.upd" > "${FLASHROM_LOG}"; then
if runFlashrom; then
# Success - remove update files from the boot partition
removePreviousUpdates
echo "UPDATE SUCCESSFUL"
@@ -877,6 +904,11 @@ 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 ""
printVersions
write_status_info "EXIT_UPDATE_REQUIRED"
exit ${EXIT_UPDATE_REQUIRED}

View File

@@ -1,5 +1,5 @@
FIRMWARE_ROOT=/lib/firmware/raspberrypi/bootloader
FIRMWARE_ROOT=/usr/lib/firmware/raspberrypi/bootloader
FIRMWARE_RELEASE_STATUS="default"
FIRMWARE_BACKUP_DIR="/var/lib/raspberrypi/bootloader/backup"
EEPROM_CONFIG_HOOK=

View File

@@ -20,14 +20,14 @@ CONFIG="/etc/default/rpi-eeprom-update"
[ "$(id -u)" = "0" ] || die "$0 Must be run as root - try 'sudo $0 [-b]'"
# Clear out the old firmware
rm -rf /lib/firmware/raspberrypi/bootloader
rm -rf /lib/firmware/raspberrypi/bootloader-2711
rm -rf /lib/firmware/raspberrypi/bootloader-2712
rm -rf /usr/lib/firmware/raspberrypi/bootloader
rm -rf /usr/lib/firmware/raspberrypi/bootloader-2711
rm -rf /usr/lib/firmware/raspberrypi/bootloader-2712
mkdir -p /lib/firmware/raspberrypi/bootloader-2711
rsync -alv "${FIRMWARE_DIR}-2711"/* /lib/firmware/raspberrypi/bootloader-2711 || echo "Failed"
mkdir -p /lib/firmware/raspberrypi/bootloader-2712
rsync -alv "${FIRMWARE_DIR}-2712"/* /lib/firmware/raspberrypi/bootloader-2712 || echo "Failed"
mkdir -p /usr/lib/firmware/raspberrypi/bootloader-2711
rsync -alv "${FIRMWARE_DIR}-2711"/* /usr/lib/firmware/raspberrypi/bootloader-2711 || echo "Failed"
mkdir -p /usr/lib/firmware/raspberrypi/bootloader-2712
rsync -alv "${FIRMWARE_DIR}-2712"/* /usr/lib/firmware/raspberrypi/bootloader-2712 || echo "Failed"
cp -fv "${script_dir}/../rpi-eeprom-config" /usr/bin
cp -fv "${script_dir}/../rpi-eeprom-digest" /usr/bin