[U-Boot] [PATCH 05/23] usb: pci: Use pci_find_class() to find the device

Bin Meng bmeng.cn at gmail.com
Tue Jan 27 10:55:23 CET 2015


On Tue, Jan 27, 2015 at 9:23 AM, Simon Glass <sjg at chromium.org> wrote:
> Use the new utility function instead of local code.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
>  drivers/usb/host/ehci-pci.c | 53 +--------------------------------------------
>  1 file changed, 1 insertion(+), 52 deletions(-)
>
> diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
> index 991b199..b9eabc5 100644
> --- a/drivers/usb/host/ehci-pci.c
> +++ b/drivers/usb/host/ehci-pci.c
> @@ -34,57 +34,6 @@ static struct pci_device_id ehci_pci_ids[] = {
>         {0, 0}
>  };
>  #else
> -static pci_dev_t ehci_find_class(int index)
> -{
> -       int bus;
> -       int devnum;
> -       pci_dev_t bdf;
> -       uint32_t class;
> -
> -       for (bus = 0; bus <= pci_last_busno(); bus++) {
> -               for (devnum = 0; devnum < PCI_MAX_PCI_DEVICES-1; devnum++) {
> -                       pci_read_config_dword(PCI_BDF(bus, devnum, 0),
> -                                             PCI_CLASS_REVISION, &class);
> -                       if (class >> 16 == 0xffff)
> -                               continue;
> -
> -                       for (bdf = PCI_BDF(bus, devnum, 0);
> -                                       bdf <= PCI_BDF(bus, devnum,
> -                                               PCI_MAX_PCI_FUNCTIONS - 1);
> -                                       bdf += PCI_BDF(0, 0, 1)) {
> -                               pci_read_config_dword(bdf, PCI_CLASS_REVISION,
> -                                                     &class);
> -                               class >>= 8;
> -                               /*
> -                                * Here be dragons! In case we have multiple
> -                                * PCI EHCI controllers, this function will
> -                                * be called multiple times as well. This
> -                                * function will scan the PCI busses, always
> -                                * starting from bus 0, device 0, function 0,
> -                                * until it finds an USB controller. The USB
> -                                * stack gives us an 'index' of a controller
> -                                * that is currently being registered, which
> -                                * is a number, starting from 0 and growing
> -                                * in ascending order as controllers are added.
> -                                * To avoid probing the same controller in tne
> -                                * subsequent runs of this function, we will
> -                                * skip 'index - 1' detected controllers and
> -                                * report the index'th controller.
> -                                */
> -                               if (class != PCI_CLASS_SERIAL_USB_EHCI)
> -                                       continue;
> -                               if (index) {
> -                                       index--;
> -                                       continue;
> -                               }
> -                               /* Return index'th controller. */
> -                               return bdf;
> -                       }
> -               }
> -       }
> -
> -       return -ENODEV;
> -}
>  #endif
>
>  /*
> @@ -102,7 +51,7 @@ int ehci_hcd_init(int index, enum usb_init_type init,
>  #ifdef CONFIG_PCI_EHCI_DEVICE
>         pdev = pci_find_devices(ehci_pci_ids, CONFIG_PCI_EHCI_DEVICE);
>  #else
> -       pdev = ehci_find_class(index);
> +       pdev = pci_find_class(PCI_CLASS_SERIAL_USB_EHCI, index);
>  #endif
>         if (pdev < 0) {
>                 printf("EHCI host controller not found\n");
> --

Reviewed-by: Bin Meng <bmeng.cn at gmail.com>


More information about the U-Boot mailing list