Message ID | DB5PR0401MB1925CDF6CBD45ACBEE95D152F5F60@DB5PR0401MB1925.eurprd04.prod.outlook.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wednesday, September 21, 2016 11:43:59 AM CEST Sriram Dash wrote: > >From: Arnd Bergmann [mailto:arnd@arndb.de] > >On Wednesday, September 21, 2016 11:06:47 AM CEST Sriram Dash wrote: > > ============================================================== > From 8b0dea1513e9e73a11dcfa802ddc71cca11d66f8 Mon Sep 17 00:00:00 2001 > From: Sriram Dash <sriram.dash@nxp.com> > Date: Wed, 21 Sep 2016 11:39:30 +0530 > Subject: [PATCH] usb: xhci: Fix the patch inherit dma configuration from > parent dev > > Fixes the patch https://patchwork.kernel.org/patch/9319527/ > ("usb: dwc3: host: inherit dma configuration from parent dev"). > > Signed-off-by: Sriram Dash <sriram.dash@nxp.com> > --- > drivers/usb/host/xhci-mem.c | 12 ++++++------ > drivers/usb/host/xhci.c | 20 ++++++++++---------- > 2 files changed, 16 insertions(+), 16 deletions(-) > > diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c > index 6afe323..79608df 100644 > --- a/drivers/usb/host/xhci-mem.c > +++ b/drivers/usb/host/xhci-mem.c All the changes you did to this file seem fine, I completely missed that part. > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index 01d96c9..9a1ff09 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -231,7 +231,7 @@ static int xhci_free_msi(struct xhci_hcd *xhci) > static int xhci_setup_msi(struct xhci_hcd *xhci) > { > int ret; > - struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); > + struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); > > ret = pci_enable_msi(pdev); > if (ret) { This one is interesting as I stumbled over some code comment mentioning that for dwc3-pci, we don't support MSI. I think with this change, we /can/ actually support MSI, but this could be a separate patch and we'd have to test it on dwc3-pci hardware. Same for most of this file. > @@ -745,7 +745,7 @@ void xhci_shutdown(struct usb_hcd *hcd) > struct xhci_hcd *xhci = hcd_to_xhci(hcd); > > if (xhci->quirks & XHCI_SPURIOUS_REBOOT) > - usb_disable_xhci_ports(to_pci_dev(hcd->self.controller)); > + usb_disable_xhci_ports(to_pci_dev(hcd->self.sysdev)); > > spin_lock_irq(&xhci->lock); > xhci_halt(xhci); This seems obviously correct, but I don't yet see why it currently works. We probably don't call this function on dwc3. > #ifdef CONFIG_PM > @@ -3605,7 +3605,7 @@ void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev) > * if no devices remain. > */ > if (xhci->quirks & XHCI_RESET_ON_RESUME) > - pm_runtime_put_noidle(hcd->self.controller); > + pm_runtime_put_noidle(hcd->self.sysdev); > #endif > > ret = xhci_check_args(hcd, udev, NULL, 0, true, __func__); I suspect this one is wrong, based on what Felipe explained earlier: the power management should propagate down from the child to the parent device. Someone who understands this better than I do should look at it. > @@ -3745,7 +3745,7 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev) > * suspend if there is a device attached. > */ > if (xhci->quirks & XHCI_RESET_ON_RESUME) > - pm_runtime_get_noresume(hcd->self.controller); > + pm_runtime_get_noresume(hcd->self.sysdev); > #endif > > Same here. > @@ -4834,7 +4834,7 @@ int xhci_get_frame(struct usb_hcd *hcd) > int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) > { > struct xhci_hcd *xhci; > - struct device *dev = hcd->self.controller; > + struct device *dev = hcd->self.sysdev; > int retval; This one calls get_quirks(dev, xhci); not sure whether this should be called with self.controller or self.sysdev, we should audit every one of the callers here to be sure: drivers/usb/host/xhci-mtk.c: return xhci_gen_setup(hcd, xhci_mtk_quirks); drivers/usb/host/xhci-pci.c: retval = xhci_gen_setup(hcd, xhci_pci_quirks); drivers/usb/host/xhci-plat.c: return xhci_gen_setup(hcd, xhci_plat_quirks); drivers/usb/host/xhci-rcar.c: * xhci_gen_setup(). drivers/usb/host/xhci-tegra.c: return xhci_gen_setup(hcd, tegra_xhci_quirks); Arnd
Hi Sriram, [auto build test ERROR on usb/usb-testing] [also build test ERROR on v4.8-rc7 next-20160921] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] [Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on] [Check https://git-scm.com/docs/git-format-patch for more information] url: https://github.com/0day-ci/linux/commits/Sriram-Dash/usb-xhci-Fix-the-patch-inherit-dma-configuration-from/20160922-004329 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: x86_64-randconfig-x012-201638 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All error/warnings (new ones prefixed by >>): In file included from include/linux/list.h:8:0, from include/linux/pci.h:25, from drivers/usb/host/xhci.c:23: drivers/usb/host/xhci.c: In function 'xhci_setup_msi': >> drivers/usb/host/xhci.c:234:60: error: 'struct usb_bus' has no member named 'sysdev' struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); ^ include/linux/kernel.h:831:49: note: in definition of macro 'container_of' const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^~~ >> drivers/usb/host/xhci.c:234:26: note: in expansion of macro 'to_pci_dev' struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); ^~~~~~~~~~ drivers/usb/host/xhci.c: In function 'xhci_free_irq': drivers/usb/host/xhci.c:260:59: error: 'struct usb_bus' has no member named 'sysdev' struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); ^ include/linux/kernel.h:831:49: note: in definition of macro 'container_of' const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^~~ drivers/usb/host/xhci.c:260:25: note: in expansion of macro 'to_pci_dev' struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); ^~~~~~~~~~ drivers/usb/host/xhci.c: In function 'xhci_setup_msix': drivers/usb/host/xhci.c:283:45: error: 'struct usb_bus' has no member named 'sysdev' struct pci_dev *pdev = to_pci_dev(hcd->self.sysdev); ^ include/linux/kernel.h:831:49: note: in definition of macro 'container_of' const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^~~ drivers/usb/host/xhci.c:283:25: note: in expansion of macro 'to_pci_dev' struct pci_dev *pdev = to_pci_dev(hcd->self.sysdev); ^~~~~~~~~~ drivers/usb/host/xhci.c: In function 'xhci_cleanup_msix': drivers/usb/host/xhci.c:338:45: error: 'struct usb_bus' has no member named 'sysdev' struct pci_dev *pdev = to_pci_dev(hcd->self.sysdev); ^ include/linux/kernel.h:831:49: note: in definition of macro 'container_of' const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^~~ drivers/usb/host/xhci.c:338:25: note: in expansion of macro 'to_pci_dev' struct pci_dev *pdev = to_pci_dev(hcd->self.sysdev); ^~~~~~~~~~ drivers/usb/host/xhci.c: In function 'xhci_try_enable_msi': drivers/usb/host/xhci.c:377:43: error: 'struct usb_bus' has no member named 'sysdev' pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); ^ include/linux/kernel.h:831:49: note: in definition of macro 'container_of' const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^~~ drivers/usb/host/xhci.c:377:9: note: in expansion of macro 'to_pci_dev' pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); ^~~~~~~~~~ drivers/usb/host/xhci.c: In function 'xhci_shutdown': drivers/usb/host/xhci.c:746:46: error: 'struct usb_bus' has no member named 'sysdev' usb_disable_xhci_ports(to_pci_dev(hcd->self.sysdev)); ^ include/linux/kernel.h:831:49: note: in definition of macro 'container_of' const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^~~ drivers/usb/host/xhci.c:746:26: note: in expansion of macro 'to_pci_dev' usb_disable_xhci_ports(to_pci_dev(hcd->self.sysdev)); ^~~~~~~~~~ drivers/usb/host/xhci.c:763:43: error: 'struct usb_bus' has no member named 'sysdev' pci_set_power_state(to_pci_dev(hcd->self.sysdev), PCI_D3hot); ^ include/linux/kernel.h:831:49: note: in definition of macro 'container_of' const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^~~ drivers/usb/host/xhci.c:763:23: note: in expansion of macro 'to_pci_dev' pci_set_power_state(to_pci_dev(hcd->self.sysdev), PCI_D3hot); ^~~~~~~~~~ drivers/usb/host/xhci.c: In function 'xhci_gen_setup': drivers/usb/host/xhci.c:4835:33: error: 'struct usb_bus' has no member named 'sysdev' struct device *dev = hcd->self.sysdev; ^ -- drivers/usb/host/xhci-mem.c: In function 'xhci_free_stream_ctx': >> drivers/usb/host/xhci-mem.c:589:46: error: 'struct usb_bus' has no member named 'sysdev' struct device *dev = xhci_to_hcd(xhci)->self.sysdev; ^ drivers/usb/host/xhci-mem.c: In function 'xhci_alloc_stream_ctx': drivers/usb/host/xhci-mem.c:617:46: error: 'struct usb_bus' has no member named 'sysdev' struct device *dev = xhci_to_hcd(xhci)->self.sysdev; ^ drivers/usb/host/xhci-mem.c: In function 'scratchpad_alloc': drivers/usb/host/xhci-mem.c:1647:46: error: 'struct usb_bus' has no member named 'sysdev' struct device *dev = xhci_to_hcd(xhci)->self.sysdev; ^ drivers/usb/host/xhci-mem.c: In function 'scratchpad_free': drivers/usb/host/xhci-mem.c:1719:46: error: 'struct usb_bus' has no member named 'sysdev' struct device *dev = xhci_to_hcd(xhci)->self.sysdev; ^ drivers/usb/host/xhci-mem.c: In function 'xhci_mem_cleanup': drivers/usb/host/xhci-mem.c:1795:46: error: 'struct usb_bus' has no member named 'sysdev' struct device *dev = xhci_to_hcd(xhci)->self.sysdev; ^ drivers/usb/host/xhci-mem.c: In function 'xhci_mem_init': drivers/usb/host/xhci-mem.c:2337:46: error: 'struct usb_bus' has no member named 'sysdev' struct device *dev = xhci_to_hcd(xhci)->self.sysdev; ^ vim +234 drivers/usb/host/xhci.c 228 /* 229 * Set up MSI 230 */ 231 static int xhci_setup_msi(struct xhci_hcd *xhci) 232 { 233 int ret; > 234 struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); 235 236 ret = pci_enable_msi(pdev); 237 if (ret) { --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
>From: Arnd Bergmann [mailto:arnd@arndb.de] >On Wednesday, September 21, 2016 11:43:59 AM CEST Sriram Dash wrote: >> >From: Arnd Bergmann [mailto:arnd@arndb.de] On Wednesday, September >> >21, 2016 11:06:47 AM CEST Sriram Dash wrote: >> >> ============================================================== >> From 8b0dea1513e9e73a11dcfa802ddc71cca11d66f8 Mon Sep 17 00:00:00 2001 >> From: Sriram Dash <sriram.dash@nxp.com> >> Date: Wed, 21 Sep 2016 11:39:30 +0530 >> Subject: [PATCH] usb: xhci: Fix the patch inherit dma configuration >> from parent dev >> >> Fixes the patch https://patchwork.kernel.org/patch/9319527/ >> ("usb: dwc3: host: inherit dma configuration from parent dev"). >> >> Signed-off-by: Sriram Dash <sriram.dash@nxp.com> >> --- >> drivers/usb/host/xhci-mem.c | 12 ++++++------ >> drivers/usb/host/xhci.c | 20 ++++++++++---------- >> 2 files changed, 16 insertions(+), 16 deletions(-) >> >> diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c >> index 6afe323..79608df 100644 >> --- a/drivers/usb/host/xhci-mem.c >> +++ b/drivers/usb/host/xhci-mem.c > >All the changes you did to this file seem fine, I completely missed that part. > >> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index >> 01d96c9..9a1ff09 100644 >> --- a/drivers/usb/host/xhci.c >> +++ b/drivers/usb/host/xhci.c Yes. Some sanity is required over this patch. >> @@ -231,7 +231,7 @@ static int xhci_free_msi(struct xhci_hcd *xhci) >> static int xhci_setup_msi(struct xhci_hcd *xhci) { >> int ret; >> - struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); >> + struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); >> >> ret = pci_enable_msi(pdev); >> if (ret) { > >This one is interesting as I stumbled over some code comment mentioning that for >dwc3-pci, we don't support MSI. I think with this change, we /can/ actually support >MSI, but this could be a separate patch and we'd have to test it on dwc3-pci >hardware. Same for most of this file. > >> @@ -745,7 +745,7 @@ void xhci_shutdown(struct usb_hcd *hcd) >> struct xhci_hcd *xhci = hcd_to_xhci(hcd); >> >> if (xhci->quirks & XHCI_SPURIOUS_REBOOT) >> - usb_disable_xhci_ports(to_pci_dev(hcd->self.controller)); >> + usb_disable_xhci_ports(to_pci_dev(hcd->self.sysdev)); >> >> spin_lock_irq(&xhci->lock); >> xhci_halt(xhci); > >This seems obviously correct, but I don't yet see why it currently works. We >probably don't call this function on dwc3. > >> #ifdef CONFIG_PM >> @@ -3605,7 +3605,7 @@ void xhci_free_dev(struct usb_hcd *hcd, struct >usb_device *udev) >> * if no devices remain. >> */ >> if (xhci->quirks & XHCI_RESET_ON_RESUME) >> - pm_runtime_put_noidle(hcd->self.controller); >> + pm_runtime_put_noidle(hcd->self.sysdev); >> #endif >> >> ret = xhci_check_args(hcd, udev, NULL, 0, true, __func__); > >I suspect this one is wrong, based on what Felipe explained earlier: >the power management should propagate down from the child to the parent >device. > >Someone who understands this better than I do should look at it. > >> @@ -3745,7 +3745,7 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct >usb_device *udev) >> * suspend if there is a device attached. >> */ >> if (xhci->quirks & XHCI_RESET_ON_RESUME) >> - pm_runtime_get_noresume(hcd->self.controller); >> + pm_runtime_get_noresume(hcd->self.sysdev); >> #endif >> >> > >Same here. > >> @@ -4834,7 +4834,7 @@ int xhci_get_frame(struct usb_hcd *hcd) int >> xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) { >> struct xhci_hcd *xhci; >> - struct device *dev = hcd->self.controller; >> + struct device *dev = hcd->self.sysdev; >> int retval; > > >This one calls > > get_quirks(dev, xhci); > >not sure whether this should be called with self.controller or self.sysdev, we should >audit every one of the callers here to be sure: > >drivers/usb/host/xhci-mtk.c: return xhci_gen_setup(hcd, xhci_mtk_quirks); >drivers/usb/host/xhci-pci.c: retval = xhci_gen_setup(hcd, xhci_pci_quirks); >drivers/usb/host/xhci-plat.c: return xhci_gen_setup(hcd, xhci_plat_quirks); >drivers/usb/host/xhci-rcar.c: * xhci_gen_setup(). >drivers/usb/host/xhci-tegra.c: return xhci_gen_setup(hcd, tegra_xhci_quirks); > > Arnd
On Thu, Sep 22, 2016 at 12:02 AM, Sriram Dash <sriram.dash@nxp.com> wrote: >>From: Arnd Bergmann [mailto:arnd@arndb.de] >>On Wednesday, September 21, 2016 11:43:59 AM CEST Sriram Dash wrote: >>> >From: Arnd Bergmann [mailto:arnd@arndb.de] On Wednesday, September >>> >21, 2016 11:06:47 AM CEST Sriram Dash wrote: >>> >>> ============================================================== >>> From 8b0dea1513e9e73a11dcfa802ddc71cca11d66f8 Mon Sep 17 00:00:00 2001 >>> From: Sriram Dash <sriram.dash@nxp.com> >>> Date: Wed, 21 Sep 2016 11:39:30 +0530 >>> Subject: [PATCH] usb: xhci: Fix the patch inherit dma configuration >>> from parent dev >>> >>> Fixes the patch https://patchwork.kernel.org/patch/9319527/ >>> ("usb: dwc3: host: inherit dma configuration from parent dev"). >>> >>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com> >>> --- >>> drivers/usb/host/xhci-mem.c | 12 ++++++------ >>> drivers/usb/host/xhci.c | 20 ++++++++++---------- >>> 2 files changed, 16 insertions(+), 16 deletions(-) >>> >>> diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c >>> index 6afe323..79608df 100644 >>> --- a/drivers/usb/host/xhci-mem.c >>> +++ b/drivers/usb/host/xhci-mem.c >> >>All the changes you did to this file seem fine, I completely missed that part. >> >>> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index >>> 01d96c9..9a1ff09 100644 >>> --- a/drivers/usb/host/xhci.c >>> +++ b/drivers/usb/host/xhci.c > > Yes. Some sanity is required over this patch. Hi Sriram, Have you been able to do the sanity check on the patch? I will be good to have the formal patch submitted for integration as soon as possible because the dwc3 USB functionality has been broken for a while in upstream kernel. Regards, Leo
============================================================== From 8b0dea1513e9e73a11dcfa802ddc71cca11d66f8 Mon Sep 17 00:00:00 2001 From: Sriram Dash <sriram.dash@nxp.com> Date: Wed, 21 Sep 2016 11:39:30 +0530 Subject: [PATCH] usb: xhci: Fix the patch inherit dma configuration from parent dev Fixes the patch https://patchwork.kernel.org/patch/9319527/ ("usb: dwc3: host: inherit dma configuration from parent dev"). Signed-off-by: Sriram Dash <sriram.dash@nxp.com> --- drivers/usb/host/xhci-mem.c | 12 ++++++------ drivers/usb/host/xhci.c | 20 ++++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index 6afe323..79608df 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -586,7 +586,7 @@ static void xhci_free_stream_ctx(struct xhci_hcd *xhci, unsigned int num_stream_ctxs, struct xhci_stream_ctx *stream_ctx, dma_addr_t dma) { - struct device *dev = xhci_to_hcd(xhci)->self.controller; + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; size_t size = sizeof(struct xhci_stream_ctx) * num_stream_ctxs; if (size > MEDIUM_STREAM_ARRAY_SIZE) @@ -614,7 +614,7 @@ static struct xhci_stream_ctx *xhci_alloc_stream_ctx(struct xhci_hcd *xhci, unsigned int num_stream_ctxs, dma_addr_t *dma, gfp_t mem_flags) { - struct device *dev = xhci_to_hcd(xhci)->self.controller; + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; size_t size = sizeof(struct xhci_stream_ctx) * num_stream_ctxs; if (size > MEDIUM_STREAM_ARRAY_SIZE) @@ -1644,7 +1644,7 @@ void xhci_slot_copy(struct xhci_hcd *xhci, static int scratchpad_alloc(struct xhci_hcd *xhci, gfp_t flags) { int i; - struct device *dev = xhci_to_hcd(xhci)->self.controller; + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; int num_sp = HCS_MAX_SCRATCHPAD(xhci->hcs_params2); xhci_dbg_trace(xhci, trace_xhci_dbg_init, @@ -1716,7 +1716,7 @@ static void scratchpad_free(struct xhci_hcd *xhci) { int num_sp; int i; - struct device *dev = xhci_to_hcd(xhci)->self.controller; + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; if (!xhci->scratchpad) return; @@ -1792,7 +1792,7 @@ void xhci_free_command(struct xhci_hcd *xhci, void xhci_mem_cleanup(struct xhci_hcd *xhci) { - struct device *dev = xhci_to_hcd(xhci)->self.controller; + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; int size; int i, j, num_ports; @@ -2334,7 +2334,7 @@ static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags) int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags) { dma_addr_t dma; - struct device *dev = xhci_to_hcd(xhci)->self.controller; + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; unsigned int val, val2; u64 val_64; struct xhci_segment *seg; diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 01d96c9..9a1ff09 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -231,7 +231,7 @@ static int xhci_free_msi(struct xhci_hcd *xhci) static int xhci_setup_msi(struct xhci_hcd *xhci) { int ret; - struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); + struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); ret = pci_enable_msi(pdev); if (ret) { @@ -257,7 +257,7 @@ static int xhci_setup_msi(struct xhci_hcd *xhci) */ static void xhci_free_irq(struct xhci_hcd *xhci) { - struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); + struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); int ret; /* return if using legacy interrupt */ @@ -280,7 +280,7 @@ static int xhci_setup_msix(struct xhci_hcd *xhci) { int i, ret = 0; struct usb_hcd *hcd = xhci_to_hcd(xhci); - struct pci_dev *pdev = to_pci_dev(hcd->self.controller); + struct pci_dev *pdev = to_pci_dev(hcd->self.sysdev); /* * calculate number of msi-x vectors supported. @@ -337,7 +337,7 @@ free_entries: static void xhci_cleanup_msix(struct xhci_hcd *xhci) { struct usb_hcd *hcd = xhci_to_hcd(xhci); - struct pci_dev *pdev = to_pci_dev(hcd->self.controller); + struct pci_dev *pdev = to_pci_dev(hcd->self.sysdev); if (xhci->quirks & XHCI_PLAT) return; @@ -376,7 +376,7 @@ static int xhci_try_enable_msi(struct usb_hcd *hcd) if (xhci->quirks & XHCI_PLAT) return 0; - pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); + pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); /* * Some Fresco Logic host controllers advertise MSI, but fail to * generate interrupts. Don't even try to enable MSI. @@ -745,7 +745,7 @@ void xhci_shutdown(struct usb_hcd *hcd) struct xhci_hcd *xhci = hcd_to_xhci(hcd); if (xhci->quirks & XHCI_SPURIOUS_REBOOT) - usb_disable_xhci_ports(to_pci_dev(hcd->self.controller)); + usb_disable_xhci_ports(to_pci_dev(hcd->self.sysdev)); spin_lock_irq(&xhci->lock); xhci_halt(xhci); @@ -762,7 +762,7 @@ void xhci_shutdown(struct usb_hcd *hcd) /* Yet another workaround for spurious wakeups at shutdown with HSW */ if (xhci->quirks & XHCI_SPURIOUS_WAKEUP) - pci_set_power_state(to_pci_dev(hcd->self.controller), PCI_D3hot); + pci_set_power_state(to_pci_dev(hcd->self.sysdev), PCI_D3hot); } #ifdef CONFIG_PM @@ -3605,7 +3605,7 @@ void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev) * if no devices remain. */ if (xhci->quirks & XHCI_RESET_ON_RESUME) - pm_runtime_put_noidle(hcd->self.controller); + pm_runtime_put_noidle(hcd->self.sysdev); #endif ret = xhci_check_args(hcd, udev, NULL, 0, true, __func__); @@ -3745,7 +3745,7 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev) * suspend if there is a device attached. */ if (xhci->quirks & XHCI_RESET_ON_RESUME) - pm_runtime_get_noresume(hcd->self.controller); + pm_runtime_get_noresume(hcd->self.sysdev); #endif @@ -4834,7 +4834,7 @@ int xhci_get_frame(struct usb_hcd *hcd) int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) { struct xhci_hcd *xhci; - struct device *dev = hcd->self.controller; + struct device *dev = hcd->self.sysdev; int retval; /* Accept arbitrarily long scatter-gather lists */