|
@@ -673,12 +673,14 @@ static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist,
|
|
|
static int dma_4v_supported(struct device *dev, u64 device_mask)
|
|
|
{
|
|
|
struct iommu *iommu = dev->archdata.iommu;
|
|
|
- u64 dma_addr_mask;
|
|
|
+ u64 dma_addr_mask = iommu->dma_addr_mask;
|
|
|
|
|
|
- if (device_mask > DMA_BIT_MASK(32) && iommu->atu)
|
|
|
- dma_addr_mask = iommu->atu->dma_addr_mask;
|
|
|
- else
|
|
|
- dma_addr_mask = iommu->dma_addr_mask;
|
|
|
+ if (device_mask > DMA_BIT_MASK(32)) {
|
|
|
+ if (iommu->atu)
|
|
|
+ dma_addr_mask = iommu->atu->dma_addr_mask;
|
|
|
+ else
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
if ((device_mask & dma_addr_mask) == dma_addr_mask)
|
|
|
return 1;
|