[PATCH v6 0/4] usb: xhci: Load Raspberry Pi 4 VL805's firmware

Stefan Agner stefan at agner.ch
Sun Jul 19 02:37:51 CEST 2020


Hi Nicolas,

On 2020-06-29 18:37, Nicolas Saenz Julienne wrote:
> Newer revisions of the RPi4 need their xHCI chip, VL805, firmware to be
> loaded explicitly. Earlier versions didn't need that as they where using
> an EEPROM for that purpose. This series takes care of setting up the
> relevant infrastructure and run the firmware loading routine at the
> right moment.

I tried using this patchset to boot from a USB mass storage device on
RPi 4 with 8GB RAM. I updated the EEPROM firmware as well as deployed
the latest GPU firmware (start4.elf/fixup4.dat) from the firmware master
branch. I think with that I have new enough/correct versions.

The RPi 4 successfully boots U-Boot from a mass storage device. However,
U-Boot itself is then not able to access USB. The output always shows
-110 (timeout). It seems that the VL805 controller is not detected on
the PCIe bus. Do you happen to know what I might be missing?

I tried current master (which has your patchset merged) as well as your
vl805 branch on Github.


U-Boot 2020.07-rc4-00036-gdeb48986ee (Jul 19 2020 - 02:29:44 +0200)

DRAM:  7.9 GiB
RPI 4 Model B (0xd03114)
MMC:   mmcnr at 7e300000: 1, emmc2 at 7e340000: 0
Loading Environment from FAT... Card did not respond to voltage select!
In:    serial
Out:   vidconsole
Err:   vidconsole
Net:   eth0: genet at 7d580000
PCIe BRCM: link up, 5.0 Gbps x1 (!SSC)
Device 'pci_0:0.0': seq 0 is in use by 'pcie at 7d500000'
starting USB...
Bus xhci_pci: probe failed, error -110
No working controllers found
Hit any key to stop autoboot:  0 
U-Boot> pci enum
U-Boot> pci
Scanning PCI devices on bus 0
BusDevFun  VendorId   DeviceId   Device Class       Sub-Class
_____________________________________________________________
00.00.00   0x14e4     0x2711     Bridge device           0x04


--
Stefan

> 
> Note that this builds on top of Sylwester Nawrocki's "USB host support
> for Raspberry Pi 4 board" series.
> 
> This also depends on a DT/bindings patch available on the linux-mailing lists:
> https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg2205783.html
> 
> Here is the relevant bit for reference/discussion:
> 
>         &pcie0 {
>                pci at 1,0 {
>                        #address-cells = <3>;
>                        #size-cells = <2>;
>                        ranges;
> 
>                        reg = <0 0 0 0 0>;
> 
>                        usb at 1,0 {
>                                reg = <0x10000 0 0 0 0>;
>                                resets = <&reset
> RASPBERRYPI_FIRMWARE_RESET_ID_USB>;
>                        };
>                };
>         };
> 
> ---
> 
> Changes since v5:
>  - Properly handle !CONFIG_IS_ENABLED(DM_RESET) in xchi code
> 
> Changes since v4:
>  - Correct DT PCI topology, I separated the root bridge and controller
>    DT nodes
>  - Get rid of PCI core patch as not needed with correct DT PCI topology
>  - Move reset support to xchi core
> 
> Changes since v3:
>  - Use reset controller
> 
> Changes since v2:
>  - Correct comment on patch #1
>  - Address Matthias' comments
> 
> Changes since v1:
>  - Rename function
>  - Use callback in xhci-pci.c
> 
> Nicolas Saenz Julienne (4):
>   arm: rpi: Add function to trigger VL805's firmware load
>   reset: Add Raspberry Pi 4 firmware reset controller
>   configs: Enable support for reset controllers on RPi4
>   usb: xhci: Add reset controller support
> 
>  arch/arm/mach-bcm283x/include/mach/mbox.h     | 13 ++++
>  arch/arm/mach-bcm283x/include/mach/msg.h      |  7 +++
>  arch/arm/mach-bcm283x/msg.c                   | 46 ++++++++++++++
>  configs/rpi_4_32b_defconfig                   |  1 +
>  configs/rpi_4_defconfig                       |  1 +
>  configs/rpi_arm64_defconfig                   |  1 +
>  drivers/reset/Kconfig                         | 10 ++++
>  drivers/reset/Makefile                        |  1 +
>  drivers/reset/reset-raspberrypi.c             | 60 +++++++++++++++++++
>  drivers/usb/host/xhci-mem.c                   |  2 +
>  drivers/usb/host/xhci.c                       | 33 ++++++++++
>  .../reset/raspberrypi,firmware-reset.h        | 13 ++++
>  include/usb/xhci.h                            |  2 +
>  13 files changed, 190 insertions(+)
>  create mode 100644 drivers/reset/reset-raspberrypi.c
>  create mode 100644 include/dt-bindings/reset/raspberrypi,firmware-reset.h


More information about the U-Boot mailing list