diff mbox

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

Message ID 1422321801-6743-6-git-send-email-sjg@chromium.org
State Superseded
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass Jan. 27, 2015, 1:23 a.m. UTC
Use the new utility function instead of local code.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/usb/host/ehci-pci.c | 53 +--------------------------------------------
 1 file changed, 1 insertion(+), 52 deletions(-)

Comments

Bin Meng Jan. 27, 2015, 9:55 a.m. UTC | #1
On Tue, Jan 27, 2015 at 9:23 AM, Simon Glass <sjg@chromium.org> wrote:
> Use the new utility function instead of local code.
>
> Signed-off-by: Simon Glass <sjg@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@gmail.com>
Marek Vasut Jan. 27, 2015, 5:50 p.m. UTC | #2
On Tuesday, January 27, 2015 at 02:23:03 AM, Simon Glass wrote:
> Use the new utility function instead of local code.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
> 
>  drivers/usb/host/ehci-pci.c | 53
> +-------------------------------------------- 1 file changed, 1
> insertion(+), 52 deletions(-)

Nice!

Acked-by: Marek Vasut <marex@denx.de>

Do you want to pick it through the x86 tree or shall I pick it through USB ?

Best regards,
Marek Vasut
Simon Glass Jan. 27, 2015, 8:53 p.m. UTC | #3
Hi Marek,

On 27 January 2015 at 10:50, Marek Vasut <marex@denx.de> wrote:
> On Tuesday, January 27, 2015 at 02:23:03 AM, Simon Glass wrote:
>> Use the new utility function instead of local code.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> ---
>>
>>  drivers/usb/host/ehci-pci.c | 53
>> +-------------------------------------------- 1 file changed, 1
>> insertion(+), 52 deletions(-)
>
> Nice!
>
> Acked-by: Marek Vasut <marex@denx.de>
>
> Do you want to pick it through the x86 tree or shall I pick it through USB ?
>

I think x86 is better since it is part of a series.

Regards,
Simon
Marek Vasut Jan. 27, 2015, 9:16 p.m. UTC | #4
On Tuesday, January 27, 2015 at 09:53:01 PM, Simon Glass wrote:
> Hi Marek,

Hi Simon,

> On 27 January 2015 at 10:50, Marek Vasut <marex@denx.de> wrote:
> > On Tuesday, January 27, 2015 at 02:23:03 AM, Simon Glass wrote:
> >> Use the new utility function instead of local code.
> >> 
> >> Signed-off-by: Simon Glass <sjg@chromium.org>
> >> ---
> >> 
> >>  drivers/usb/host/ehci-pci.c | 53
> >> 
> >> +-------------------------------------------- 1 file changed, 1
> >> insertion(+), 52 deletions(-)
> > 
> > Nice!
> > 
> > Acked-by: Marek Vasut <marex@denx.de>
> > 
> > Do you want to pick it through the x86 tree or shall I pick it through
> > USB ?
> 
> I think x86 is better since it is part of a series.

I agree, thanks!

Best regards,
Marek Vasut
diff mbox

Patch

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");