Message ID | 1448828291-12660-23-git-send-email-sjg@chromium.org |
---|---|
State | Accepted |
Commit | 09c5c16455b29b51f3a5be2267d79aa9d80ded39 |
Delegated to: | Simon Glass |
Headers | show |
On Sunday, November 29, 2015 at 09:18:07 PM, Simon Glass wrote: > Convert this driver to use the new driver model PCI API. > > Signed-off-by: Simon Glass <sjg@chromium.org> > Reviewed-by: Bin Meng <bmeng.cn@gmail.com> ad subject -- it's EHCI, not ECHI . > --- > > Changes in v2: > - Use u32 instead of uint32_t > - Use uintptr_t to cast the hcor address > > drivers/usb/host/ehci-pci.c | 51 > ++++++++++++++++++++++++++++++++++----------- 1 file changed, 39 > insertions(+), 12 deletions(-) > > diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c > index d607088..cda1c6d 100644 > --- a/drivers/usb/host/ehci-pci.c > +++ b/drivers/usb/host/ehci-pci.c > @@ -18,32 +18,34 @@ struct ehci_pci_priv { > struct ehci_ctrl ehci; > }; > > -static void ehci_pci_common_init(pci_dev_t pdev, struct ehci_hccr > **ret_hccr, - struct ehci_hcor **ret_hcor) > +#ifdef CONFIG_DM_USB > + > +static void ehci_pci_init(struct udevice *dev, struct ehci_hccr > **ret_hccr, + struct ehci_hcor **ret_hcor) > { > struct ehci_hccr *hccr; > struct ehci_hcor *hcor; > - uint32_t cmd; > + u32 cmd; > > - hccr = (struct ehci_hccr *)pci_map_bar(pdev, > + hccr = (struct ehci_hccr *)dm_pci_map_bar(dev, > PCI_BASE_ADDRESS_0, PCI_REGION_MEM); > - hcor = (struct ehci_hcor *)((uint32_t) hccr + > + hcor = (struct ehci_hcor *)((uintptr_t) hccr + > HC_LENGTH(ehci_readl(&hccr->cr_capbase))); > > debug("EHCI-PCI init hccr 0x%x and hcor 0x%x hc_length %d\n", > - (uint32_t)hccr, (uint32_t)hcor, > - (uint32_t)HC_LENGTH(ehci_readl(&hccr->cr_capbase))); > + (u32)hccr, (u32)hcor, > + (u32)HC_LENGTH(ehci_readl(&hccr->cr_capbase))); Use uintptr here as well then ? > *ret_hccr = hccr; > *ret_hcor = hcor; > > /* enable busmaster */ > - pci_read_config_dword(pdev, PCI_COMMAND, &cmd); > + dm_pci_read_config32(dev, PCI_COMMAND, &cmd); > cmd |= PCI_COMMAND_MASTER; > - pci_write_config_dword(pdev, PCI_COMMAND, cmd); > + dm_pci_write_config32(dev, PCI_COMMAND, cmd); > } Looks good otherwise, Acked-by: Marek Vasut <marex@denx.de>
Hi Marek, On 29 November 2015 at 13:43, Marek Vasut <marex@denx.de> wrote: > On Sunday, November 29, 2015 at 09:18:07 PM, Simon Glass wrote: >> Convert this driver to use the new driver model PCI API. >> >> Signed-off-by: Simon Glass <sjg@chromium.org> >> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> > > ad subject -- it's EHCI, not ECHI . > >> --- >> >> Changes in v2: >> - Use u32 instead of uint32_t >> - Use uintptr_t to cast the hcor address >> >> drivers/usb/host/ehci-pci.c | 51 >> ++++++++++++++++++++++++++++++++++----------- 1 file changed, 39 >> insertions(+), 12 deletions(-) >> >> diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c >> index d607088..cda1c6d 100644 >> --- a/drivers/usb/host/ehci-pci.c >> +++ b/drivers/usb/host/ehci-pci.c >> @@ -18,32 +18,34 @@ struct ehci_pci_priv { >> struct ehci_ctrl ehci; >> }; >> >> -static void ehci_pci_common_init(pci_dev_t pdev, struct ehci_hccr >> **ret_hccr, - struct ehci_hcor **ret_hcor) >> +#ifdef CONFIG_DM_USB >> + >> +static void ehci_pci_init(struct udevice *dev, struct ehci_hccr >> **ret_hccr, + struct ehci_hcor **ret_hcor) >> { >> struct ehci_hccr *hccr; >> struct ehci_hcor *hcor; >> - uint32_t cmd; >> + u32 cmd; >> >> - hccr = (struct ehci_hccr *)pci_map_bar(pdev, >> + hccr = (struct ehci_hccr *)dm_pci_map_bar(dev, >> PCI_BASE_ADDRESS_0, PCI_REGION_MEM); >> - hcor = (struct ehci_hcor *)((uint32_t) hccr + >> + hcor = (struct ehci_hcor *)((uintptr_t) hccr + >> HC_LENGTH(ehci_readl(&hccr->cr_capbase))); >> >> debug("EHCI-PCI init hccr 0x%x and hcor 0x%x hc_length %d\n", >> - (uint32_t)hccr, (uint32_t)hcor, >> - (uint32_t)HC_LENGTH(ehci_readl(&hccr->cr_capbase))); >> + (u32)hccr, (u32)hcor, >> + (u32)HC_LENGTH(ehci_readl(&hccr->cr_capbase))); > > Use uintptr here as well then ? That's a length rather than a pointer isn't it? Also it looks the same as the other example. > >> *ret_hccr = hccr; >> *ret_hcor = hcor; >> >> /* enable busmaster */ >> - pci_read_config_dword(pdev, PCI_COMMAND, &cmd); >> + dm_pci_read_config32(dev, PCI_COMMAND, &cmd); >> cmd |= PCI_COMMAND_MASTER; >> - pci_write_config_dword(pdev, PCI_COMMAND, cmd); >> + dm_pci_write_config32(dev, PCI_COMMAND, cmd); >> } > > Looks good otherwise, > > Acked-by: Marek Vasut <marex@denx.de> I can always update this with a patch or even rework this patch. But for now: Applied to u-boot-dm/next. Regards, Simon
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index d607088..cda1c6d 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c @@ -18,32 +18,34 @@ struct ehci_pci_priv { struct ehci_ctrl ehci; }; -static void ehci_pci_common_init(pci_dev_t pdev, struct ehci_hccr **ret_hccr, - struct ehci_hcor **ret_hcor) +#ifdef CONFIG_DM_USB + +static void ehci_pci_init(struct udevice *dev, struct ehci_hccr **ret_hccr, + struct ehci_hcor **ret_hcor) { struct ehci_hccr *hccr; struct ehci_hcor *hcor; - uint32_t cmd; + u32 cmd; - hccr = (struct ehci_hccr *)pci_map_bar(pdev, + hccr = (struct ehci_hccr *)dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, PCI_REGION_MEM); - hcor = (struct ehci_hcor *)((uint32_t) hccr + + hcor = (struct ehci_hcor *)((uintptr_t) hccr + HC_LENGTH(ehci_readl(&hccr->cr_capbase))); debug("EHCI-PCI init hccr 0x%x and hcor 0x%x hc_length %d\n", - (uint32_t)hccr, (uint32_t)hcor, - (uint32_t)HC_LENGTH(ehci_readl(&hccr->cr_capbase))); + (u32)hccr, (u32)hcor, + (u32)HC_LENGTH(ehci_readl(&hccr->cr_capbase))); *ret_hccr = hccr; *ret_hcor = hcor; /* enable busmaster */ - pci_read_config_dword(pdev, PCI_COMMAND, &cmd); + dm_pci_read_config32(dev, PCI_COMMAND, &cmd); cmd |= PCI_COMMAND_MASTER; - pci_write_config_dword(pdev, PCI_COMMAND, cmd); + dm_pci_write_config32(dev, PCI_COMMAND, cmd); } -#ifndef CONFIG_DM_USB +#else #ifdef CONFIG_PCI_EHCI_DEVICE static struct pci_device_id ehci_pci_ids[] = { @@ -55,6 +57,31 @@ static struct pci_device_id ehci_pci_ids[] = { }; #endif +static void ehci_pci_legacy_init(pci_dev_t pdev, struct ehci_hccr **ret_hccr, + struct ehci_hcor **ret_hcor) +{ + struct ehci_hccr *hccr; + struct ehci_hcor *hcor; + u32 cmd; + + hccr = (struct ehci_hccr *)pci_map_bar(pdev, + PCI_BASE_ADDRESS_0, PCI_REGION_MEM); + hcor = (struct ehci_hcor *)((uintptr_t) hccr + + HC_LENGTH(ehci_readl(&hccr->cr_capbase))); + + debug("EHCI-PCI init hccr 0x%x and hcor 0x%x hc_length %d\n", + (u32)hccr, (u32)hcor, + (u32)HC_LENGTH(ehci_readl(&hccr->cr_capbase))); + + *ret_hccr = hccr; + *ret_hcor = hcor; + + /* enable busmaster */ + pci_read_config_dword(pdev, PCI_COMMAND, &cmd); + cmd |= PCI_COMMAND_MASTER; + pci_write_config_dword(pdev, PCI_COMMAND, cmd); +} + /* * Create the appropriate control structures to manage * a new EHCI host controller. @@ -73,7 +100,7 @@ int ehci_hcd_init(int index, enum usb_init_type init, printf("EHCI host controller not found\n"); return -1; } - ehci_pci_common_init(pdev, ret_hccr, ret_hcor); + ehci_pci_legacy_init(pdev, ret_hccr, ret_hcor); return 0; } @@ -94,7 +121,7 @@ static int ehci_pci_probe(struct udevice *dev) struct ehci_hccr *hccr; struct ehci_hcor *hcor; - ehci_pci_common_init(dm_pci_get_bdf(dev), &hccr, &hcor); + ehci_pci_init(dev, &hccr, &hcor); return ehci_register(dev, hccr, hcor, NULL, 0, USB_INIT_HOST); }