Tool/software: Linux
Hi,
I have a problem with CMEM on AM5728.
Interface among ARM, DSP and IPU(M4) Core is available via CMEM shared memory.
But there is a problem that the IPU cannot read the CMEM memory area.
The part written by IPU is read well by ARM or DSP.
However the part written by ARM or DSP is not read by IPU.
R/W works well between ARM and DSP.
The settings are as follows.
SDK Version : ti-processor-sdk-linux-rt-am57xx-evm-03.01.00.06
1. Kernel device tree (am572x-idk.dts)
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
ipu1_cma_pool: ipu1_cma@95800000 {
compatible = "shared-dma-pool";
reg = <0x0 0x95800000 0x0 0x2000000>; //32M
reusable;
status = "okay";
};
ipu2_cma_pool: ipu2_cma@97800000 {
compatible = "shared-dma-pool";
reg = <0x0 0x97800000 0x0 0x2000000>; //32M
reusable;
status = "okay";
};
dsp1_cma_pool: dsp1_cma@99800000 {
compatible = "shared-dma-pool";
reg = <0x0 0x99800000 0x0 0x2000000>; //32M
reusable;
status = "okay";
};
dsp2_cma_pool: dsp2_cma@9b800000 {
compatible = "shared-dma-pool";
reg = <0x0 0x9b800000 0x0 0x2000000>; // 32M
reusable;
status = "okay";
};
cmem_block_mem_0: cmem_block_mem@a0000000 {
reg = <0x0 0xa0000000 0x0 0x0c000000>;
no-map;
status = "okay";
};
cmem_block_mem_1_ocmc3: cmem_block_mem@40500000 {
reg = <0x0 0x40500000 0x0 0x100000>;
no-map;
status = "okay";
};
};
cmem {
compatible = "ti,cmem";
#address-cells = <1>;
#size-cells = <0>;
#pool-size-cells = <2>;
status = "okay";
cmem_block_0: cmem_block@0 {
reg = <0>;
memory-region = <&cmem_block_mem_0>;
cmem-buf-pools = <1 0x0 0x0c000000>;
};
cmem_block_1: cmem_block@1 {
reg = <1>;
memory-region = <&cmem_block_mem_1_ocmc3>;
};
};
2. IPU(M4) modify - rsc_table_vayu_ipu.h
#define IPU_CMEM_IOBUFS 0x85000000 //=> virtual address of the DSP memory section
#define CMEM_PHYS_IOBUFS 0xA0000000 //=> physical address of the CMEM (shared) memory section
#define IPU_CMEM_IOBUFS_SIZE (SZ_1M * 192) //=> size of the CMEM section
…
struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
…
{
TYPE_DEVMEM,
IPU_CMEM_IOBUFS, CMEM_PHYS_IOBUFS,
IPU_CMEM_IOBUFS_SIZE, 0, 0, "IPU_CMEM_IOBUFS",
},
};
3. cmem

