* arm_loader: Add iommu_dma_numa_policy=interleave when needed
This applies a similar numa interleave for iommu dma kernel allocations.
This includes buffers allocated for hevc and v3d.
See: https://forums.raspberrypi.com/viewtopic.php?t=392666
* Rebuild RP1 firmware to reduce size.
* arm_loader: Add iommu_dma_numa_policy=interleave when needed
This applies a similar numa interleave for iommu dma kernel allocations.
This includes buffers allocated for hevc and v3d.
See: https://forums.raspberrypi.com/viewtopic.php?t=392666
* pitowers/master:
pieeprom-2025-10-17: Enable background refresh on 2712d0 for all SDRAM sizes (latest)
pieeprom-2025-10-14: 2711: Use ROM boot-mode flag to detect rpiboot mode (latest)
pieeprom-2025-10-08: 2712: Fix accidental set of PM_RSTS bit 5 when stopping watchdog (latest)
pieeprom-2025-10-08: 2711: Fix accidental set of PM_RSTS bit 5 when stopping watchdog (latest)
pieeprom-2025-10-03: 2711: arm_dt: Report OTP SDRAM size via device-tree (latest)
pieeprom-2025-09-25: 2712: Apply UART_BAUD in early bootsys UART init (latest)
pieeprom-2025-09-23: 2712: Fix TFTP to allow larger files (latest)
pieeprom-2025-09-23: 2711: Fix network install regression on Pi4 (latest)
pieeprom-2025-09-22: 2711: Add LZ4 decompressor (latest)
pieeprom-2025-09-22: 2712: Add LZ4 decompressor (latest)
* 2712d0: Enable background refresh on 2712d0 for all SDRAM sizes
This provides a minor performance benefit.
* Update GPT to support 4K native sectors
Bootloader logic updated to correctly interpret the GPT layout format specific to 4K native sector drives.
* recovery: Use ROM boot-mode flag to detect rpiboot mode
In recovery-mode use the bootrom register flag to detect the
original boot-mode rather than looking at whether the rpiboot
usb-device boot driver is initialised.
* recovery: Use ROM boot-mode flag to detect rpiboot mode
In recovery-mode use the bootrom register flag to detect the
original boot-mode rather than looking at whether the rpiboot
usb-device boot driver is initialised.
* Manufacturing test updates.
* Fix accidental set of PM_RSTS bit 5 when stopping watchdog
Fix an issue in the watchdog code where the raw PM_RSTS value
was used as partition number. If HADWRF (bit 5) was set (on reboot)
this could cause bit 10 to be set. If an OS didn't clear the partition
flags on reboot then this could end up being treated as request to
boot from partition 32.
* pi5: Preliminary support for 4K native sectors with NVMe drives
Pi5 now supports 4K native sector NVMe drives.
This allows booting from drives with logical block size 4096,
while 512B drives remain compatible. With 4K sectors, storage density
increases along with improved reliability and efficiency.
N.B. USB boot still requires a 512 byte sector size and there are
no RPi OS disk images with a 4K sector format.
See: https://github.com/raspberrypi/rpi-eeprom/issues/577
* arm_dt: Report OTP SDRAM size via device-tree
Report the SDRAM in gigabits via device-tree as
/proc/device-tree/chosen/rpi-sdram-size-gbit. Scripts reporting the
device-capabilities should use this value (if defined) instead of the
memory-size field in the boardrev row.
* Fix accidental set of PM_RSTS bit 5 when stopping watchdog
Fix an issue in the watchdog code where the raw PM_RSTS value
was used as partition number. If HADWRF (bit 5) was set (on reboot)
this could cause bit 10 to be set. If an OS didn't clear the partition
flags on reboot then this could end up being treated as request to
boot from partition 32.
* arm_dt: Report OTP SDRAM size via device-tree
Report the SDRAM in gigabits via device-tree as
/proc/device-tree/chosen/rpi-sdram-size-gbit. Scripts reporting the
device-capabilities should use this value (if defined) instead of the
memory-size field in the boardrev row.
* Apply UART_BAUD in early bootsys UART init
Update bootsys and fatal error handlers to use the user
defined UART_BAUD rate.
* rpifwcrypto: Add support for ECDSA P-256 key generation
Also, slightly improve the entropy by passing the system
timer value as the personality string.
* Apply UART_BAUD in early bootsys UART init
Update bootsys and fatal error handlers to use the user
defined UART_BAUD rate.
* rpifwcrypto: Add support for ECDSA P-256 key generation
* Fix network install regression on Pi4
Fix an issue with the ECDSA signature code which caused network
install to fail to load on Pi4.
* Fix TFTP to allow larger files
Allow TFTP block counter to rollover to 0.
See: https://github.com/raspberrypi/rpi-eeprom/issues/720
* Add LZ4 decompressor
LZ4 gives a better compression ratio than the previously used CK compress. The bootloader can now decompress both LZ4 compressed files and CK compressed files.
* rpifwcrypto: Add GET_CRYPTO_PRIVATE_KEY mailbox API
For provisioning, add a new mailbox API which returns the private key
in DER format. The API will return an error if the key-status for
the specified key is LOCKED.
* config: Add support for board_attributes in conditional expressions
Add support for the board-attributes row in config.txt conditional
expressions. This can be used to change boot behavior for
Compute Module Lite / No-WiFi etc.
* board_info: Log the OTP board revision at startup
Log the board revision plus the raw OTP value at startup.
* Add LZ4 decompressor
LZ4 gives a better compression ratio than the previously used CK compress. The bootloader can now decompress both LZ4 compressed files and CK compressed files.
* rpifwcrypto: Add GET_CRYPTO_PRIVATE_KEY mailbox API
For provisioning, add a new mailbox API which returns the private key
in DER format. The API will return an error if the key-status for
the specified key is LOCKED.
* config: Add support for board_attributes in conditional expressions
Add support for the board-attributes row in config.txt conditional
expressions. This can be used to change boot behavior for
Compute Module Lite / No-WiFi etc.
* board_info: Log the OTP board revision at startup
Log the board revision plus the raw OTP value at startup.
* pitowers/master:
Add link to old 2712 EEPROM images to releases.md page
pieeprom-2025-08-27: 2712: Fix PARTITION property to allow default (0) partition to be overridden (latest)
pieeprom-2025-08-27: 2711: Fix PARTITION property to allow default (0) partition property to be overridden (latest)
rpi-otp-private-key: Fix missing escape character in usage text
* Fix PARTITION property to allow default (0) partition to be overridden
Fix the partition selection to allow the bootloader PARTITION
property to override the reboot partition number if the reboot
argument is 0 or > 31. Previously, it was only allowing
partition numbers > 31 to be overridden.
See: https://github.com/raspberrypi/rpi-eeprom/issues/743
* Enable RPIBOOT in BOOT_ORDER / set-reboot-order
Previously, rpiboot required the bootrom to have initialised
rpiboot before running the firmware. Update the rpiboot
initialisation so that rpiboot to be enabled after booting from
SPI flash.
This could be selectively enabled by setting BOOT_ORDER property
(0x3) behind a GPIO conditional in the EEPROM config. On Pi5, the
set_reboot_order config.txt option or mailbox property can be
used to set a one-time boot-order on
N.B. There is no timeout for RPIBOOT so this should only be set
as the last boot mode OR used with a boot_watchdog.
* Fix PARTITION property to allow default (0) partition to be overridden
Fix the partition selection to allow the bootloader PARTITION
property to override the reboot partition number if the reboot
argument is 0 or > 31. Previously, it was only allowing
partition numbers > 31 to be overridden.
See: https://github.com/raspberrypi/rpi-eeprom/issues/743
* Enable RPIBOOT in BOOT_ORDER / set-reboot-order
Previously, rpiboot required the bootrom to have initialised
rpiboot before running the firmware. Update the rpiboot
initialisation so that rpiboot to be enabled after booting from
SPI flash.
This could be selectively enabled by setting BOOT_ORDER property
(0x3) behind a GPIO conditional in the EEPROM config. On Pi5, the
set_reboot_order config.txt option or mailbox property can be
used to set a one-time boot-order on
N.B. There is no timeout for RPIBOOT so this should only be set
as the last boot mode OR used with a boot_watchdog.
* pitowers/master:
rpi-otp-private-key: Describe how to store an ECDSA P-256 private key
pieeprom-2025-08-20: 2712: force_eeprom_read=0 disables HAT I2C (latest)
pieeprom-2025-08-20: 2711: Fix PARTITION_WALK for missing start.elf files (latest)
rpi-eeprom-config: Improve No space available error message
pieeprom-2025-08-13: 2712: Enable the PARTITION_WALK property by default (latest)
pieeprom-2025-08-13: 2711: Enable PARTITION_WALK property by default (latest)
The Raspberry Pi firmware cryptography service requires a valid
ECDSA P-256 key instead of a plain random number. Update the usage
instructions for key-provisioning to use this key type as the example.
* force_eeprom_read=0 disables HAT I2C
Although setting force_eeprom_read=0 has always prevented the HAT EEPROM
from being read, with the recent changes to support Power HAT+s it does
not prevent an early scan to see if such an EEPROM exists. This can be
problematic for applications where the I2C0 pins have been repurposed.
Change the inhibit logic to cut all HAT I2C probing off at the knees,
including any automatic settings of usb_max_current_enable, as it should
always have done.
See: https://github.com/raspberrypi/firmware/issues/1985
* rpifwcrypto: Preliminary firmware support for rpifwcrypto API
* Add config.txt to block GET_CUSTOMER_PRIVATE_KEY mailbox API lock_device_private_key=1
* Fix PARTITION_WALK for missing start.elf files
Fix a missing call to bootloader_reset_state so that PARTITION_WALK
will work if the boot-partition is FAT, contains config.txt etc
but does not have valid firmware.
See: https://github.com/raspberrypi/rpi-eeprom/issues/738
* force_eeprom_read=0 disables HAT I2C
Although setting force_eeprom_read=0 has always prevented the HAT EEPROM
from being read, with the recent changes to support Power HAT+s it does
not prevent an early scan to see if such an EEPROM exists. This can be
problematic for applications where the I2C0 pins have been repurposed.
Change the inhibit logic to cut all HAT I2C probing off at the knees,
including any automatic settings of usb_max_current_enable, as it should
always have done.
See: https://github.com/raspberrypi/firmware/issues/1985
* bootcode.bin: Add support for boot.img ramdisk on Pi3 and earlier
Add support for boot.img ramdisk support, enable by adding boot_ramdisk=1
in config.txt
* rpifwcrypto: Preliminary firmware support for rpifwcrypto API
* Add config.txt to block GET_CUSTOMER_PRIVATE_KEY mailbox API
lock_device_private_key=1
Improve the error handler for the case where the new EEPROM config
exceeds the amount of available free space. Display the filename,
new size and space available.
N.B The 2711/pieeprom-2025-08-13.bin restores the free space to a
little of 4KB again.
See: https://github.com/raspberrypi/rpi-eeprom/issues/732
* Enable the PARTITION_WALK property by default
Previously, the new PARTITION_WALK which searches for bootable
partitions after a failure had to be explicitly enabled. Change
the default to be enabled by default. It can be switched off by
setting PARTITION_WALK=0 in the EEPROM config.
* pi5: Fix read for cached copy of PMIC sequencer status
Previously, this was overwritten by the RTC event status.
* Enable the PARTITION_WALK property by default
Previously, the new PARTITION_WALK which searches for bootable
partitions after a failure had to be explicitly enabled. Change
the default to be enabled by default. It can be switched off by
setting PARTITION_WALK=0 in the EEPROM config.
* Optimise bootmain for size on Pi4
Pi4 only has a 512KB SPI flash EEPROM and the addition of features
plus fixes is now causing contention for space between the code and
the EEPROM config. Since bootmain is only responsible for loading
start.elf revert to the original configuration which is optimised
for size rather than speed. Pi5 continues to be optimised for speed.
* pitowers/master:
pieeprom-2025-07-17: 2712: Fix config key search which could cause camera_autodetect to fail (latest)
release-notes: s/bootarg0/bootvar0/
pieeprom-2025-07-17: 2711: Also require the early-watchdog property (latest)
pieeprom-2025-07-17: 2712: arm_loader: Also require the early-watchdog property (latest)
2711: Archive releases older than 2025-05-08
pieeprom-2025-07-03: 2711: Check for SD card overcurrent (latest)
2712: Archive releases older than 2025-05-08
pieeprom-2025-07-03: 2712: Enable firmware UART output on the 40-pin header (latest)
pieeprom-2025-06-29: 2712: Check for SD card overcurrent on Pi5 and Pi500 (latest)
pieeprom-2025-06-20: 2712: Add support for a bootloader watchdog (latest)
pieeprom-2025-06-13: 2712: Update to include production test changes (latest)
* Fix config key search which could cause camera_autodetect to fail
The bootvar0 config property was added in the wrong section which
could cause the config property search for some other properties
to fail.
* arm_loader: Also require the early-watchdog property
The change correcting the implementation of dtoverlay_is_enabled had the
unintended consequence of causing the firmware to enable the watchdog
even though the user had not explicitly requested it. This is harmless
on Linux because the watchdog driver takes over and disarms it, but on
other operating systems this can lead to a reboot. Avoid this problem
by also requiring the presence of a new property, "early-watchdog".
See: https://github.com/raspberrypi/firmware/issues/1980
* helpers/config_loader: Add bootvar0 eeprom config that can be used in config.txt section expressions
This allows an eeprom config setting (e.g. BOOTARG0=0x10) to be set on a board
which config.txt can use as a conditional expression (e.g. [bootarg0&0x10]).
* arm_loader: Fix boot-watchdog stop on Pi4
Fix a problem where the boot_watchdog heartbeat timer was not
stopped correctly which could cause it to clash with the kernel
watchdog driver.
* arm_loader: Also require the early-watchdog property
The change correcting the implementation of dtoverlay_is_enabled had the
unintended consequence of causing the firmware to enable the watchdog
even though the user had not explicitly requested it. This is harmless
on Linux because the watchdog driver takes over and disarms it, but on
other operating systems this can lead to a reboot. Avoid this problem
by also requiring the presence of a new property, "early-watchdog".
See: https://github.com/raspberrypi/firmware/issues/1980
* helpers/config_loader: Add bootvar0 eeprom config that can be used in config.txt section expressions
This allows an eeprom config setting (e.g. BOOTARG0=0x10) to be set on a board
which config.txt can use as a conditional expression (e.g. [bootarg0&0x10]).
* arm_loader: Fix boot-watchdog stop on Pi4
Fix a problem where the boot_watchdog heartbeat timer was not
stopped correctly which could cause it to clash with the kernel
watchdog driver.
* board_info: Use the Ethernet PHY address probed by the bootloader
Use the Ethernet PHY address supplied by the bootloader in
preference to the static configurations defined in start4.elf
* Check for SD card overcurrent on Pi5, Pi500 and Pi4
Before booting, the bootloader now checks the SD power switch
overcurrent signal. The overcurrent signal occurs if the SD
card is damaged and has a short circuit which will cause it to
get hot.
If an over-current condition is detected the bootloader switches
switches off power to the SD card and waits five seconds before
probing the SD card again. This error is displayed on the
diagnostic screen, the UART and the activity LED (1 long, 2 short)
flashes.
The check can be switched to a non-blocking warning by setting
SD_OVERCURRENT_CHECK=0 in the bootloader config.
* Add a new error code pattern for SD overcurrent
Add a new error pattern (1 long, 2 short) to signal SD card
overcurrent.
* Add support for a bootloader watchdog
Add support for a boot watchdog (using PM_RSTC hw wdog) which will
trigger if the OS is not started within the specified amount of time. The
watchdog is enabled by setting the BOOT_WATCHDOG_TIMEOUT=N (seconds)
property in the bootlaoder config.
The BOOT_WATCHDOG_PARTITION=P property can be set to pass a different
partition number to the bootloader on reset if the watchdog
is triggered.
The boot watchdog is automatically cleared just before starting
the OS and (optionally) enabling the kernel watchdog.
* Skip first SD boot if no card detected
On platforms with an SD Card detect signal, skip the first attempt to
boot from SD if the card appears to be absent. This can save over a
second on a cold boot, and a little under a second for a reboot.
* rp1_uart: Allow rp1_uart to be started earlier
If enabled (with enable_rp1_uart) then the existing boot uart
messages are redirected to the rp1 uart.
* board_info: Use the Ethernet PHY address probed by the bootloader
Use the Ethernet PHY address supplied by the bootloader in
preference to the static configurations defined in start4.elf
* pi5: Fix overwrite of cache EEPROM config in secure-boot mode
See: https://github.com/raspberrypi/rpi-eeprom/issues/719
* Check for SD card overcurrent on Pi5, Pi500 and Pi4
Before booting, the bootloader now checks the SD power switch
overcurrent signal. The overcurrent signal occurs if the SD
card is damaged and has a short circuit which will cause it to
get hot.
If an over-current condition is detected the bootloader
switches off power to the SD card and waits five seconds before
probing the SD card again. This error is displayed on the
diagnostic screen, the UART and the activity LED (1 long, 2 short)
flashes.
The check can be switched to a non-blocking warning by setting
SD_OVERCURRENT_CHECK=0 in the bootloader config.
* Add a new error code pattern for SD overcurrent
Add a new error pattern (1 long, 2 short) to signal SD card
overcurrent.
* Enable RTC wakeup from POWER_OFF_ON_HALT=0
* Improve HAT+ current handling
In shipping firmware, the current_supply value is only being used in the
case of a normal (non-stacked) HAT+, but that is unnecessarily
restrictive. Also, the presence of MODE0 and MODE1 power HATs is not
reflected in the value of max_current.
See: https://github.com/raspberrypi/linux/pull/6678
* Add support for a bootloader watchdog
Add support for a boot watchdog (using PM_RSTC hw wdog) which will
trigger if the OS is not started within the specified amount of time. The
watchdog is enabled by setting the BOOT_WATCHDOG_TIMEOUT=N (seconds)
property in the bootlaoder config.
The BOOT_WATCHDOG_PARTITION=P property can be set to pass a different
partition number to the bootloader on reset if the watchdog
is triggered.
The boot watchdog is automatically cleared just before starting
the OS and (optionally) enabling the kernel watchdog.
* pi5: Add a temperature monitor
In early releases of the bootloader the fan would always be on
during boot which can be distracting. Later releases switch off the
fan until the OS has booted.
This change adds some basic fan control from the bootloader to
enable the fan if the temperature is above 85C.
This may be useful if the Pi was shutdown by the OS because the
temperature limit was exceeded.
Since the Linux hwmon is not active at this stage the bootloader
now implements the same logic to power off the Pi if the chips
is more than 110C.
The PMIC hardware automatically cuts power if the temperature
is more than 125C.
* Skip first SD boot if no card detected
On platforms with an SD Card detect signal, skip the first attempt to
boot from SD if the card appears to be absent. This can save over a
second on a cold boot, and a little under a second for a reboot.
* NVMe: Fix loading of files > 32MB
Fix an NVMe boot bug which caused large contiguous reads >= 32MB to fail
* Update setting alpha for 2712D0
D0 moved the alpha blend mode from CTL2 to CTL0.
Update the bootloader code to follow suit for those using
the simple framebuffer
* dtoverlay: Fix node_is_enabled for implicit status
The absence of a status property implies that a node is enabled. Update
dtoverlay_node_is_enabled to match that behaviour.
See: https://github.com/raspberrypi/firmware/issues/1970
* arm_loader: GET_CLOCKS: Set useful response length
The kernel's firmware mailbox API does not make the actual length of the
response available to clients, but other implementations may care.
Continue to pad the GET_CLOCKS buffer with zeroes, but set the response
length to minimally contain the useful content.
See: https://github.com/raspberrypi/firmware/issues/1969
* pitowers/master:
2711: release-notes: Add (automatic) tag
2711: Change the automatic update minimum version to 2025-05-08
tools: Add the network install public key
Important changes since the last automatic update:
* Add the boot-menu to override the boot-order.
* Implement TCP window for network install.
* Preserve SDRAM contents after crash.
* Improved compatibility for USB pendrives.
Change the automatic update version to 2025-05-08.
Important changes since the last automatic update:
* RP1 firmware support for PIO
* Improved support for HAT+ and parameters
* Boot menu
* SDRAM performance and stability improvements
* pitowers/master:
pieeprom-2025-05-16: 2711: Automatically set revoke_devkey if program_pubkey=1 (latest)
imager: 2712: 2711: Update to the 2025-05-08 firmware
* 2711: (recovery) Automatically set revoke_devkey if program_pubkey=1
Previously, on BCM2711 products it was possible to program the key
hash without revoking the development key. This can be useful for
testing but should never be used in production because it is possible
to an install an older version of the bootloader which doesn't
support secure-boot. Since the secure-boot tools are stable and
have improved usability (RPi secure-boot provisioner) this test
feature not necessary and is just a security risk so the behaviour
is changed to always revoke the development key if program_pubkey=1.
This change is not relevant on BCM2712 because secure-boot requires
that the second stage bootloader is counter-signed with the customer's
private key.
* pitowers/master:
pieeprom-2025-05-08: 2711: Implement TCP window for net boot (latest)
pieeprom-2025-02-24: 2711: Implement TCP window for net boot (latest)
pieeprom-2025-05-08: 2712: Implement TCP window for net boot (latest)
* Signed boot and HTTP boot mode
HTTP boot mode is supposed to be disabled if signed boot is enabled and
a host is not specified. The code is checking the http_secure flag to
enforce this. But this is valid now we support custom CA certs.
Only disable HTTP mode if we're using the default HOST.
* Implement TCP window for net boot
The minimal IP stack used for https booting lacks the ability to cache
packets received out of order, which can lead to severe slowdown when
it happens. The problem seems to affect some ISPs more than others.
The receive window implemented here copes with packet losses of 10%.
* netboot: Correct the TCP MSS
* Correct msecs in debug timestamps
The fractional part of timestamps in UART debug output was showing the
100ths and 1000ths of a second, rather than 10ths and 100ths, causing
strange sequences that appear to jump backwards.
* arm_loader: Correct some mailbox response lengths
The GET_GENCMD_RESULT mailbox handler was setting the wrong response
length, and GET_FIRMWARE_COMMIT_HASH and GET_FIRMWARE_VARIANT were not
setting any length.
See: https://github.com/raspberrypi/firmware/issues/1968
* Signed boot and HTTP boot mode
HTTP boot mode is supposed to be disabled if signed boot is enabled and
a host is not specified. The code is checking the http_secure flag to
enforce this. But this is valid now we support custom CA certs.
Only disable HTTP mode if we're using the default HOST.
* Implement TCP window for net boot
The minimal IP stack used for https booting lacks the ability to cache
packets received out of order, which can lead to severe slowdown when
it happens. The problem seems to affect some ISPs more than others.
The receive window implemented here copes with packet losses of 10%.
* netboot: Correct the TCP MSS
* rp1_net: Overwrite the length field
Although concise, ORing in the packet length runs the risk of leaving
some unwanted bits set. Ensure the length field is cleared before
ORing in the required value.
* Correct msecs in debug timestamps
The fractional part of timestamps in UART debug output was showing the
100ths and 1000ths of a second, rather than 10ths and 100ths, causing
strange sequences that appear to jump backwards.
* Implement GET_BOARD_MAC_ADDRESS on Pi5
The Pi 5 EEPROM implements a subset of the original mailbox properties.
Add GET_BOARD_MAC_ADDRESS to the subset.
See: https://github.com/raspberrypi/rpi-eeprom/issues/698
* Ensure the initramfs matches the kernel
As far as is possible, both the kernel and initramfs are matched to the
device. However, where multiple kernel variants can run on a device, the
initramfs must be matched to the chosen kernel. Make that the sole rule
for initramfs selection, rather than duplicating the device matching
logic.
See: https://github.com/raspberrypi/firmware/issues/1965
* Enable logging messages from OS loader
Pi 5 EEPROM builds were missing the output from the main OS loading
function, including some important diagnostics. Enabling the logging
output from this loader code results in some near-duplicates, but is
more user friendly and is available via "sudo vclog -m".
* arm_dt: Revert to using the max fan speed
It has been reported that the presence of a cooling fan at boot time
can lead to a maximum observed fan speed of ~300 but a current speed
of 0. The absence of a fan results in 0s for both metrics.
See: https://github.com/raspberrypi/rpi-eeprom/issues/690
* os_check: cm5: Check for CM5 specific dtbs
Check for BCM2712 support in bcm2712-rpi-cm5-cm5io.dtb
or bcm2712-rpi-cm5l-cm5io.dtb on CM5 instead of bcm2712-rpi-5-b.dtb.
This avoids needing to put os_check=1 or specifying device_tree
in config.txt in minimal images for CM5.
See: https://github.com/raspberrypi/rpi-eeprom/issues/682
* Log the fan speed at boot
Record the fan RPM (and the maximum seen) during boot, so that it is
accessible using "sudo vclog -m".
See: https://github.com/raspberrypi/rpi-eeprom/issues/678
* Add current_supply to HAT+ support
Refactor the HAT library to make it more self-contained, and combine
the I2C address detection and the reading of the EEPROM contents.
Use it to allow the earlier boot stages to check for a current_supply
setting in the EEPROM of a normal (non-stackable) HAT+.
* pitowers/master:
pieeprom-2025-03-10: 2712: Add [boot_partition] filter plus SDRAM init fixes (latest)
rpi-eeprom-digest: support specifying keys via PKCS#11 URI
pieeprom-2025-03-03: 2712: Fix bootloader pull configuration on BCM2712D0 (latest)
image: Update 2711 plus 2712 images and enable boot-menu on 2711
* Update SDRAM init timings to intermittent 8-flash SDRAM init errors
on some boards.
See: https://github.com/raspberrypi/rpi-eeprom/issues/67
* config: Fix missing initialisation of selected_expr to 1 in config.txt
Without an [all] section the new expression filter might default to
false. This impacts the bootloader early parsing of config.txt
for things like boot_ramdisk rather than the later config.txt pass
for device-tree parsing.
* config_loader: Add support [boot_partition=N] as an expression filter
The boot_partition tests whether the partition number N matches
the number that the system is booting from. This expression is
only supported in config.txt and is designed to make it easier
to have common boot.img ramdisks in an A/B system where the
conditional loads a different cmdline.txt file depending on
which partition boot.img is loaded from.
In production setups, it is quite normal that the private key does not
exist as a file in the file system, but is kept inside some HSM,
remote signing service or similar, and only accessed via some pkcs#11
interface; moreover, by design, the private key _cannot_ be extracted
from the HSM or signing service.
In such a case, the user will have set OPENSSL_CONF to some
configuration file setting up the appropriate engine, and the "key" is
simply the pkcs#11 URI, e.g. "pkcs11:model=foo;object=bar".
In order to support this use case, automatically infer the appropriate
options to pass to openssl-dgst if "${KEY}" begins with
"pkcs11:". Doing this at the top level avoids duplicating the logic in
both writeSig and verifySig. While here, this also adds a sanity check
that -v can only be used while also providing a (public) key to check
against.
This drops the -keyform argument in the non-pkcs#11 case, as openssl
automatically infers the type, and this then in fact allows one to use
a private key in e.g. DER format.
Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
* Fix pull configuration on 2712D0
2712D0 uses a horrendously sparse set of pad control registers. Make
the pull-setting code sufficiently complex to cope.
See: https://github.com/raspberrypi/rpi-eeprom/issues/672
* Disable UARTA for CM5s without WiFi
Just as CM5s without WiFI don't need the SDIO interface, the Bluetooth
UART is unconnected. Disable the DT node to avoid kernel warnings and
save some cycles.
* recovery: Walk partitions to delete recovery.bin
Previously, recovery.bin would fail to delete itself
if the bootrom loaded recovery.bin where there are multiple FAT
partitions and the first partition does not contain recovery.bin
Update the rename code to walk the partition table to find
the recovery.bin file to delete.
* Enable overriding of high partition numbers
Previously, the PARTITION=N bootloader config setting would only
be used at power on reset or if the partition number passed to
reboot was zero.
Change the behaviour so that the bootloader config PARTITION
property can override the reboot partition number if the reboot
parameter is > 31.
* Walk the partition table if the requested partition is not bootable
Previously, if the specified boot partition was not bootable the
bootloader would stop and advance to the next BOOT_ORDER. If the
new PARTITION_WALK option is set to 1 the bootloader will now
check each partition in turn starting from the specified partition
before advancing the BOOT_ORDER.
This feature is intended for use with A/B systems to handle the case
where autoboot.txt is missing / corrupted. This change enables
the system to failover to the next available bootable partition.
The autoboot.txt file is not scanned during the partition-walk
phase i.e. there is no recursive processing of autoboot.txt files.
This option is only supported on physical block devices
(SD, NVMe, USB) and not RAMDISK. USB assumes a single high speed
device, partition walks on multiple USB devices is not recommended
and may cause timeouts.
* Improve keyboard handling in boot menu
Try and make it more likely that we have enough time to perform key
detection.
Ignore mice, which were being enumerated and slowing things down.
* recovery: Walk partitions to delete recovery.bin
Previously, recovery.bin would fail to delete itself
if the bootrom loaded recovery.bin where there are multiple FAT
partitions and the first partition does not contain recovery.bin
Update the rename code to walk the partition table to find
the recovery.bin file to delete.
* pi5: Add config filter for simple boot variable expressions (experimental)
Add support for a new bootloader/config.txt conditional filter
which tests the partition, boot_count and boot_arg1 variables.
Syntax (no spaces):
ARG boot_arg1, boot_count or partition (EEPROM config stage only)
[ARG=VALUE] selected if (ARG == VALUE)
[ARG&MASK] selected if ((ARG & VALUE) != 0))
[ARG&MASK=VALUE] selected if ((ARG & MASK) == VALUE)
[ARG<VALUE] selected if (ARG < VALUE)
[ARG>VALUE] selected if (ARG > VALUE)
where VALUE and MASK are unsigned integer constants and ARG
corresponds to the value in the reset register before the
config file is parsed.
* pi5: Add a boot-count bootloader variable (experimental)
Store the boot-count in a reset register and increment just
before the boot-order state-machine. The boot-count variable
is visible via device-tree /proc/device-tree/chosen/bootloader/count
and can be read/set via vcmailbox
GET: sudo vcmailbox 0x0003008d 4 4 0
SET to N: sudo vcmailbox 0x0003808d 4 4 N
* pi5: Add user-defined reboot argument (boot_arg1) (experimental)
Add support for a user-defined boot parameter stored in a reset-safe
scratch register on BCM2712. This is visible via device-tree at
/proc/device-tree/chosen/bootloader/arg1 and via vcmailboxes
GET arg1: sudo vcmailbox 0x0003008c 8 8 1 0
SET arg1 to 42: sudo vcmailbox 0x0003808c 8 8 1 42
or via config.txt
set_reboot_arg1=42
The variable is NOT cleared automatically and will persist until
a power-on-reset.
* Enable overriding of high partition numbers
Previously, the PARTITION=N bootloader config setting would only
be used at power on reset or if the partition number passed to
reboot was zero.
Change the behaviour so that the bootloader config PARTITION
property can override the reboot partition number if the reboot
parameter is > 31.
* Disable WiFi PMIC output on CM5 modules without WiFi
Disable the 3.7V WiFi power supply on CM5 modules which do not have a
WiFi module fitted. This fixes some stability issues where a CM5
would shutdown due to a spurious over-voltage condition on the
non-connected WiFi power supply.
* Add memory barrier to the mbox handler
Firmware issue 1944 reports receiving kernel warnings about firmware
requests where the status return code is 0. This should not be
possible, as handle_mbox_property always sets the top bit of the return
code, with the bottom bit indicating success or failure. If the firmware
had died, the firmware driver would report a timeout due to the lack of
a mailbox interrupt, and that isn't happening.
See: https://github.com/raspberrypi/firmware/issues/1944
* support dts files with size-cells of 2
DTS files with a top-level #size-cells of 2 make a lot of sense for
systems with a lot of RAM, but the firmware is currently inconsistent
in its support for that. Fix up the other cases to honor #size-cells
and #address-cells.
* Disable SDIO2 for CM5s without WiFi
It has been observed that CM5s without WiFi hang on reboot. To prevent
that, disable the sdio2 node on those devices.
See: https://github.com/raspberrypi/linux/issues/6647
* arm_dt: Use dtoverlay_enable_node
Convert the open-coded DT node status changes to use the new dtoverlay
method dtoverlay_enable_node.
* dtoverlay: Add dtoverlay_enable_node
Add a helper function for setting the status of a node.
* Walk the partition table if the requested partition is not bootable
Previously, if the specified boot partition was not bootable the
bootloader would stop and advance to the next BOOT_ORDER. If the
new PARTITION_WALK option is set to 1 the bootloader will now
check each partition in turn starting from the specified partition
before advancing the BOOT_ORDER.
This feature is intended for use with A/B systems to handle the case
where autoboot.txt is missing / corrupted. This change enables
the system to failover to the next available bootable partition.
The autoboot.txt file is not scanned during the partition-walk
phase i.e. there is no recursive processing of autoboot.txt files.
This option is only supported on physical block devices
(SD, NVMe, USB) and not RAMDISK. USB assumes a single high speed
device, partition walks on multiple USB devices is not recommended
and may cause timeouts.
* Improve keyboard handling in boot menu
Try and make it more likely that we have enough time to perform key
detection.
Ignore mice, which were being enumerated and slowing things down.
* pitowers/master:
2025-01-22: 2712: Promote 2025-01-22 to default release (default)
pieeprom-2025-01-22: 2712: Add DT property for hash of signed boot image (latest)
test: Update test script
scripts: Failover to /usr/lib before /lib if FIRMWARE_ROOT is not set
* 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.
* 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
* 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.
* 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.
* 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.
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.
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.
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.
* 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.
* 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.
* 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.
* 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
Move everything older than the last automatic update (2024-09-23) to the
old firmware directory which is not included in the APT package. This
reduces the size of the APT updates.
* Fix PCIe BAR setup issue which prevented NVMe boot from working with some PCIe switches
See: https://github.com/raspberrypi/firmware/issues/1833
* Boot-menu improvements
Remain in the forced boot mode until the menu is used to select a different
boot-mode or reset to the original boot-order.
SD card high-speed/low-voltage mode can only be exited by powercycling.
Pi 4s before rev 1.4 lack the power switch required to do this, so
must resort to a global reset that turns off many things, including
SDRAM.
To ensure correct operation, the bootloader checks that the SD I/O
voltage is the expected 3.3V, forcing a power cycle if it isn't.
However, this doesn't take advantage of presence of the dedicated
SD power switch, always forcing a global reset, a consequence of which
can be the loss of SDRAM content - including any ramoops dump of the
crash logs.
Make the bootloader more SD_PWR_ON aware, only triggering a global
reset if one isn't found.
See: https://github.com/raspberrypi/linux/issues/5298
* Introduce a new boot-menu feature where pressing SPACE at power on
gives the user a one-shot option to select a different boot mode.
e.g. Select USB boot if the default SD card is corrupted or unavailable.
* Display the bootloader network-install UI for longer on a cold boot to make
this feature more visible to first time users.
To revert to the previous behaviour remove NET_INSTALL_AT_POWER_ON=1
from the bootloader config.
* Support non-UUID HAT mapping
Extend the HAT map support to allow matching on product and vendor
strings, as well as product ID and version. As a minimum, there must
be a product string - if that matches, the other keys are considered.
Without a product key, the UUID is compared as before.
* Remove requirement for GPT ptable array to be at LBA-2
See: https://github.com/raspberrypi/rpi-eeprom/issues/585
* 2712C1 clock manager improvements to slightly reduce idle power ~50mW saving
* Adjust SDRAM page-hold and auto-precharge to improve performance.
~2% improvement with Geekbench 6
* armstubs: 2712: Rebuild with updated max-power throttle and direct stream settings
See: fc45bc492d
* debug: Only display the program_pubkey log if configuring secure-boot
20 seconds is a little too short for safety with flashrom if every
page has to be erased and re-written. Bump this to 60 seconds
which is probably too long but nothing good will come from
interrupting flashrom.
* arm_dt: Consult the hat_map for all HATs
* USB boot - ignore RP2 / RP3 MSD device in BOOTSEL mode.
* recovery.bin - Fix erase_eeprom to not block reboot_recovery
* Fix self-update to continue to boot instead of retrying forever
if the EEPROM is write protected.
https://github.com/raspberrypi/rpi-eeprom/issues/597
- 2024-07-30 is marked `default` here, but the image is actually in `latest`
- 2024-07-25 doesn't specify default or latest - fix that
(Aside: neither seem to have found their way to apt yet).
* Optimize all-banks/per-bank refresh timings for Pi5 8GB
* Improve compatibility for booting from some USB SD card readers
https://github.com/raspberrypi/rpi-eeprom/issues/527
* Add enable_rp1_uart=1 to config.txt to initialise RP1 UART0 immediately
prior to starting the ARMs get earlycon on 40-pin header (pins 14,15)
Also requires pciex4_reset=0 in config.txt
earlycon=pl011,0x1f00030000,115200n8
* Enable the usage of program_rpiboot_gpio in config.txt for recovery.bin
without requiring secure-boot to be enabled.
This may be useful CI systems provisioning images on Pi4B / Pi400 via RPIBOOT.
This is an OTP setting and cannot be reverted after programming.
See https://www.raspberrypi.com/documentation/computers/config_txt.html#program_rpiboot_gpio
* The [pi5] conditional statement should apply to the entire pi5
family i.e. include cm5 as well.
* Bump SDIO bus priorities to that a GPU/RAM intensive processes
can't unnecessarily stall an I/O processes.
* Assorted log message tidyups.
* Add timestamps to UART log messages.
* Add support for [tryboot] conditional the bootloader EEPROM
config file.
See: https://github.com/raspberrypi/rpi-eeprom/issues/454
* Fix MAX_RESTARTS parameter
See: https://github.com/raspberrypi/rpi-eeprom/issues/576
* Add recovery_reboot option to config.txt for rpiboot which causes
the system to reboot after updating the bootloader.
* Improve secure-boot OTP provisioning logging.
* Fix setting to enable secure-boot mode on Pi4B
Interesting changes since the last automatic update:
* Enable network install
* Enable over-clocking frequencies > 3GHz
See: ttps://github.com/raspberrypi/firmware/issues/1876
* Adjust SDRAM refresh rate according to temperature and address a performance
gap between 4GB and 8GB parts in benchmarks.
See: https://github.com/raspberrypi/firmware/issues/1854
* Support custom CA certs with HTTPS boot
* Move non Kernel ARM stages back to 512KB
https://github.com/raspberrypi/firmware/issues/1868
* Assorted HAT+ and NVMe interop improvements.
* Fix TRYBOOT if secure-boot is enabled.
* Preliminary support for D0 and CM5.
* Switch to building the Pi4 firmware from the common Pi4/Pi5
mainline release. This doesn't change the Pi4 features
but should make it quicker to release bug fixes in common code.
* Fix issue that caused the TRYBOOT flag to be lost in secure-boot mode.
* dtoverlay: Use %u when converting u32s to strings
See: https://github.com/raspberrypi/linux/issues/6039
* Improved debug messages for secure-boot.
* Generate the bootloader diagnostics qrcode at run time.
* bootloader: clock_2712: Remove restriction on arm_freq <= 3000
See: https://github.com/raspberrypi/firmware/issues/1876
* arm_dt: Update max_current to match HAT value
* arm_dt: Remove unused legacy parameters (core_freq, arm_freq, uart0_clkrate and cache_line_size)
* Add support for custom CA cert for network install
You need to specify
HTTP_HOST=myhost.com
HTTP_PATH=/path/to/files
HTTP_CACERT_HASH=<hash>
where <hash> is a sha256 hash of the der encoded ca certificate.
CA cert is added using rpi-eeprom-config.
* Optimise Vbat current draw with charging disabled
* Display OTP boot status in UART log messages.
* Preliminary support for secure-boot OTP provisioning.
* Update PCIE DET_WAKE pinmux for D0 products
Make it clearer that rpi-eeprom-digest is used create optionally
signed hashes for binary files.
For secure-boot the update-pieeprom.sh wrapper must be used
because only the boot configuration is signed by the customer
key rather than the entire SPI flash image.
Update rpi-eeprom-config to support replacement of bootcode.bin
with a customer counter-signed version.
Add a new rpi-sign-bootcode script which enables bootcode.bin
to be counter-signed with the customer key.
N.B. Signed boot on 2712 requires newer firmware which is currently
under development and has not been released.
Allows you to add a custom ca cert to an image.
Note: This option is only relevant for newer (as yet unreleased)
bootloader images that support custom CA certs and reserve a space for
this in the flash image.
* Adjust the SDRAM refresh interval based on the temperature. This
addresses the gap in performance between the 8GB and 4GB variants.
See https://github.com/raspberrypi/firmware/issues/1864
* Preliminary support for signed boot.
* Adjust the SDRAM refresh interval based on the temperature. This
addresses the gap in performance between the 8GB and 4GB variants.
See https://github.com/raspberrypi/firmware/issues/1854
* Preliminary support for signed boot
* Fix issues with SFN entries sometimes being treated as LFNs
see https://github.com/raspberrypi/rpi-eeprom/issues/514
* Add a dedicated message for "M.2 HAT" not being found instead of
the generic 'unsupported boot order' message when NVMe boot is
skipped.
* Fix an issue where the boot partition parameter in PM_RSTS was cleared
before being checked.
https://github.com/raspberrypi/firmware/issues/1853
* Add a specific fatal error pattern for RP1 not found - 4 long - 3 short
Add NVMe into the SD/USB/DEFAULT boot modes with a higher
priority than USB. The detection of NVMe HATs is quick so
there is no disadvantage in trying NVMe first.
* Initialise the DWC PHY to enable DWC host+peripheral support under Linux.
Requires 82069a7a02
* Force PWM on 3V3 supply if cameras or HATs are connected or if
power_force_3v3_pwm=1 in config.txt
Resolves an image quality issue with the GS camera.
* Add support for C(arm_min_freq) < 1500 MHz (must be at >= 200 MHz)
* Manufacturing test updates for DVFS.
Enforcing package checksum validation makes it difficult to install
new EEPROM binaries via rpi-update causing extra churn of APT releases.
Drop this check by default because random corruption of these files
either via software or users never actually happens.
* Add autodetect support for PCIe expansion HATs
* Add PCIE_PROBE=1 to the EEPROM config for custom PCIe exapansion
designs that do not support the upcoming HAT spec. This gives
similar behaviour to CM4 where PCIe x1 is enumerated to discover NVMe
devices.
* Fix loading of multiple initramfs images that are not 32-bit aligned sizes
https://github.com/raspberrypi/firmware/issues/1843
* Kernel load performance improvement - remove a memcpy
On Raspberry Pi 5 there are dedicated pins for the bootloader SPI
EEPROM. This makes it possible to do immediate updates via flashrom.
The "current" EEPROM config is the EEPROM config at boot rather
than what has just been written to the SPI flash because this is
consistent with current behaviour.
To use flashrom instead of recovery.bin for bootloader updates
set RPI_EEPROM_USE_FLASHROM=1 in /etc/defaults/rpi-eeprom-update
BCM2711
On CM4, Pi4, CM4-S, Pi400 config.txt must be modified to disable
the analog audio driver which shares the GPIO pins used by the
bootloader EEPROM.
dtparam=spi=on
dtoverlay=audremap
dtoverlay=spi-gpio40-45
* Fix SDIO / WiFi clock-setup for BOOT_ORDER=0xf14
* Fix SD power-on-reset
* Firmware support for improved watchdog driver
* Update DHCP Option97 to be R,P,i,5 on Pi5
The Pi5 EEPROM is larger and can take longer to update which
slightly increases the change of failure if the board power is
disconnected across an update. Re-enable recovery.bin for SD
updates for now.
* Add support for HAT gpiomap for improved HAT compatibility.
* Add I2C probe for DSI display auto detect
* Automatically set dtparam=nvme if booted from nvme
* Fix network boot reset issue where only the first attempt works.
* Adding pciex4_reset=0 to config.txt will leave RP1 PCIe enabled when
ARM stage is started.
* Prevent HDMI diagnostics being displayed immediately when waking
after HALT.
* Update board-name - "Rasberry Pi 5"
The EEPROM release names were changed to follow the naming
in raspi-config some time ago. Since the firmware directory
is being renamed to be chip specific for Pi5 support it's
good time to swap the symlink / release names.
BCM2711 and BCM2712 require different EEPROM firmware and
consequently the binaries have been moved to chip specific
firmware directories.
firmware-2711 / firmware-2712
Update the test/install script to remove previous firmware files.
This fixes a problem where the install script failed because
beta is now a symlink and not a directory.
Remove the beta release folder and replace with a symlink to the
'latest' release.
Including beta firmware in the APT release causes unecessary churn
and occasionally causes an issue where a user might end up on an
old and unsupported beta release.
Instead, beta releases are will be feature specific and installed
manually via 'rpi-eeprom-config --edit beta-firmware.bin'
i.e. beta releases will be out-of-package custom firmware releases
downloaded from github. The functionality will be merged into
a new latest/stable release or abandoned.
N.B. The old beta releases have been archived to 'old' but are no
longer included in APT.
Debian's raspi-firmware package assumes the boot partition is mounted as
/boot/firmware/ rather than /boot/. This commit adds support for either
approach by default.
latest and default are links to directories, so follow them.
Before:
/usr/bin/rpi-eeprom-update
BOOTLOADER: up to date
CURRENT: Wed Jan 11 17:40:52 UTC 2023 (1673458852)
LATEST: Thu Jan 1 00:00:00 UTC 1970 (0)
RELEASE: critical (/lib/firmware/raspberrypi/bootloader/critical)
After:
/usr/bin/rpi-eeprom-update
BOOTLOADER: up to date
CURRENT: Wed Jan 11 17:40:52 UTC 2023 (1673458852)
LATEST: Wed Jan 11 17:40:52 UTC 2023 (1673458852)
RELEASE: critical (/lib/firmware/raspberrypi/bootloader/critical)
Signed-off-by: Ivan T. Ivanov <iivanov@suse.de>
The busybox implementation of find does not detect recursive nested
symlinks, this results in it finding multiple instances of of_node
matching -samefile, the result of which then fails the -e path test.
The of_node symlink we're tyring to find should match the path
/sys/bus/nvmem/devices/*/of_node so just limit the find depth to 3 as
there's no point searching deeper than that.
Signed-off-by: Allan Xavier <mr.a.xavier@googlemail.com>
* [tryboot] conditional statement + tryboot_a_b mode
* Support custom OTP mac addresses
* Increase TFTP_MAX_BLOCK_SIZE
* Stop NVMe cleanly
* Fixes for NETCONSOLE parsing and initialisation.
* Long filename support for start_file / fixup_file.
* Secure boot and display debug info on the diagnostis screen.
Make it explicit that a modifiable file is stored withing a
single 4K sector (for erase) and that this includes the 20
byte header.
When modifying a file pad up to the next section instead of
just to an alignment size. This enables future changes to be
more flexible in terms of alignment and padding. Although,
files/sections with different padding requirements will likely
get a different magic.
Sync to the version from usbboot in order to add support for
the verify option. This provides a command line interface for
verifying a .sig file (with RSA) against a public key in .PEM
format.
Add a new EEPROM property that allows the Ethernet MAC address
programmed during manufacture to be overridden a value in the
Customer OTP register.
MAC_ADDRESS_OTP=A,B
where A and B are the customer row numbers (0..7)
* Add support for a [tryboot] conditional statement in config files.
* Load config.txt instead of tryboot.txt if tryboot_a_b=1 in autoboot.txt
* Fix failover to partition 1 if the `boot_partition` points to non-bootable partition.
* Enable `autoboot.txt` in secure-boot mode.
Enable long-filenames & sub-directories for start_file & fixup_file.
Use Unix path separators with a maximum path of 255 characters.
Relative paths (. or ..) are not supported.
The tool was removed because for Pi4/Pi400 the VL805 update is now
handled by the bootloader. However, this might still be be useful
for anyone who is developing a custom VL805 board with an SPI EEPROM
and needs a mechanism to flash this.
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
does not support network or USB MSD loading of recovery.bin self-update has to
be used with other boot modes anyway.
If RPI_EEPROM_SELF_UPDATE=1 then avoid installing recovery.bin so long as the
current bootloader version supports self-update from SD/MMC and that doesn't
look as though SELF_UPDATE has been disable in the EEPROM config.
Interesting changes since the last default release
* Support and bug fixes for all Compute Module variants.
* NVMe interoperability fixes
* FAT/GPT fixes and file-system performance improvements.
* Add secure-boot support for industrial applications
See https://github.com/raspberrypi/usbboot/blob/master/secure-boot-recovery/README.md
* Added ramdisk / boot.img - for RPIBOOT and secure-boot.
rpi-eeprom-images is a transitional dummy package since v7.2 which pulls in rpi-eeprom >=7.2 as dependency only. It can be hence removed from rpi-eeprom dependencies.
Signed-off-by: MichaIng <micha@dietpi.com>
* This repository contains the Raspberry Pi 4, Pi400 and CM4 bootloader EEPROM images and installation scripts.
* This repository contains the Raspberry Pi 5, Raspberry Pi 4, Pi400, CM4 and CM4-S bootloader EEPROM images and installation scripts.
* Please report boot issues for the earlier models at the GPU firmware repo [github.com/raspberrypi/firmware](https://github.com/raspberrypi/firmware).
* Please report USB issues which occur after the OS has started at the Linux repo [github.com/raspberrypi/linux/](https://github.com/raspberrypi/linux/).
* If you simply have a question, then [the Raspberry Pi forums](https://www.raspberrypi.org/forums) are the best place to ask it.
@@ -39,10 +39,15 @@ body:
description:Onwhich device you are facing the bug?
multiple:true
options:
- Raspberry Pi 5
- Raspberry Pi 500
- Raspberry Pi 4 Mod. B
- Raspberry Pi 400
- Raspberry Pi CM5
- Raspberry Pi CM5 Lite
- Raspberry Pi CM4
- Raspberry Pi CM4 Lite
- Raspberry Pi CM4-S
- Other
validations:
required:true
@@ -52,7 +57,7 @@ body:
attributes:
label:Bootloader configuration.
description:|
Copy and paste the results of `vcgencmd bootloader_config` or describe the failing configuration.
Copy and paste the results of `rpi-eeprom-config` or describe the failing configuration.
*`rpi-eeprom-update` saves a backup of the previous bootloader configuration to `/var/lib/raspberrypi/bootloader/backup` before it schedules the update.
*`rpi-eeprom-config pieeprom.upd` can be used to read the contents of an EEPROM image.
@@ -78,7 +83,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.
This repository contains the scripts and pre-compiled binaries used to create the `rpi-eeprom` package which is used to update the Raspberry Pi 4 bootloader and VLI USB controller EEPROMs.
This repository contains the scripts and pre-compiled binaries used to create the `rpi-eeprom` package which is used to update the Raspberry Pi 4 and Raspberry Pi 5 bootloaders EEPROM images.
# Support
Please check the Raspberry Pi [general discussion forum](https://forums.raspberrypi.com/viewforum.php?f=63) if you have a support question.
@@ -9,8 +9,7 @@ To reset the bootloader back to factory defaults use [Raspberry Pi Imager](https
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.