[PATCH 1/2] [usb] make xhci platform driver use 64 bit or 32 bit DMA

Arnd Bergmann
2014-10-30T19:05:07Z

On Thursday 30 October 2014 13:16:28 Mark Langsdorf wrote:
> - /* Initialize dma_mask and coherent_dma_mask to 32-bits */
> - ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
> - if (ret)
> - return ret;
> + /* Try setting the coherent_dma_mask to 64 bits, then try 32 bits */
> + if (sizeof(dma_addr_t) < 8 ||
> + dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64))) {
> + ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
> + if (ret)
> + return ret;
> + }
> if (!pdev->dev.dma_mask)
> pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
> else
> - dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
> + dma_set_mask(&pdev->dev, pdev->dev.coherent_dma_mask);
>
> hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
> if (!hcd)
>

The logic here seems wrong: if dma_set_mask is successful, you
can rely on on dma_set_coherent_mask suceeding as well, but
not the other way round.

Also, we should no longer need to worry about the case where
pdev->dev.dma_mask is NULL, as this now gets initialized from
the DT setup.

Arnd