Arnd Bergmann wrote:
As I said, this is inherently driver specific. If setting the 64-bit mask fails, the driver itself needs to fall back to the 32-bit mask so it can allocate buffers from ZONE_DMA instead of ZONE_NORMAL.
I just posted a v7 of my patch, but I forgot to fix the dma_set_mask call. I'll post a v8 soon, but before I do, what do you think of this:
/* The EMAC itself is capable of 64-bit DMA, so try that first. */ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); if (ret) { /* Some platforms may restrict the EMAC's address bus to less * then the size of DDR. In this case, we need to try a * smaller mask. We could try every possible smaller mask, * but that's overkill. Instead, just fall to 32-bit, which * should always work. */ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); if (ret) { dev_err(&pdev->dev, "could not set DMA mask\n"); return ret; } } -- Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html