return 0;
}
- max_dma_pfn = min(max_pfn, arm_dma_pfn_limit);
-
-- -- /*
-- -- * If the mask allows for more memory than we can address,
-- -- * and we actually have that much memory, then fail the
-- -- * allocation.
-- -- */
-- -- if (sizeof(mask) != sizeof(dma_addr_t) &&
-- -- mask > (dma_addr_t)~0 &&
- dma_to_pfn(dev, ~0) > max_dma_pfn) {
- -- dma_to_pfn(dev, ~0) > arm_dma_pfn_limit) {
-- -- dev_warn(dev, "Coherent DMA mask %#llx is larger than dma_addr_t allows\n",
-- -- mask);
-- -- dev_warn(dev, "Driver did not use or check the return value from dma_set_coherent_mask()?\n");
-- -- return 0;
-- -- }
-- --
-- -- /*
-- -- * Now check that the mask, when translated to a PFN,
-- -- * fits within the allowable addresses which we can
-- -- * allocate.
-- -- */
- if (dma_to_pfn(dev, mask) < max_dma_pfn) {
- -- if (dma_to_pfn(dev, mask) < arm_dma_pfn_limit) {
-- -- dev_warn(dev, "Coherent DMA mask %#llx (pfn %#lx-%#lx) covers a smaller range of system memory than the DMA zone pfn 0x0-%#lx\n",
-- -- mask,
-- -- dma_to_pfn(dev, 0), dma_to_pfn(dev, mask) + 1,
-- -- arm_dma_pfn_limit + 1);
++ ++ if (!__dma_supported(dev, mask, true))
return 0;
-- -- }
}
return mask;