
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@7e300000: 1, emmc2@7e340000: 0 In: serial Out: serial Err: serial Net: eth0: genet@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@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-n... https://patchwork.ozlabs.org/project/linux-pci/patch/20200629161845.6021-5-n...
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@7e300000: 1, emmc2@7e340000: 0 Loading Environment from FAT... Card did not respond to voltage select! In: serial Out: vidconsole Err: vidconsole Net: eth0: genet@7d580000 PCIe BRCM: link up, 5.0 Gbps x1 (!SSC) Device 'pci_0:0.0': seq 0 is in use by 'pcie@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@1,0 { #address-cells = <3>; #size-cells = <2>; ranges; reg = <0 0 0 0 0>; usb@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