On Wed, Jul 01, 2026 at 11:19:20AM +0530, Aneesh Kumar K.V (Arm) wrote:
> @@ -88,37 +88,40 @@ static inline dma_addr_t dma_direct_map_phys(struct 
> device *dev,
>  {
>       dma_addr_t dma_addr;
>  
> +     /*
> +      * For a device requiring unencrypted DMA, MMIO memory is treated
> +      * as shared by default.
> +      */
> +     if (force_dma_unencrypted(dev) && (attrs & DMA_ATTR_MMIO))
> +             attrs |= DMA_ATTR_CC_SHARED;
> +
>       if (is_swiotlb_force_bounce(dev)) {
> -             if (!(attrs & DMA_ATTR_CC_SHARED)) {
> -                     if (attrs & (DMA_ATTR_MMIO | DMA_ATTR_REQUIRE_COHERENT))
> -                             return DMA_MAPPING_ERROR;
> +             if (attrs & (DMA_ATTR_MMIO | DMA_ATTR_REQUIRE_COHERENT))
> +                     return DMA_MAPPING_ERROR;
>  
> -                     return swiotlb_map(dev, phys, size, dir, attrs);
> -             }
> -     } else if (attrs & DMA_ATTR_CC_SHARED) {
> -             return DMA_MAPPING_ERROR;
> +             return swiotlb_map(dev, phys, size, dir, attrs);
>       }
>  
> -     if (attrs & DMA_ATTR_MMIO) {
> -             dma_addr = phys;
> -             if (unlikely(!dma_capable(dev, dma_addr, size, false, attrs)))
> -                     goto err_overflow;
> -     } else if (attrs & DMA_ATTR_CC_SHARED) {
> +     if (attrs & DMA_ATTR_CC_SHARED)
>               dma_addr = phys_to_dma_unencrypted(dev, phys);
> +     else
> +             dma_addr = phys_to_dma_encrypted(dev, phys);

Maybe things should be adjusted so this can be
  phys_to_dma_direct(dev, phys, (attrs & DMA_ATTR_CC_SHARED) 

?

It would also be nice if swiotlb.c could do the same

Stated another way, maybe we should get rid of
phys_to_dma_unencrypted/encrypted() entirely and just have the bool
variation since that seems to be what everyone wants.

Jason

Reply via email to