lkml.org 
[lkml]   [2019]   [Jan]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 1/3] dma-mapping: remove the default map_resource implementation
On Mon, Jan 14, 2019 at 01:12:33PM +0000, Robin Murphy wrote:
> Ignoring the offset was kind of intentional there, because at the time I
> was primarily thinking about it in terms of the Keystone 2 platform where
> the peripherals are all in the same place (0-2GB) in both the bus and CPU
> physical address maps, and only the view of RAM differs between the two
> (2-4GB vs. 32-34GB). However, on something like BCM283x, the peripherals
> region is also offset from its bus address in the CPU view, but at a
> *different* offset relative to that of RAM.

I was more thinking of the PCIe P2P case, where we need to apply a
consistent offset to translate between the CPU and the bus view.

But this isn't really used for PCIe P2P, so I guess keeping the original
sematics might be a better idea. That being said the videobuf code seems
to rely on these offsets, so we might be between a rock and a hard place.

> Fortunately, I'm not aware of any platform which has a DMA engine behind an
> IOMMU (and thus *needs* to use dma_map_resource() to avoid said IOMMU
> blocking the slave device register reads/writes) and also has any nonzero
> offsets, and AFAIK the IOMMU-less platforms above aren't using
> dma_map_resource() at all, so this change shouldn't actually break
> anything, but I guess we have a bit of a problem making it truly generic
> and robust :(

Note that we don't actually use the code in this patch for ARM/ARM64
platforms with IOMMUs, as both the ARM and the ARM64 iommu code have
their own implementations of ->map_resource that actually program
the iommu (which at least for the PCIe P2P case would be wrong).

> Is this perhaps another shove in the direction of overhauling
> dma_pfn_offset into an arbitrary "DMA ranges" lookup table?

It is long overdue anyway.

>> addr = ops->map_resource(dev, phys_addr, size, dir, attrs);
>
> Might it be reasonable to do:
>
> if (!dma_is_direct(ops) && ops->map_resource)
> addr = ops->map_resource(...);
> else
> addr = dma_direct_map_resource(...);
>
> and avoid having to explicitly wire up the dma_direct callback elsewhere?

No, I absolutely _want_ the callback explicitly wired up. That is the
only way to ensure we actually intentionally support it and don't just
get a default that often won't work. Same issue for ->mmap and
->get_sgtable.

\
 
 \ /
  Last update: 2019-01-14 18:09    [W:0.072 / U:0.684 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site