Date: Thu, 8 Oct 2020 23:01:33 -0700 From: Mark Millard <marklmi@yahoo.com> To: Klaus Cucinauomo <maciphone2@googlemail.com> Cc: freebsd-arm <freebsd-arm@freebsd.org> Subject: Re: RPi4B: emmc2bus dma-range handling does not track the boot-time-FDT (u-boot based booting) Message-ID: <2B3F0409-88F2-4EBD-9C39-37929F973C77@yahoo.com> In-Reply-To: <91324D35-B66A-4674-AE37-45F3DDB736FD@yahoo.com> References: <D8BDF95A-D6A8-4E95-A0CE-D53068E8355B.ref@yahoo.com> <D8BDF95A-D6A8-4E95-A0CE-D53068E8355B@yahoo.com> <ABE16EA6-49F1-461F-9B8A-6DAA7ED6A18D@googlemail.com> <98BC985D-EAAB-4AFB-AA8F-7391A45C4EBF@yahoo.com> <91324D35-B66A-4674-AE37-45F3DDB736FD@yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2020-Oct-8, at 21:29, Mark Millard <marklmi at yahoo.com> wrote: > On 2020-Oct-8, at 20:06, Mark Millard <marklmi at yahoo.com> wrote: >=20 >> On 2020-Oct-8, at 06:27, Klaus Cucinauomo <maciphone2 at = googlemail.com> wrote: >>=20 >>>> Am 08.10.2020 um 11:01 schrieb Mark Millard via freebsd-arm = <freebsd-arm@freebsd.org>: >>>>=20 >>>>=20 >>>> The old u-boot/DTB combination in use does not have emmc2bus. >>>> And, even if it did, FreeBSD would not use =E2=80=A6=E2=80=A6=E2=80=A6= . >>>=20 >>> =E2=80=A6 and the new 2020.10- combinations will even be more = annoying=E2=80=A6 >>> While I meanwhile e.g. could boot the 4GB off of xhci, it hangs in = DeviceTree, >>> Depending on GUESSED ;-) combinations and DeviceTree-patches in src = . >>> There have to be necessary adjustments which are even not yet = upstreamed in u-boot=20 >>> (depending on hw-revisions)=E2=80=A6and so on ... >>> I doubt that anyone really will take explicitly time consuming care = of all that annoying RPI4-crap. >>> I don't see any other way than targeting minimum 1 developer(better = more) ONLY to the RPI-platform=20 >>> for a time period=E2=80=A6 other than leaving it crappy as is and = to be happy that it nevertheless=20 >>> is a working fbsd-gadget :-) >>=20 >>=20 >> Summary of probable-cause finding: u-boot 2020.10 is >> expecting: >>=20 >> compatible =3D "brcm,generic-xhci" >>=20 >> instead of what seems to be in files that are in use >> by FreeBSD: >>=20 >> compatible =3D "generic-xhci" >>=20 >> (I've no clue what all the other differences in the .dtb >> file contents might be.) >>=20 >>=20 >>=20 >> The details of what I learned that reached that status . . . >>=20 >> I updated my ports environment on a RPi4 to build the final 2020.10 = u-boot >> for the RPi4. I then built it and replaced the u-boot.bin on the = microsd >> card that I boot with via the FreeBSD kernel being from that microsd = card >> but later stages being from the USB3 SSD. I did not update anything = else. >> So: still an older .dtb file. >>=20 >> That 8 GiByte RPi4B context booted just fine. >>=20 >> I then rebooted and had it stop in u-boot and looked around just a = little >> bit. >>=20 >> U-Boot 2020.10 (Oct 09 2020 - 00:51:29 +0000) >>=20 >> DRAM: 7.9 GiB >> RPI 4 Model B (0xd03114) >> MMC: mmc@7e300000: 1, emmc2@7e340000: 0 >> Loading Environment from FAT... In: serial >> Out: vidconsole >> Err: vidconsole >> Net: eth0: ethernet@7d580000 >> PCIe BRCM: link up, 5.0 Gbps x1 (SSC) >> starting USB... >> Bus xhci_pci: probe failed, error -110 >> No working controllers found >> Hit any key to stop autoboot: 0=20 >>=20 >> So it reproted the problem above. Yet . . . >>=20 >> U-Boot> pci 0 >> Scanning PCI devices on bus 0 >> BusDevFun VendorId DeviceId Device Class Sub-Class >> _____________________________________________________________ >> 00.00.00 0x14e4 0x2711 Bridge device 0x04 >>=20 >> U-Boot> pci 1 =20 >> Scanning PCI devices on bus 1 >> BusDevFun VendorId DeviceId Device Class Sub-Class >> _____________________________________________________________ >> 01.00.00 0x1106 0x3483 Serial bus controller 0x03 >>=20 >> So it does see the xHCI on the pci bus despite the >> "Bus xhci_pci: probe failed, error -110". -110 looks >> to be -ETIMEDOUT . >>=20 >> Looking at the v2020.10/drivers/usb/host/xhci-pci.c source >> code shows that the xhci_pci driver has: >>=20 >> . . . >> static const struct udevice_id xhci_pci_ids[] =3D { >> { .compatible =3D "xhci-pci" }, >> { } >> }; >>=20 >> U_BOOT_DRIVER(xhci_pci) =3D { >> .name =3D "xhci_pci", >> .id =3D UCLASS_USB, >> .probe =3D xhci_pci_probe, >> .remove =3D xhci_deregister, >> .of_match =3D xhci_pci_ids, >> .ops =3D &xhci_usb_ops, >> .platdata_auto_alloc_size =3D sizeof(struct usb_platdata), >> .priv_auto_alloc_size =3D sizeof(struct xhci_ctrl), >> .flags =3D DM_FLAG_ALLOC_PRIV_DMA, >> }; >>=20 >> static struct pci_device_id xhci_pci_supported[] =3D { >> { PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_XHCI, ~0) }, >> {}, >> }; >>=20 >> U_BOOT_PCI_DEVICE(xhci_pci, xhci_pci_supported); >>=20 >> (It looks like the above driver is used as the default >> driver if no explicit match is found. It has been around >> for years.) >>=20 >>=20 >> But, in the past when I showed the likes of fdt print / >> or translation to a .dts file, it did not have "xhci-pci" >> in compatible but had "generic-xhci" instead, such as: >>=20 >> xhci@7e9c0000 { >> compatible =3D "generic-xhci"; >> status =3D "disabled"; >> reg =3D <0x00000000 0x7e9c0000 0x00000000 = 0x00100000>; >> interrupts =3D <0x00000000 0x000000b0 = 0x00000004>; >> phandle =3D <0x000000d3>; >> }; >>=20 >> For reference, for FreeBSD there is: >>=20 >> # grep -ri "xhci-pci" /usr/src/sys/ | more >> # grep -ri "generic-xhci" /usr/src/sys/ | more >> /usr/src/sys/dev/usb/controller/generic_xhci_fdt.c: = {"generic-xhci", true}, >> /usr/src/sys/gnu/dts/arm/bcm-nsp.dtsi: compatible =3D = "generic-xhci"; >> /usr/src/sys/gnu/dts/arm/bcm5301x.dtsi: = compatible =3D "generic-xhci"; >> /usr/src/sys/gnu/dts/arm64/broadcom/stingray/stingray-usb.dtsi: = compatible =3D "generic-xhci"; >> /usr/src/sys/gnu/dts/arm64/broadcom/stingray/stingray-usb.dtsi: = compatible =3D "generic-xhci"; >> /usr/src/sys/gnu/dts/arm64/marvell/armada-37xx.dtsi: = "generic-xhci"; >> /usr/src/sys/gnu/dts/arm64/marvell/armada-cp11x.dtsi: = "generic-xhci"; >> /usr/src/sys/gnu/dts/arm64/marvell/armada-cp11x.dtsi: = "generic-xhci"; >>=20 >> That FreeBSD generic_xhci_fdt.c match is from: >>=20 >> static struct ofw_compat_data compat_data[] =3D { >> {"marvell,armada-380-xhci", true}, >> {"marvell,armada3700-xhci", true}, >> {"marvell,armada-8k-xhci", true}, >> {"generic-xhci", true}, >> {NULL, false} >> }; >>=20 >> (End for-reference.) >>=20 >> There is another driver in u-boot 2020.10, one that >> does mention "generic-" for xhci in >> drivers/usb/host/xhci-brcm.c : >>=20 >> static const struct udevice_id xhci_brcm_ids[] =3D { >> { .compatible =3D "brcm,generic-xhci" }, >> { } >> }; >>=20 >> U_BOOT_DRIVER(usb_xhci) =3D { >> .name =3D "xhci_brcm", >> .id =3D UCLASS_USB, >> .probe =3D xhci_brcm_probe, >> .remove =3D xhci_brcm_deregister, >> .ops =3D &xhci_usb_ops, >> .of_match =3D xhci_brcm_ids, >> .platdata_auto_alloc_size =3D sizeof(struct = brcm_xhci_platdata), >> .priv_auto_alloc_size =3D sizeof(struct xhci_ctrl), >> .flags =3D DM_FLAG_ALLOC_PRIV_DMA, >> }; >>=20 >> It is a new driver as of around 6 months ago and so is likely >> the one created for the RPi4B context. >>=20 >> (Note the usb_xhci vs. xhci_brcm distinct namings of >> the driver.) >>=20 >>=20 >> The .dtb files that I use for uefi/ACPI booting of FreeBSD >> and for u-boot based booting of ubuntu 2010.04.1 also use >> "generic-xhci", no "brcm," invovled. >>=20 >> It seems that .dtb files that the u-boot folks expect for >> the RPi4B are vintages/variations that have compatible >> listing: "brcm,generic-xhci" . >>=20 >> If one finds a .dtb with such, it might be close to what >> they were testing. With such a file, finding other >> differences with the .dtb files currently in use with >> FreeBSD could be done. >>=20 >> I hope that the above helps. >=20 > Looks like the u-boot.bin built includes "xhci-pci" > but excludes "brcm,generic-xhci": not in the output > of hd /usr/local/share/u-boot/u-boot-rpi4/u-boot.bin > after the port is installed. >=20 > My initial guess would be that something more needs > to be specified to cause drivers/usb/host/xhci-brcm.c > (and possibly more) to be built and included. Looks like that was a bad guess, it still gets: No working controllers found based on instead having the "brcm,generic-xhci" driver (with a "generic-xhci" added to the compatibility list). =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2B3F0409-88F2-4EBD-9C39-37929F973C77>