Testing pci_mvebu.c with Kirkwood SoCs

Tony Dinh mibodhi at gmail.com
Tue Nov 9 07:34:51 CET 2021


Hi Marek and Pali,

On Mon, Nov 8, 2021 at 3:04 PM Marek Behún <marek.behun at nic.cz> wrote:
>
> On Mon, 8 Nov 2021 14:48:03 -0800
> Tony Dinh <mibodhi at gmail.com> wrote:
>
> > > So to avoid calling 'pci enum' manually, you need to put pci_init();
> > > function call into your board board_early_init_r() function.
> >
> > Thanks! will do that.
>
> Don't do that.
>
> Instead enable CONFIG_PCI_INIT_R and CONFIG_SYS_EARLY_PCI_INIT, and the
> code in common/board_r.c will do it itself.
>
> Look at:
>
> https://source.denx.de/u-boot/u-boot/-/blob/f8ed9059001d803b0eae4b49178789aa0e29edec/common/board_r.c#L675

Thanks for that advice. I also compared this code with the  "pci enum"
command. Indeed, like Pali said, it just calls pci_init() like in
board_r.c.

However, after enabling CONFIG_PCI_INIT_R and
CONFIG_SYS_EARLY_PCI_INIT, it hit a bug-on while scanning the USB bus!

U-Boot 2022.01-rc1-00054-g52207514ba-dirty (Nov 08 2021 - 22:17:10 -0800)
Pogoplug V4

SoC:   Kirkwood 88F6192_A1
DRAM:  128 MiB
device_probe:
device_probe: exit 0
mvebu_pcie_bind: begin
mvebu_pcie_bind: got an available node
Bound device  to pcie at 82000000
mvebu_pcie_bind: bound
mvebu_pcie_bind: exit 0
Bound device pcie at 82000000 to mbus at f1000000
Bound device mbus at f1000000 to root_driver
Bound device ehci at 50000 to ocp at f1000000
Bound device ethernet-controller at 72000 to ocp at f1000000
Bound device sata at 80000 to ocp at f1000000
Bound device mvsdio at 90000.blk to mvsdio at 90000
Bound device mvsdio at 90000 to ocp at f1000000
Bound device ocp at f1000000 to root_driver
NAND:  128 MiB
MMC:   device_probe:
device_probe:
device_probe:
device_probe: exit 0
device_probe: exit 0
device_probe:
device_probe:
mvsdio at 90000: 0
Loading Environment from NAND... *** Warning - bad CRC, using default
environment

device_probe:
device_probe:
device_probe:
device_probe:
device_probe: exit 0
device_probe: exit 0
mvebu_pcie_probe:
mvebu_pcie_probe: exit 0
Bound device pci_0:0.0 to pcie0.0
device_probe:
device_probe:
Bound device xhci_pci to pci_0:0.0
device_probe: exit 0
device_probe: exit 0
device_probe:
In:    serial
Out:   serial
Err:   serial
Net:   device_probe:
device_probe:

Warning: ethernet-controller at 72000 (eth0) using random MAC address -
82:09:1e:66:49:21
device_probe: exit 0
eth0: ethernet-controller at 72000
Hit any key to stop autoboot:  0
Pogo_V4> pci 0
device_probe:
Scanning PCI devices on bus 0
BusDevFun  VendorId   DeviceId   Device Class       Sub-Class
_____________________________________________________________
00.00.00   0x11ab     0x6281     Bridge device           0x04
Pogo_V4> pci 1
device_probe:
Scanning PCI devices on bus 1
BusDevFun  VendorId   DeviceId   Device Class       Sub-Class
_____________________________________________________________
01.00.00   0x1b73     0x1009     Serial bus controller   0x03
Pogo_V4> usb start
starting USB...
Bus ehci at 50000: device_probe:
device_probe:
USB EHCI 1.00
device_probe: exit 0
Bus xhci_pci: device_probe:
device_probe:
Register 400081f NbrPorts 4
Starting the controller
USB XHCI 1.00
device_probe: exit 0
scanning bus ehci at 50000 for devices... Bound device usb_hub to ehci at 50000
device_probe:
device_probe:
Bound device usb_hub to usb_hub
device_probe:
device_probe:
device_probe: exit 0
Bound device usb_mass_storage to usb_hub
device_probe:
device_probe:
Bound device usb_mass_storage.lun0 to usb_mass_storage
device_probe: exit 0
device_probe: exit 0
3 USB Device(s) found
scanning bus xhci_pci for devices... Bound device usb_hub to xhci_pci
device_probe:
device_probe:
XHCI timeout on event type 33... cannot recover.
BUG at drivers/usb/host/xhci-ring.c:481/xhci_wait_for_event()!
BUG!
resetting ...

The above log was the build with the following configs:
CONFIG_CMD_PCI=y
CONFIG_PCI=y
CONFIG_PCI_MVEBU=y
CONFIG_PCI_PNP=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XHCI_MVEBU=y
CONFIG_PCI_INIT_R=y
CONFIG_SYS_EARLY_PCI_INIT=y


Any idea how to debug this? there must be some differences between the
pci_init call early on, and much later with "pci enum".

Thanks,
Tony

>
> Marek


More information about the U-Boot mailing list