Skip to content
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

USB boot support for raspberrypicm4-ioboard-sb #1141

Merged
merged 9 commits into from
Jul 21, 2024
Merged

USB boot support for raspberrypicm4-ioboard-sb #1141

merged 9 commits into from
Jul 21, 2024

Commits on Jul 15, 2024

  1. rpi-eeprom: raspberrypicm4-ioboard-sb: modify boot order to prioritis…

    …e USB boot
    
    With this change the device will first attempt to boot from USB and then
    boot from the NVME/internal eMMC/SD card. This allows to use USB flasher
    images as provisioning tools in preference of usbboot.
    
    5: USB 2.0 boot from USB type A socket (CM4) or Type C socket (RPI4)
    6: NVME
    1: eMMC / SD Card
    2: Network boot
    
    We place NVME before eMMC/SDcard as there are reports that NVME is not
    working if initialized after.
    
    Also, there is no USB mass storage boot to limit this option to using
    physical jumper configuration.
    
    See https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#BOOT_ORDER
    
    Note that trying USB boot first adds a considerable delay to the boot
    process as the CM4 has a timeout of 2s (5s if extended via
    `program_usb_boot_timeout=1`  per USB port enumeration.
    
    As such, this change is only done to the `raspberrypicm4-ioboard-sb`
    that requires USB boot for the secure boot provisioning flow.
    
    Changelog-entry: Modify boot order to prioritize USB boot
    Signed-off-by: Alex Gonzalez <alexg@balena.io>
    alexgg committed Jul 15, 2024
    Configuration menu
    Copy the full SHA
    dad87cf View commit details
    Browse the repository at this point in the history
  2. rpi-eeprom: raspberrypicm4-ioboard-sb: configure to power off on halt

    This is useful for the use case of a flasher image ran from external
    media, like in the traditional flasher workflow that expects the device
    to shutdown after programming.
    
    From https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#POWER_OFF_ON_HALT
    
    Changelog-entry: configure to power off on halt for raspberrypicm4-ioboard-sb
    Signed-off-by: Alex Gonzalez <alexg@balena.io>
    alexgg committed Jul 15, 2024
    Configuration menu
    Copy the full SHA
    5641da6 View commit details
    Browse the repository at this point in the history
  3. rpi-config: enable USB 2.0 for raspberrypicm4-ioboard-sb

    As CM4 and CM4IO don’t include the external USB 3 controller,
    RaspberryPi OS sets `otg_mode=1` for better performance.
    
    See https://www.raspberrypi.com/documentation/computers/config_txt.html#otg_mode-raspberry-pi-4-only
    
    However, while testing, the kernel driver oops when the otg cable is
    connected at boot (works well if it is connected after boot though).
    
    As this is only needed in the USB provisioning mode, restrict the change
    to the raspberrypicm4-ioboard-sb for the time being.
    
    Changelog-entry: enable USB 2.0 for raspberrypicm4-ioboard-sb
    Signed-off-by: Alex Gonzalez <alexg@balena.io>
    alexgg committed Jul 15, 2024
    Configuration menu
    Copy the full SHA
    6838519 View commit details
    Browse the repository at this point in the history
  4. usbboot: conditionally sign msd binaries

    With the USB provisioning being preferred, the msd binaries are no
    longer required.
    
    This commit adds a recipe configuration to make the signing conditional.
    
    Changelog-entry: do not sign msd binaries by default as they are not needed
    Signed-off-by: Alex Gonzalez <alexg@balena.io>
    alexgg committed Jul 15, 2024
    Configuration menu
    Copy the full SHA
    3cc312f View commit details
    Browse the repository at this point in the history
  5. rpi-eeprom: deploy locking binaries

    Changelog-entry: deploy CM4/RPI4 locking binaries
    Signed-off-by: Alex Gonzalez <alexg@balena.io>
    alexgg committed Jul 15, 2024
    Configuration menu
    Copy the full SHA
    3da91bb View commit details
    Browse the repository at this point in the history
  6. docs: rpi-secure-boot: update with USB booting re-provisioning process

    Also, remove mentioning that write protecting further OTP changes is
    globally possible as only the customer OTP registers have this feature
    and these are not used by the secure boot implementation.
    
    Change-type: patch
    Signed-off-by: Alex Gonzalez <alexg@balena.io>
    alexgg committed Jul 15, 2024
    Configuration menu
    Copy the full SHA
    a867de4 View commit details
    Browse the repository at this point in the history
  7. rpi-eeprom: update firmware to 2024-05-17

    Changelog-entry: update rpi-eeprom firmware to 2024-05-17
    Signed-off-by: Alex Gonzalez <alexg@balena.io>
    alexgg committed Jul 15, 2024
    Configuration menu
    Copy the full SHA
    3336d35 View commit details
    Browse the repository at this point in the history

Commits on Jul 16, 2024

  1. rpi-config: replace otg_mode with the dwc2 driver

    The `otg_mode=1` setting makes the firmware mux the USB port
    to the XHCI host-only controller. However, even though this correctly
    enabled host mode in the USB port, the kernel drivers oops when a cable
    is plugged into the OTG port in the ioboard, probably because the XCHI
    controller does not support OTG or device mode.
    
    This commit reverts to using the dwc2 kernel overlay which has less
    performance but does not crash.
    
    Changelog-entry: use dwc2 driver for USB host mode in CM4-SB.
    Signed-off-by: Alex Gonzalez <alexg@balena.io>
    alexgg committed Jul 16, 2024
    Configuration menu
    Copy the full SHA
    fdb332b View commit details
    Browse the repository at this point in the history
  2. linux: raspberrypicm4-ioboard-sb: add support for the dwc2 kernel driver

    This adds support for the DesignWare Core USB 2.0 controller, required
    for the USB boot flow.
    
    Changelog-entry: add dwc2 support to the raspberrypicm4-ioboard-sb kernel
    Signed-off-by: Alex Gonzalez <alexg@balena.io>
    alexgg committed Jul 16, 2024
    Configuration menu
    Copy the full SHA
    e6d55dd View commit details
    Browse the repository at this point in the history