Skip to content

raspberrypi-firmware soc:firmware: Request 0x00030002 returned status 0x00000000 #1944

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
randomMesh opened this issue Feb 10, 2025 · 8 comments

Comments

@randomMesh
Copy link

randomMesh commented Feb 10, 2025

Hi,

i am running Void Linux on my Raspberry Pi 5 and i see a lot of these errors in the kernel log:
raspberrypi-firmware soc:firmware: Request 0x00030002 returned status 0x00000000

Sometimes, but not often, accompanied by
Failed to change fw-clk-arm frequency: -22

For example:

[  646.669171] raspberrypi-firmware soc:firmware: Request 0x00030002 returned status 0x00000000
[ 1671.864309] raspberrypi-firmware soc:firmware: Request 0x00030002 returned status 0x00000000
[ 1758.466384] raspberrypi-firmware soc:firmware: Request 0x00030002 returned status 0x00000000
[ 3912.027866] raspberrypi-firmware soc:firmware: Request 0x00030002 returned status 0x00000000
[ 4675.444096] raspberrypi-firmware soc:firmware: Request 0x00038002 returned status 0x00000000
[ 4675.444116] raspberrypi-clk soc:firmware:clocks: Failed to change fw-clk-arm frequency: -22
[ 5647.245573] raspberrypi-firmware soc:firmware: Request 0x00038002 returned status 0x00000000
[ 5647.245594] raspberrypi-clk soc:firmware:clocks: Failed to change fw-clk-arm frequency: -22
[ 6344.162927] raspberrypi-firmware soc:firmware: Request 0x00038002 returned status 0x00000000
[ 6344.162949] raspberrypi-clk soc:firmware:clocks: Failed to change fw-clk-arm frequency: -22

I don't know if Void Linux is supported here but i want to ask if you can assist getting rid of these errors.

I've seen this thread on the official Raspberry forums in which a Raspberry Pi engineer says the something has killed the firmware and the error can occur if

  • Too high an overclock
  • Inadequate power supply
  • Sending invalid messages (less likely on the pi5 where firmware does a lot less).
  • Corrupting firmware's memory (would likely need sudo/mmap to be allowed to do this outside of kernel)
  • Faulty hardware

I do not overclock my PI.
I use the official PSU.
I don't have faulty hardware since if i boot Raspberry Pi OS, the errors are gone.

So it must either be "Sending invalid messages" or "Corrupting firmware's memory".

Output from rpi-eeprom-update on Raspberry Pi OS:

BOOTLOADER: up to date
   CURRENT: Wed 22 Jan 00:16:51 UTC 2025 (1737505011)
    LATEST: Wed 22 Jan 00:16:51 UTC 2025 (1737505011)
   RELEASE: latest (/usr/lib/firmware/raspberrypi/bootloader-2712/latest)
            Use raspi-config to change the release.

On Void Linux:

[root@xxx ~]$ strings /boot/start.elf | grep VC_BUILD
VC_BUILD_ID_USER: dom
VC_BUILD_ID_TIME: 11:47:03
VC_BUILD_ID_VARIANT: start
VC_BUILD_ID_TIME: Dec  5 2024
VC_BUILD_ID_BRANCH: bcm2711_2
VC_BUILD_ID_HOSTNAME: buildbot
VC_BUILD_ID_PLATFORM: raspberrypi_linux
VC_BUILD_ID_VERSION: 03554ca336a03ace164f36755144e0d8c060062d (clean)

Thanks!

@randomMesh
Copy link
Author

randomMesh commented Feb 11, 2025

I am not sure but i think these errors are somehow connected to the inbuilt WiFi.

If i disable WiFi by adding dtoverlay=disable-wifi-pi5 to config.txt, the errors are gone.

@pelwell
Copy link
Contributor

pelwell commented Feb 11, 2025

After some discussions here, I think the problem may be symptomatic of a busy system rather than a crashed firmware. If I'm right, part of the response from the firmware has not reached memory in time for the ARM cores to see it. This can be avoided by the use of a memory barrier.

I've attached a trial build of the Pi 5 EEPROM with an added memory barrier.

  1. Download the file, unzip it and copy the resulting pieeprom_250211.bin to the Pi 5.
  2. Run sudo rpi-eeprom-update -d -f pieeprom_250211.bin.
  3. Reboot.

Then see if the problem remains.

pieeprom_250211.zip

@randomMesh
Copy link
Author

Thanks for looking into this.

I installed the EEPROM and report back if the problem remains.

BOOTLOADER: up to date
   CURRENT: Tue 11 Feb 13:09:56 UTC 2025 (1739279396)
    LATEST: Wed 22 Jan 00:16:51 UTC 2025 (1737505011)
   RELEASE: latest (/usr/lib/firmware/raspberrypi/bootloader-2712/latest)
            Use raspi-config to change the release.

@randomMesh
Copy link
Author

This seems to have fixed the problem, the errors don't show up in the kernel log anymore.

Thanks again.

@pelwell
Copy link
Contributor

pelwell commented Feb 11, 2025

Cool. The problem has been there since approximately day 1 (back to the Broadcom days), but the fix has now been merged and will be in future EEPROM builds.

timg236 added a commit to timg236/rpi-eeprom that referenced this issue Feb 11, 2025
* 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: raspberrypi/firmware#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: raspberrypi/linux#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.
timg236 added a commit to raspberrypi/rpi-eeprom that referenced this issue Feb 11, 2025
* 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: raspberrypi/firmware#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: raspberrypi/linux#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.
@pelwell
Copy link
Contributor

pelwell commented Feb 12, 2025

I received a notification of a comment saying that the problem was back. The fact that the comment is not here suggests it was wrong in some respect and has been deleted. Is this something I still need to look into or can I close the issue?

@randomMesh
Copy link
Author

You can close the issue, the problem is not back.

I wanted to configure the bootloader you gave me via rpi-eeprom-config -e and i didn't know this command would install the old eeprom afterwards.

My fault, sorry for the noise.

@pelwell
Copy link
Contributor

pelwell commented Feb 12, 2025

No problem. Thanks.

@pelwell pelwell closed this as completed Feb 12, 2025
popcornmix added a commit that referenced this issue Feb 17, 2025
See: #1944

firmware: support dts files with size-cells of 2

firmware: arm_dt: Add support for a 64-bit serial number on Pi4 and older platforms

firmware: platform: 2711: Prune the SPI EEPROM pins

firmware: filesystem: GPT autoboot/reboot partition number fixes for Pi4 and older
popcornmix added a commit to raspberrypi/rpi-firmware that referenced this issue Feb 17, 2025
See: raspberrypi/firmware#1944

firmware: support dts files with size-cells of 2

firmware: arm_dt: Add support for a 64-bit serial number on Pi4 and older platforms

firmware: platform: 2711: Prune the SPI EEPROM pins

firmware: filesystem: GPT autoboot/reboot partition number fixes for Pi4 and older
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants