Hi @bora,
Thank you for contacting NXP Support!
The original custom configuration is wrong because it defines CMA’s alloc-ranges to cover the entire DDR (0x80000000–0x9FFFFFFF) while also reserving Ethos-U at 0x80000000–0x81FFFFFF and ELE at 0x84120000, creating overlaps. Additionally, Ethos-U is marked as reusable without no-map, allowing the kernel to reuse that memory, and ELE is not explicitly linked to its driver via memory-region. This breaks memory isolation, can cause corruption and DMA errors, and does not follow NXP’s best practices, which always separate CMA from dedicated pools and place ELE in a safe block outside CMA.
Try the next recommendation:
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
ethosu_mem: ethosu_region@80000000 {
compatible = "shared-dma-pool";
reg = <0 0x80000000 0 0x02000000>;
no-map;
};
linux,cma {
compatible = "shared-dma-pool";
reusable;
alloc-ranges = <0 0x82000000 0 0x1E000000>;
size = <0 0x04000000>;
linux,cma-default;
};
vdev0vring0: vdev0vring0@84000000 { reg = <0 0x84000000 0 0x00008000>; no-map; }; /* 32KB */
vdev0vring1: vdev0vring1@84008000 { reg = <0 0x84008000 0 0x00008000>; no-map; }; /* 32KB */
vdev1vring0: vdev1vring0@84010000 { reg = <0 0x84010000 0 0x00008000>; no-map; }; /* 32KB */
vdev1vring1: vdev1vring1@84018000 { reg = <0 0x84018000 0 0x00008000>; no-map; }; /* 32KB */
vdevbuffer: vdevbuffer@84020000 {
compatible = "shared-dma-pool";
reg = <0 0x84020000 0 0x00100000>;
no-map;
};
ele_reserved: ele-reserved@90000000 {
compatible = "shared-dma-pool";
reg = <0 0x90000000 0 0x00100000>;
no-map;
};
};
If you are using optee you should update the ddr size in the next file too:
https://github.com/nxp-imx/imx-optee-os/blob/e0a3e77735941e6057a1994a576b83a93ea0bdb9/core/arch/arm/...
Best Regards,
Chavira