diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/dwc3/core.c | 11 | ||||
-rw-r--r-- | drivers/usb/dwc3/core.h | 1 | ||||
-rw-r--r-- | drivers/usb/dwc3/host.c | 6 |
3 files changed, 17 insertions, 1 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index c6a8444..8e2e7a7 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -58,6 +58,7 @@ static int dwc3_get_dr_mode(struct dwc3 *dwc) enum usb_dr_mode mode; struct device *dev = dwc->dev; unsigned int hw_mode; + struct device_node *node = dev->of_node; if (dwc->dr_mode == USB_DR_MODE_UNKNOWN) dwc->dr_mode = USB_DR_MODE_OTG; @@ -94,6 +95,13 @@ static int dwc3_get_dr_mode(struct dwc3 *dwc) dwc3_writel(dwc->regs, DWC3_GSBUSCFG1, dwc3_readl(dwc->regs, DWC3_GSBUSCFG1) | 0xf00); + /* Enable Snooping */ + if (node && of_dma_is_coherent(node)) { + dwc3_writel(dwc->regs, DWC3_GSBUSCFG0, + dwc3_readl(dwc->regs, DWC3_GSBUSCFG0) | 0x22220000); + dev_dbg(dev, "enabled snooping for usb\n"); + } + if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) mode = USB_DR_MODE_HOST; else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) @@ -1099,6 +1107,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) static int dwc3_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; + struct dwc3_platform_data *pdata = dev_get_platdata(dev); + struct device_node *node = dev->of_node; struct resource *res; struct dwc3 *dwc; u8 lpm_nyet_threshold; @@ -1108,7 +1118,6 @@ static int dwc3_probe(struct platform_device *pdev) int ret; void __iomem *regs; - struct device_node *node = dev->of_node; void *mem; mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL); diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index dced3b8..9151eef 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -26,6 +26,7 @@ #include <linux/dma-mapping.h> #include <linux/mm.h> #include <linux/debugfs.h> +#include <linux/of_address.h> #include <linux/usb/ch9.h> #include <linux/usb/gadget.h> diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c index 1505384..f1b9827 100644 --- a/drivers/usb/dwc3/host.c +++ b/drivers/usb/dwc3/host.c @@ -84,6 +84,12 @@ int dwc3_host_init(struct dwc3 *dwc) xhci->dev.dma_mask = dwc->dev->dma_mask; xhci->dev.dma_parms = dwc->dev->dma_parms; + /* set DMA operations */ + if (dwc->dev->of_node && of_dma_is_coherent(dwc->dev->of_node)) { + xhci->dev.archdata.dma_ops = dwc->dev->archdata.dma_ops; + dev_dbg(dwc->dev, "set dma_ops for usb\n"); + } + dwc->xhci = xhci; ret = platform_device_add_resources(xhci, dwc->xhci_resources, |