On Mon, May 19, 2014 at 09:21:17AM +0100, Jon Medhurst (Tixy) wrote:
> On Fri, 2014-05-16 at 18:40 +0100, Catalin Marinas wrote:
> > On Fri, May 16, 2014 at 06:08:45PM +0100, Jon Medhurst (Tixy) wrote:
> > > On Fri, 2014-05-16 at 13:55 +0100, Catalin Marinas wrote:
> > > [...]
> > > > > It could if arm64 would restrict the DMA addresses to 32-bit, but it 
> > > > > doesn't
> > > > > and I end up on my platform with USB DMA buffers allocated >4GB 
> > > > > address.
> > > > 
> > > > dma_alloc_coherent() on arm64 should return 32-bit addresses if the
> > > > coherent_dma_mask is set to 32-bit.
> > > 
> > > Not if you have CONFIG_DMA_CMA. Unless I have misread the code, enabling
> > > CMA means memory comes from a common pool carved out at boot with no way
> > > for drivers to specify it's restrictions [1]. It's what I've spent most
> > > of the week trying to work around in a clean way, and have finally given
> > > up.
> > 
> > The easiest "hack" would be to pass a limit dma_contiguous_reserve()
> > in arm64_memblock_init(), something like this:
> 
> That is by far the easiest but I dismissed it because it affects all
> platforms built from that source tree; and if the hack were extended to
> include a kernel config option, that still may not work on a single
> kernel binary expected to work on multiple platforms. Basically, I've
> tried various was to do it 'properly' and after failing am resorting to
> truly hideous hacks to the (out-of-tree driver) code - so at least other
> platforms won't be impacted.

Can you set a specific reserved memory region in the DT to be used by
CMA (via linux,cma-default), or it's just for the default size?

On arm64 we enabled CONFIG_DMA_CMA by default but compared to swiotlb it
doesn't honour GFP_DMA. The arm32 port sets the CMA limit to
arm_dma_limit which is 32-bit or a SoC-define one. So I'm tempted to
default to 32-bit as well if it can be overridden via DT.

-- 
Catalin
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to