RaspberryPi CM4 not booting with PCIe device (VL805)

Hello @NiBr,

Have you tried with NVMe before eMMC in BOOT_ORDER? The short story is that there are some complexities with PCIe initialization, and putting NVMe before your eMMC forces PCIe initialization. This might resolve your issue. Your device will still boot from eMMC.

A few related threads:

If you haven’t set BOOT_ORDER before on a CM4, there are instructions online e.g.

The above links are the best source of instructions. But in case it helps, here are the steps that I use on my Mac. I haven’t done this in a while, so the steps may be somewhat out of date:

  1. Build rpiboot on Mac to update the bootloader in eeprom on the CM4
  • git clone --depth=1 https://github.com/raspberrypi/usbboot
  • cd usbboot
  • Check BOOT_ORDER in recovery/boot.conf, edit as needed
    BOOT_UART=1
    # First try NVMe(6), then SD/eMMC(1), USB PCIe(4), USB SoC XHC(5), net(2)
    BOOT_ORDER=0xf25416
  • cd recovery
  • ./update-pieeprom.sh
  • cd ..
  • make
  1. Power off Pi

  2. Fit jumper on CM4 IO Board J2 to disable eMMC boot

  3. Connect micro-USB cable to CM4 IO Board

  4. Update eeprom
    *Run rpiboot on the host, wait for a connection:
    ./rpiboot

  • Power the CM4 - your Mac should see the CM4
  • Flash the new bootloader information to the Pi (you may need to power off and power on your Pi):
    sudo ./rpiboot -d recovery

You should get output such as:

RPIBOOT: build-date Feb 26 2022 version 20220208~181027 042cd145
Loading: recovery/bootcode4.bin
Waiting for BCM2835/6/7/2711…
Loading: recovery/bootcode4.bin
Sending bootcode.bin
Successful read 4 bytes 
Waiting for BCM2835/6/7/2711…
Loading: recovery/bootcode4.bin
Second stage boot server
Loading: recovery/config.txt
File read: config.txt
Loading: recovery/pieeprom.bin
Loading: recovery/pieeprom.bin
Loading: recovery/pieeprom.sig
File read: pieeprom.sig
Loading: recovery/pieeprom.bin
File read: pieeprom.bin
Unknown message
  1. Remove the jumper

  2. Power off Pi