4

Ran following and bootloader version is now 000138c0.

$ sudo rpi-eeprom-update -a

Asking because sudo apt update; sudo apt upgrade -y does not appear to upgrade bootloader.

I am worried I upgraded to unstable bootloader… can one downgrade bootloader (wasn’t able to find docs on the topic)?

I tried restoring bootloader to factory default (using Raspberry Pi Imager) and bootloader version is still 000138c0.

sunknudsen
  • 447
  • 1
  • 5
  • 14
  • Have you read the documentation? If not, please do so, and then consider editing your question. – Seamus Jan 28 '23 at 01:58
  • Also, this answer may be a bit out-of-date, but at least part of it remains valid. FWIW, this EEPROM update has always been a bit obtuse, and it seems to be getting more so as time goes on. But rest assured, there is a way through the thicket. – Seamus Jan 28 '23 at 02:23
  • Thanks for helping out @Seamus. Would you happen to know how one can downgrade bootloader? I tried resetting bootloader to factory defaults using sudo raspi-config but sudo rpi-eeprom-update shows both current and latest as 000138c0. – sunknudsen Jan 28 '23 at 10:46
  • @Milliways I get it… what you really meant is “Perhaps you should edit your question to reflect new question in comments (if need be).”. Btw, I stand by my original question and @Seamus pointed me in the right direction. That said, I still don’t feel comfortable having ran sudo rpi-eeprom-update -a. Not sure which version of bootloader is safe and how one can downgrade if one upgraded by mistake. – sunknudsen Jan 28 '23 at 12:16
  • It is possible to "downgrade" (provided you have an old version) but pointless. There is NOTHING you can't do with current version that you could with older versions (although the default powerdown action changed from initial versions). Newer versions just added more options BUT you need to explicitly enable them. My current eeprom settings are unchanged from initial release (except for power down) which is easily restored. – Milliways Jan 28 '23 at 12:52
  • First: It's been a while since I had to dig into this pile, but AFAIK, 000138c0 is not actually a version number. Instead, the "version number" is obtained as follows: vcgencmd bootloader_version. I rely on this answer & the docs for that opinion. Second: The answer to your question was in the link that I put in my first comment; please read it thoroughly. CONTINUED ==> – Seamus Jan 29 '23 at 07:35
  • But yes, I think it's possible to "roll back" your EEPROM contents to an earlier version using the -f option (ref man rpi-eeprom-update) - as was described in the answer which was linked in my first comment. And after walking through what passes for documentation now, I'll try to post an answer now that attempts to address what I *think* your concerns are. – Seamus Jan 29 '23 at 07:41

2 Answers2

3

QUESTION: Is it safe to update EEPROM to latest using rpi-eeprom-update?

If you use the term "safe" to mean that you won't brick your RPi 4, then I would answer your question with a confident "Yes - it is safe." But as always, caveats will apply. Is it "safe" to operate a car on the motorway?... Well, yes, if you fasten your seatbelt, obey the traffic laws, etc. I digress to make the obvious point that "safe" is a relative term - not an absolute one.

You have noted that apt does not upgrade the bootloader, but this is only partially true. There is a default process in place that will perform an Automatic Update of the EEPROM firmware:

The rpi-eeprom-update systemd service runs at startup and applies an update if a new image is available, automatically migrating the current bootloader configuration.

IOW, apt does download the latest firmware, but a reboot is required to apply it.

You've said, "... the bootloader version is now 000138c0." Again, that is partially true. You're referring to a firmware update file named vl805-000138c0.bin that is in the latest firmware update stream (the other streams are beta and critical). However, this update is applied to a different area of the EEPROM than the bootloader updates. The VL805 is the Pi 4's USB controller, and its firmware is stored in EEPROM separately from the bootloader firmware (see Note 1 below).

Firmware revisions are normally identified with a date stamp in the filename; e.g. pieeprom-2023-01-11.bin, but as noted above the vl805 upgrades are handled a bit differently. FWIW, firmware revisions/checksums are confusingly identified in one of 3 different ways, but suffice it to say for now that 000138c0 is not one that has ever been used previously!

You have not upgraded to an unstable bootloader. The file vl805-000138c0.bin has been applied to the USB controller's portion of EEPROM, but the file pieeprom-2023-01-11.bin should also have been applied to the bootloader's location in EEPROM. Both files are in the latest stream which means that they have been through some testing and verification prior to their release. I suspect that the reason rpi-eeprom-update reports 000138c0 is the authors simply decided not to put the additional effort into making the output less confusing to users.

Your result for "restoring bootloader to factory default" is likely due to the the "source" of your factory default; IOW, the RPi imager is drawing from the same sources as apt, and so the current factory default is vl805-000138c0.bin.

In conclusion, I don't think you have anything to worry about. This business with the USB controller's firmware updates has perhaps not been handled by the RPi organization in the most transparent fashion, but it does appear they've handled it. If you're still concerned, or you want to experiment, please refer to this other answer. There is also an older, related answer on EEPROM updates and configuration that may have additional details of interest.


Note 1:

You didn't mention this in your question, but you can check the installed version of both the bootloader and the vl805 firmware using the rpi-eeprom-update script with no options. And avoid a confusing error: run it with root privileges: sudo rpi-eeprom-update. You should see something like this:

$ sudo rpi-eeprom-update
BOOTLOADER: up to date
   CURRENT: Wed 11 Jan 17:40:52 UTC 2023 (1673458852)
    LATEST: Wed 11 Jan 17:40:52 UTC 2023 (1673458852)
   RELEASE: stable (/lib/firmware/raspberrypi/bootloader/stable)
            Use raspi-config to change the release.

VL805_FW: Dedicated VL805 EEPROM VL805: up to date CURRENT: 000138c0 LATEST: 000138c0

Note 2:

The VL805, its firmware and its upgrade process is poorly documented in the official documentation. AIUI, the RPi organization does not have any visibility of the VL805 firmware; it is proprietary to Via Labs. This raises questions about visibility and quality control, but since all the RPi firmware is proprietary, this doesn't seem to change much from the user perspective. And looking forward, the Rev 4 RPi 4 boards are said to have disposed of the VL805.

Seamus
  • 21,900
  • 3
  • 33
  • 70
2

By default EEPROM updates are applied automatically by the system. In brief summary, that upgrade process works as follows:

  1. apt downloads new firmware for the EEPROM when it is available
  2. The downloaded firmware is packaged as *.bin files, and they are saved to one of three (3) directories under /lib/firmware/raspberrypi/bootloader
  3. Once the new firmware is downloaded, it is written to the EEPROM during the next reboot.

You can verify the firmware version currently installed for both the bootloader and the vl805 USB firmware using the rpi-eeprom-update script as follows:

$ sudo rpi-eeprom-update
BOOTLOADER: up to date
CURRENT: Wed 11 Jan 17:40:52 UTC 2023 (1673458852)
 LATEST: Wed 11 Jan 17:40:52 UTC 2023 (1673458852)
RELEASE: stable (/lib/firmware/raspberrypi/bootloader/stable)
         Use raspi-config to change the release.

VL805_FW: Dedicated VL805 EEPROM VL805: up to date CURRENT: 000138c0 LATEST: 000138c0

Alternatively, the following command will give you the installed firmware status (as above) and the status of the systemd service that automatically updates the firmware:

$ systemctl status rpi-eeprom-update

Many users will not need to read any further; the default configuration will maintain your EEPROM firmware at the version considered to be safest and most reliable. If you're interested in alternatives to this default, read on.

There are other relevant details:

1. Firmware Release Streams

There are 3 firmware release streams that reflect 3 different maturity levels of the firmware. They are segregated into 3 sub-directories under /lib/firmware/raspberrypi/bootloader/ as follows:

old name new name "maturity"
beta beta Least mature
stable latest Medium maturity
critical default Most mature

Notice that soft links have been added to /lib/firmware/raspberrypi/bootloader/ that provide redirection for the new names to the old names; this should help minimize the confusion created by re-naming the release streams.

2. Choosing your default release stream:

For many people, the default, automatic firmware update process works best. If you do nothing to change it, this process will cause apt to download (but not apply) all firmware updates as they become available. The latest version from the critical/default channel will then be applied during the next reboot.

But you may decide that you want to keep your firmware a bit more current than the critical/default stream. If you decide that you wish to follow the stable/latest stream, you can change that as follows:

Open the file at /etc/default/rpi-eeprom-update in your editor, and replace (or add) the following line:

FIRMWARE_RELEASE_STATUS="latest" 

Of course, you may elect to follow the beta release stream instead. Which ever stream you choose, this will put your firmware upgrades on autopilot, with the caveat that a reboot is required to actually apply the firmware in the file to the EEPROM.

Another option you may choose is to perform no firmware upgrades at all! There are two methods available to freeze your firmware revision temporarily or permanently:

  • mask the systemd auto-update process:
sudo systemctl mask rpi-eeprom-update 
3. Manual EEPROM firmware Upgrades & Retrogades:

For some, there may be occasions which demand a manual firmware upgrade. For example, a new feature is introduced, and you cannot wait for this feature to reach maturity and become part of the critical/default stream. Or, you may have applied a firmware upgrade, then concluded that it has created a problem and the firmware must be restored to a previous version.

The RPi organization's GitHub repo contains a set of release notes for the bootloader EEPROM updates. This can be very helpful wrt manual upgrade decisions.

In general, firmware upgrades AND firmware retrogrades are reliably performed using the rpi-eeprom-update script. As always, users should refer to the system manuals for detailed usage guidance; i.e. read man rpi-eeprom-update before undertaking any upgrades or retrogrades.

Pay particular attention to the OPTIONS in man rpi-eeprom-update. Two in particular are -a and -f filename:

  • -a : automatically install the latest available update from the stream defined in /etc/default/rpi-eeprom-update. For example, if FIRMWARE_RELEASE_STATUS="default", this command will install the latest file at /lib/firmware/raspberrypi/bootloader/critical:
sudo rpi-eeprom-update -a

And as of today (Jan 29, 2023), on my system, that command would write the EEPROM with contents of the file at: /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2022-12-07.bin. The file at /lib/firmware/raspberrypi/bootloader/critical/vl805-000138a1.bin would also be applied, but only to the USB firmware area of the EEPROM. I've been unable to find any reliable documentation on this, but apparently the RPi organization has made hardware changes (to appear in Rev 1.4) that will obviate the need for separate updates for the USB.

  • -f filename : install the named file; for example:
$ sudo rpi-eeprom-update -f /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2022-12-07.bin

This would update the EEPROM firmware, but exclude an upgrade to the USB firmware. It is equivalent to:

$ sudo rpi-eeprom-update -A vl805
Seamus
  • 21,900
  • 3
  • 33
  • 70