Browse Source

usb: cdns3: gadget: Fix broken gadget after role switch from host to device

On switching to host mode, xhci-plat.c sets controller device's
DMA mask to 64-bit. On switching back to gadget mode we need
to reset the DMA mask to 32-bit else gadget controller malfunctions.

Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Roger Quadros 6 years ago
parent
commit
6e9016e797
1 changed files with 7 additions and 0 deletions
  1. 7 0
      drivers/usb/cdns3/gadget.c

+ 7 - 0
drivers/usb/cdns3/gadget.c

@@ -2668,6 +2668,13 @@ static int __cdns3_gadget_init(struct cdns3 *cdns)
 	struct cdns3_device *priv_dev;
 	int ret = 0;
 
+	/* Restore 32-bit DMA Mask in case we switched 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);