Testing pci_mvebu.c with Kirkwood SoCs

Tony Dinh mibodhi at gmail.com
Tue Nov 9 23:51:33 CET 2021


Hi Pali,

On Tue, Nov 9, 2021 at 7:08 AM Pali Rohár <pali at kernel.org> wrote:
>
> On Monday 08 November 2021 22:34:51 Tony Dinh wrote:
> > 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".
>
> Hello! The only difference is when pci_init() function is called. So it
> looks like that it needs to be called later (perhaps because PCIe needs
> some other steps for initialization?).
>
> Could you try to disable CONFIG_SYS_EARLY_PCI_INIT option if it helps?

Please correct me if I'm wrong. It is a compound condition in
board_r.c, so it would not be executed anyway?

#if defined(CONFIG_PCI_INIT_R) && defined(CONFIG_SYS_EARLY_PCI_INIT)


> And could you try to put pci_init() into board_early_init_r() and
> disable both CONFIG_SYS_EARLY_PCI_INIT and CONFIG_PCI_INIT_R if it
> helps?

This did not help. I've added board_early_init_r to the board file,
and called pci_init() there. In the debug output, I can see pci_init()
executed early. But later, "usb start" still hangs at EHCI enumeration
like before.

scanning bus ehci at 50000 for devices... Bound device usb_hub to ehci at 50000

Strangely, on a hunch, I ran it a second time and then did "pci enum"
and "usb start", I got a bit further. Now it scans the XHCI bus, and
gets 3 USB devices, but then hangs.

scanning bus ehci at 50000 for devices... Bound device usb_hub to ehci at 50000
Bound device usb_hub to usb_hub
Bound device usb_mass_storage to usb_hub
Bound device usb_mass_storage.lun0 to usb_mass_storage
3 USB Device(s) found
scanning bus xhci_pci for devices... Bound device usb_hub to xhci_pci

So it seems that after the board has finished initialization, calling
pci_init() again from "pci enum" will result in more probing
processing.

Thanks,
Tony


More information about the U-Boot mailing list