目前AM5708 1G的DDR,只用ARM跟DSP1 。因大量机器常数数组和矩阵论算,DSP需要大量空间。DSP1程序CODE大于30M,DATA大于60M,HEAP大于20M。
DDR分给DSP1 500M空间,ARM 500M空间,其他IPU不用。如何分配设备树,IPC,CMEM等???
Nancy Wang:
不是很明白如何分配设备树,IPC,CMEM的意思,是指如何给IPC分配共享内存吗?请详细说明一下。
user5012922:
回复 Nancy Wang:
感谢回复,
就是DDR总共1G,ARM跟DSP1 分别500M空间,如何进行分配,需要修改哪些配置文件?(需要用的IPC、CMEM)
user5012922:
回复 Nancy Wang:
感谢您的回复,还有下面个问题请教。
(1)因只用ARM和DSP1。设备树 reserved-memory中DSP2、IPU1和IPU2 设置为disabled,然后重新编译设备树启动后不能启动linux内核。是内核也要配置吗?
修改如下,其他未动:
ipu2_cma_pool: ipu2_cma@95800000 {
compatible = "shared-dma-pool";
reg = <0x0 0x95800000 0x0 0x3800000>;
reusable;
status = "disabled";
};
dsp1_cma_pool: dsp1_cma@99000000 {
compatible = "shared-dma-pool";
reg = <0x0 0x99000000 0x0 0x4000000>;
reusable;
status = "okay";
};
ipu1_cma_pool: ipu1_cma@9d000000 {
compatible = "shared-dma-pool";
reg = <0x0 0x9d000000 0x0 0x2000000>;
reusable;
status = "disabled";
};
dsp2_cma_pool: dsp2_cma@9f000000 {
compatible = "shared-dma-pool";
reg = <0x0 0x9f000000 0x0 0x800000>;
reusable;
status = "disabled";
};
(2)设备树 reserved-memory定义了dsp1 cma地址0x99000000,大小0x4000000。
dsp1_cma_pool: dsp1_cma@99000000 {
compatible = "shared-dma-pool";
reg = <0x0 0x99000000 0x0 0x4000000>;
reusable;
测试代码ex02_messageq中 rsc_table_dsp1.h 中 DSP_MEM_TEXT为什么从 0x95000000开始,
不应该是从cma的地址0x99000000开始分配吗?
#define DSP_MEM_TEXT 0x95000000/* Co-locate alongside TILER region for easier flushing */#define DSP_MEM_IOBUFS 0x80000000#define DSP_MEM_DATA 0x95100000#define DSP_MEM_HEAP 0x95200000
#define DSP_MEM_IPC_VRING_SIZE SZ_1M#define DSP_MEM_IPC_DATA_SIZE SZ_1M#define DSP_MEM_TEXT_SIZE SZ_1M#define DSP_MEM_DATA_SIZE SZ_1M#define DSP_MEM_HEAP_SIZE (SZ_1M * 3)
我希望扩展 DSP_MEM_TEXT_SIZE 到 (SZ_1M * 64) ,
DSP_MEM_DATA_SIZE (SZ_1M * 128), DSP_MEM_HEAP_SIZE (SZ_1M * 32)。
那么起始地址还是 0x95000000? dsp1 cma地址0x99000000是否要延后到0x99000000+0xE00 0000= 0xA700 0000?
(0xE00 0000为64M+128M+32M=224M)
Nancy Wang:
回复 user5012922:
第一个问题晚一些给您回复。
2、在DSP的代码里定义的是DSP运行的虚拟的地址,DSP_MEM_TEXT 定义的地址只要与config.bld中的定义相匹配,并且在CMA pool定义的范围内就可以了。
Denny%20Yang99373:
回复 user5012922:
1, DTS文件可以把IPU等不用的删除。DSP的留512M
2,config.bld和rsc_table_dsp.h需要修改
rsc_table_dsp.h和config.bld配的都是DSP虚拟地址,dts文件里保留的是物理地址
user5012922:
回复 Nancy Wang:
感谢回复,是不是可以这样认为:CMA pool定义了可连续使用的内存大小,0x99000000是物理地址。DSP_MEM_TEXT 与config.bld中都是虚拟地址,只要定义相匹配,可以随意在0x80000000~0xc0000000(1G DDR)分配?
user5012922:
回复 Denny%20Yang99373:
感谢回复
1.根据您的回复,测试后发现,IPU等不用的删除任意一个后编译DTS文件会报错,disabled任意一个后内核起不来,停在Startingkernel。
IPU等地址可改动,单独扩展DSP1的长度到256M(0x9900 0000- 0xA500 0000)后,config.bld和rsc_table_dsp.h中DSP_MEM_TEXT等不能再分配(0x9900 0000- 0xA500 0000)地址,但可以分配到(0x8000 0000- 0xc000 0000)的其他空间,大小不超过CMA pool定义的256M即可。
2.rsc_table_dsp.h和config.bld配的都是DSP虚拟地址是正确的,并通过PHYS_MEM_IPC_VRING对应CMA pool分配的物理地址,请教虚拟地址的可分配范围是否也是DDR的范围(0x8000 0000- 0xc000 0000)?