On Tue, Jul 12, 2022 at 12:08 PM Arnd Bergmann <arnd@xxxxxxxx> wrote: > On Tue, Jul 12, 2022 at 11:58 AM Li Chen <me@linux.beauty> wrote: > > > > The limitation is our DSP can only access 32bit memory, but total dram is > 4G, so I cannot use > > "size = <...>" in our real case (it might get memory above 4G). I'm not sure if other vendors' DSP also has > > this limitation, if so, how do they deal with it if throughput matters. > > This is a common limitation that gets handled automatically by setting > the dma_mask of the device through the dma-ranges property in DT. > When the driver does dma_alloc_coherent() or similar to gets its buffer, > it will then allocate pages below this boundary. To clarify: in the DT, you can either add a 'alloc-ranges' property to limit where the CMA area gets allocated, or use a 'reg' property instead of the 'size' property to force a specific address. I would expect that in either case, you get the type of memory area you want (a reserved set of addresses with page structures that you can use for contiguous allocations within the first 4GB), but it's possible that I'm missing some more details here. Arnd