On 13.10.2025 10:35, Maxime Ripard wrote:
> In order to create a CMA dma-buf heap instance for each CMA heap region
> in the system, we need to collect all of them during boot.
>
> They are created from two main sources: the reserved-memory regions in
> the device tree, and the default CMA region created from the
> configuration or command line parameters, if no default region is
> provided in the device tree.
>
> Let's collect all the device-tree defined CMA regions flagged as
> reusable.
>
> Reviewed-by: T.J. Mercier <[email protected]>
> Signed-off-by: Maxime Ripard <[email protected]>
Acked-by: Marek Szyprowski <[email protected]>
> ---
> kernel/dma/contiguous.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c
> index
> d9b9dcba6ff7cf5904ac93b72c061fd59072c41b..d67e95094749d45f43c1809c175e491a3f55b2e1
> 100644
> --- a/kernel/dma/contiguous.c
> +++ b/kernel/dma/contiguous.c
> @@ -40,10 +40,11 @@
> #include <asm/page.h>
>
> #include <linux/memblock.h>
> #include <linux/err.h>
> #include <linux/sizes.h>
> +#include <linux/dma-buf/heaps/cma.h>
> #include <linux/dma-map-ops.h>
> #include <linux/cma.h>
> #include <linux/nospec.h>
>
> #ifdef CONFIG_CMA_SIZE_MBYTES
> @@ -491,9 +492,13 @@ static int __init rmem_cma_setup(struct reserved_mem
> *rmem)
> rmem->priv = cma;
>
> pr_info("Reserved memory: created CMA memory pool at %pa, size %ld
> MiB\n",
> &rmem->base, (unsigned long)rmem->size / SZ_1M);
>
> + err = dma_heap_cma_register_heap(cma);
> + if (err)
> + pr_warn("Couldn't register CMA heap.");
> +
> return 0;
> }
> RESERVEDMEM_OF_DECLARE(cma, "shared-dma-pool", rmem_cma_setup);
> #endif
>
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland