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

Stefan Agner stefan at agner.ch
Sat Aug 1 14:25:24 CEST 2020


Hi Nicolas,

I do have USB MSD boot working with at least two USB flash drives
successfully.

I now tried using a USB NVMe enclosure (ICY BOX with a JMicron chip in
it). It seems that U-Boot has troubles enumerating the device at first,
but "usb reset" helps:

U-Boo 2020.07 (Jul 25 2020 - 06:55:15 +0000)

DRAM:  1.9 GiB
RPI 4 Model B (0xb03112)
MMC:   mmcnr at 7e300000: 1, emmc2 at 7e340000: 0
In:    serial
Out:   serial
Err:   serial
Net:   eth0: genet at 7d580000
PCIe BRCM: link up, 5.0 Gbps x1 (SSC)
startig USB...
Bus xhci_pci: Register 5000420 NbrPorts 5
Starting the controller
USB XHCI 1.00
scanning bus xhci_pci for devces... Device NOT ready
   Request Sense returned 02 04 01
4 USB Device(s) found
       scanning usb for storage devices... 0 Sorage Device(s) found
Card did not respond to voltage select!
Card did not respond to voltage select!

genet at 7d580000 Waiting for PHY auto negotiation to complete... done
BOOTP broadcast 1
DHCP client bound to address 192.168.80.226 (3 ms
====> Ctrl+C
HassOS> <INTERRUPT>
HassOS> usb tree
USB device tree:
  1  Hub (5 Gb/s, 0mA)
  |  U-Boot XHCI Host Controller
  |
  +-2  MassStorage (5 Gb/s, 224mA)
  |    JMicron USB 3.1 Storage Device DD56419884B3E
  |
  +-3  Hub (480 Mb/s, 100A)
    |   USB2.0 Hub
    |
    +-4  Human Interface (12 Mb/s, 98mA)
         Logitech USB Receiver

HassOS> ls usb 0:1
HassOS> usb reset
resetting USB...
Bus xhci_pci: Register 5000420 NbrPorts 5
Starting the controller
USB XHCI 1.00
scanning bus xhci_ci for devices... 4 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found
HassOS>ls usb 0:1
    41499   bcm2711-rpi-4-b.dtb
     2382   boot.scr
       57   cmdline.txt
     1785   config.txt
           overlays/
   488304   u-boot.bin
  2272992   start4.elf.orig
  2277376   start4.elf
     5405   fixup4.dat.orig
     5407   fiup4.dat

9 file(s), 1 dir(s)

HassOS> usb tree
USB device tree:
  1  Hub (5 Gb/s, 0mA)
  |  U-Boot XHCI Host Controller
  |
  |+-2  Mass Storage (5 Gb/s, 224mA)
  |    JMicron USB 3.1 Storage Device DD56419884B3E
  |
  +-3  Hub (480 b/s, 100mA)
    |   USB2.0 Hub
    |
    +-4  Human Interface (12 Mb/s, 98mA)
         Logitech USB Receier

The device then boots and works fine.


Do you happen to know if there is some tunable in U-Boot which might
help?
https://github.com/home-assistant/operating-system/issues/796

--
Stefan


On 2020-07-19 12:06, Nicolas Saenz Julienne wrote:
> Hi Stefan,
> 
> On Sun, 2020-07-19 at 02:37 +0200, Stefan Agner wrote:
>> 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.
> 
> 
> You're probably missing these two patches on your device-tree, they haven't
> made it upstream yet, but most likely will soon:
> 
> https://patchwork.ozlabs.org/project/linux-pci/patch/20200629161845.6021-4-nsaenzjulienne@suse.de/
> https://patchwork.ozlabs.org/project/linux-pci/patch/20200629161845.6021-5-nsaenzjulienne@suse.de/
> 
> Sorry for the hassle!
> Nicolas
> 
>>
>> 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