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@xxxxxxxxxxxx> > Cc: Catalin Marinas <catalin.marinas@xxxxxxx> > Cc: "Thang Q. Nguyen" <tqnguyen@xxxxxxx> > Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> > Signed-off-by: Grygorii Strashko <grygorii.strashko@xxxxxx> Tested-by: Brian Norris <briannorris@xxxxxxxxxxxx> 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"); -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html