[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Thu, 5 May 2016 10:07:52 -0700
From: Brian Norris <briannorris@...omium.org>
To: "Strashko, Grygorii" <grygorii.strashko@...com>
Cc: Felipe Balbi <balbi@...nel.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
linux-arm-kernel@...ts.infradead.org, linux-usb@...r.kernel.org,
linux-kernel@...r.kernel.org, Sekhar Nori <nsekhar@...com>,
David Fisher <david.fisher1@...opsys.com>,
Catalin Marinas <catalin.marinas@....com>,
"Thang Q. Nguyen" <tqnguyen@....com>,
Yoshihiro Shimoda <yoshihiro.shimoda.uh@...esas.com>,
linux-rockchip@...ts.infradead.org, dianders@...omium.org,
wulf@...k-chips.com, Brian Norris <computersforpeace@...il.com>,
Arnd Bergmann <arnd@...db.de>
Subject: Re: usb: dwc3: host: inherit dma configuration from parent dev
On Mon, Apr 25, 2016 at 10:21:34PM +0300, Strashko, Grygorii wrote:
> Now not all DMA paremters configured properly for "xhci-hcd" platform
> device which is created manually. For example: dma_pfn_offset, dam_ops
> and iommu configuration will not corresponds "dwc3" devices
> configuration. As result, this will cause problems like wrong DMA
> addresses translation on platforms with LPAE enabled like Keystone 2.
>
> When platform is using DT boot mode the DMA configuration will be
> parsed and applied from DT, so, to fix this issue, reuse
> of_dma_configure() API and retrieve DMA configuartion for "xhci-hcd"
> from DWC3 device node.
>
> Cc: David Fisher <david.fisher1@...opsys.com>
> Cc: Catalin Marinas <catalin.marinas@....com>
> Cc: "Thang Q. Nguyen" <tqnguyen@....com>
> Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@...esas.com>
> Signed-off-by: Grygorii Strashko <grygorii.strashko@...com>
Tested-by: Brian Norris <briannorris@...omium.org>
What's the status of this? I see that there was some divergent
discussion about the merits of a dma_inherit() API...
FWIW, I'll reiterate Grygorii's note that Felipe's alternative patch
does NOT resolve the problem with the creation of the xhci-hcd platform
device:
https://patchwork.kernel.org/patch/8952721/
Brian
> ---
> drivers/usb/dwc3/host.c | 15 ++++++++++-----
> 1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c
> index c679f63..93c8ef9 100644
> --- a/drivers/usb/dwc3/host.c
> +++ b/drivers/usb/dwc3/host.c
> @@ -17,6 +17,7 @@
>
> #include <linux/platform_device.h>
> #include <linux/usb/xhci_pdriver.h>
> +#include <linux/of_device.h>
>
> #include "core.h"
>
> @@ -32,12 +33,7 @@ int dwc3_host_init(struct dwc3 *dwc)
> return -ENOMEM;
> }
>
> - dma_set_coherent_mask(&xhci->dev, dwc->dev->coherent_dma_mask);
> -
> xhci->dev.parent = dwc->dev;
> - xhci->dev.dma_mask = dwc->dev->dma_mask;
> - xhci->dev.dma_parms = dwc->dev->dma_parms;
> -
> dwc->xhci = xhci;
>
> ret = platform_device_add_resources(xhci, dwc->xhci_resources,
> @@ -62,6 +58,15 @@ int dwc3_host_init(struct dwc3 *dwc)
> phy_create_lookup(dwc->usb3_generic_phy, "usb3-phy",
> dev_name(&xhci->dev));
>
> + if (IS_ENABLED(CONFIG_OF) && dwc->dev->of_node) {
> + of_dma_configure(&xhci->dev, dwc->dev->of_node);
> + } else {
> + dma_set_coherent_mask(&xhci->dev, dwc->dev->coherent_dma_mask);
> +
> + xhci->dev.dma_mask = dwc->dev->dma_mask;
> + xhci->dev.dma_parms = dwc->dev->dma_parms;
> + }
> +
> ret = platform_device_add(xhci);
> if (ret) {
> dev_err(dwc->dev, "failed to register xHCI device\n");
Powered by blists - more mailing lists