The new Raspberry Pi 4 has two EEPROMs (electrically erasable programmable read-only memory) that store the firmware (boot loader code as well as the code of the USB 3.0 host controller VL805). In previous Raspberry Pi boards, the firmware was stored on the SD card.
Few days ago, a new firmware has been released that updates the VL805 code to the version 000137ab. According to several sources, this new firmware reduces the power consumption and board temperatures by enabling the power-saving functionality in the VL805 USB 3.0 controller.
According to Eben Upton:
The bootloader (and associated firmware) actually reduce the power consumption of both the USB controller and core SoC, with the USB controller accounting for about half the power saving.
Even the most USB-heavy use cases see some benefit from ASPM (ASPM = Active-State Power Management).
This USB firmware was in beta test since several months and is now in stable state.
If you have a Raspberry Pi 4, you can update the firmware with a new utility: rpi-eeprom-update. To install rpi-eeprom-update, update and upgrade your Raspbian and then install the rpi-eeprom package:
$ sudo apt update $ sudo apt upgrade $ sudo apt install rpi-eeprom
Now, run the following command to check the status of the bootloader + VL805 code:
$ sudo rpi-eeprom-update
You should see something like this:
The bootloader code is up to date but a reboot is required to update the VL805 code.
After the reboot:
Before the firmware update, the temperature of the processor was between around 58°C at idle state with a small heatsink (see this article). After the update, the same temperature is now around 52°C. Nice improvement!
- rpi-eeprom @ github
- Firmware release notes
- Raspberry Pi 4 boot EEPROM
- Newly-Released Raspberry Pi 4 USB 3.0 Firmware Drops Power Draw, Heat Output on All Models
- Raspberry Pi 4 Update Cools Temps, Adds Network Booting
- Raspberry Pi 4 Bootloader Firmware Updating / Recovery Guide
- RPi4: Now Overclocked, Net-Booted, And Power-Sipping
The help output of the rpi-eeprom-update utility has some interesting information:
rpi-eeprom-update [options]... [FILE] Checks whether the Raspberry Pi bootloader and the VL805 USB controller EEPROMs are up-to-date and optionally updates the EEPROMs at the next reboot. The default update mechanism writes recovery.bin and the EEPROM update image(s) (pieeprom.upd and vl805.bin) to the boot partition on the sd-card. The SHA256 hash of the corresponding images are written to pieeprom.sig and/or vl805.sig. This guards against file system corruption which could cause the EEPROM to be flashed with an invalid image. This is is not a security check. At the next reboot the ROM runs recovery.bin which updates EEPROM(s). If the update was successful recovery.bin renames itself to recovery.000 to prevent it from running a second time then resets the system. The system should then boot normally. If /boot does not correspond to the boot partition on the sd-card and this is not a NOOBS system then the mount point for BOOTFS should be defined in /etc/default/rpi-eeprom-update by defining the BOOTFS variable. For reference, the flashrom update mechanism may be enabled by defining USE_FLASHROM=1 in /etc/default/rpi-eeprom-update. This not recommended because the SPI pins are muxed with audio and other device drivers may be using SPI (e.g. HATs). This is also not safe in the event of a power failure during the update of the EEPROM. A backup of the current EEPROM config file is written to /var/lib/raspberrypi/bootloader/backup before applying the update. -a Automatically install bootloader and USB (VLI) EEPROM updates. -A Specify which type of EEPROM to automatically update (vl805 or bootloader) -d Use the default bootloader config instead of migrating the current settings -f Install the given file instead of the latest applicable update Ignores the FREEZE_VERSION flag in bootloader and is intended for manual firmware updates. WARNING: This command should only be run from console mode in order to avoid conflicts/deadlock with dtoverlay/dtparam settings. -h Display help text and exit -i Ignore package checksums - for rpi-eeprom developers. -j Write status information using JSON notation -m Write status information to the given file when run without -a or -f -r Removes temporary EEPROM update files from the boot partition. -u Install the specified VL805 (USB EEPROM) image file. To extract the configuration file from an EEPROM image: rpi-eeprom-config pieeprom.bin --out bootconf.txt 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 The syntax is the same as config.txt but section filters etc are not supported. See online documentation for the list of parameters. The official documentation for the Raspberry Pi bootloader EEPROM is available at https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md