aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Laszczak <pawell@cadence.com>2019-10-07 13:03:23 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-10-10 12:42:09 +0200
commiteb21a74adaa11846737f503dd618bd35337e2c37 (patch)
tree4f113921bedd005a6f0a0bcd1fa89ea01a321b3e
parent02ffc26df96b487f476b8945eaef13c7f170e79a (diff)
downloadlinux-eb21a74adaa11846737f503dd618bd35337e2c37.tar.gz
usb: cdns3: Fix for incorrect DMA mask.
This patch restores the correct DMA mask after switching back to device mode. The issue occurred because Device part of controller use 32 bits DMA and Host side use 64 bits DMA. During loading XHCI driver the DMA mask used by driver is overwritten by XHCI driver so it must be restored to 32 bits. Reported-by: Pawel Laszczak <pawell@cadence.com> Signed-off-by: Roger Quadros <rogerq@ti.com> Signed-off-by: Pawel Laszczak <pawell@cadence.com> Fixes: 7733f6c32e36 ("usb: cdns3: Add Cadence USB3 DRD Driver") Reviewed-by: Peter Chen <peter.chen@nxp.com> Tested-by: Roger Quadros <rogerq@ti.com> Link: https://lore.kernel.org/r/1570449803-15299-1-git-send-email-pawell@cadence.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/cdns3/gadget.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c
index 157536753b8cf..2ca280f4c0541 100644
--- a/drivers/usb/cdns3/gadget.c
+++ b/drivers/usb/cdns3/gadget.c
@@ -2663,6 +2663,13 @@ static int __cdns3_gadget_init(struct cdns3 *cdns)
{
int ret = 0;
+ /* Ensure 32-bit DMA Mask in case we switched back from Host mode */
+ ret = dma_set_mask_and_coherent(cdns->dev, DMA_BIT_MASK(32));
+ if (ret) {
+ dev_err(cdns->dev, "Failed to set dma mask: %d\n", ret);
+ return ret;
+ }
+
cdns3_drd_switch_gadget(cdns, 1);
pm_runtime_get_sync(cdns->dev);