From: Sriram Dash <sriram.dash@xxxxxxxxxxx> The xhci forcefully converts the dma_mask to either 64 or 32 and the dma-mask set by the bus is somewhat ignored. If the platform sets the correct dma_mask, then respect that. Signed-off-by: Pankaj Dubey <pankaj.dubey@xxxxxxxxxxx> Signed-off-by: Sriram Dash <sriram.dash@xxxxxxxxxxx> --- drivers/usb/host/xhci.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 005e659..55cf89e 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -5119,6 +5119,16 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) dma_set_coherent_mask(dev, DMA_BIT_MASK(32)); } + /* + * A platform may require coherent masks other than 64/32 bit, and we + * should respect that. If the firmware has already requested for a + * dma-range, we inherit the dma_mask presuming the platform knows + * what it is doing. + */ + + if (dev->bus_dma_mask) + dma_set_mask_and_coherent(dev, dev->bus_dma_mask); + xhci_dbg(xhci, "Calling HCD init\n"); /* Initialize HCD and host controller data structures. */ retval = xhci_init(hcd); -- 2.7.4