Tool/software: Linux
Hi there, I am trying to create a design similar to the example shown in the IPC ipc_3_46_00_02
I have added the resource table file to the DSP app and I am able to run the ex02_messageq example.
I have installed the SDK 4.0.0.4 for Linux and also check the DTS filr for the CMA pool its set to 0xc3000000 and there are two buffers at location:
#define RPMSG_VRING0_DA 0xc3000000
#define RPMSG_VRING1_DA 0xc3004000
The problem I have is as follows:
The examples ex02 in the IPC disables the cache for location 0xc3000000 and the whole dsp application is located in the same heap. I want to use cache for DSP app and would like to create a new heap just for IPC comms.
I have modified the resource table with the following:
#define DATA_DA1 0xc5000000
#ifndef DATA_SIZE
# define DATA_SIZE (SZ_1M * 15)
#endif
struct my_resource_table {
struct resource_table base;
UInt32 offset[4];
/* rpmsg vdev entry */
struct fw_rsc_vdev rpmsg_vdev;
struct fw_rsc_vdev_vring rpmsg_vring0;
struct fw_rsc_vdev_vring rpmsg_vring1;
/* data carveout entry */
struct fw_rsc_carveout data_cout;
/* data carveout entry */
struct fw_rsc_carveout data_cout1;
/* trace entry */
struct fw_rsc_trace trace;
};
extern char xdc_runtime_SysMin_Module_State_0_outbuf__A;
#define TRACEBUFADDR (UInt32)&xdc_runtime_SysMin_Module_State_0_outbuf__A
#define TRACEBUFSIZE 0x8000
#pragma DATA_SECTION(ti_ipc_remoteproc_ResourceTable, ".resource_table")
#pragma DATA_ALIGN(ti_ipc_remoteproc_ResourceTable, 4096)
struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
1, /* we're the first version that implements this */
4, /* number of entries in the table */
0, 0, /* reserved, must be zero */
/* offsets to entries */
{
offsetof(struct my_resource_table, rpmsg_vdev),
offsetof(struct my_resource_table, data_cout),
offsetof(struct my_resource_table, data_cout1),
offsetof(struct my_resource_table, trace),
},
/* rpmsg vdev entry */
{
TYPE_VDEV, VIRTIO_ID_RPMSG, 0,
RPMSG_DSP_FEATURES, 0, 0, 0, 2, { 0, 0 },
/* no config data */
},
/* the two vrings */
{ RPMSG_VRING0_DA, 4096, RPMSG_VQ0_SIZE, 1, 0 },
{ RPMSG_VRING1_DA, 4096, RPMSG_VQ1_SIZE, 2, 0 },
{
TYPE_CARVEOUT, DATA_DA, DATA_DA, DATA_SIZE, 0, 0, "DSP_MEM_DATA",
},
{
TYPE_CARVEOUT, DATA_DA1, DATA_DA1, DATA_SIZE, 0, 0, "DSP_MEM_DATA1",
},
{
TYPE_TRACE, TRACEBUFADDR, TRACEBUFSIZE, 0, "trace:dsp",
},
};
That's added extra TYPE_CARVEOUT with address 0xc5000000
and also made similar changes in the DTS Linux file:
reserved-memory {
#address-cells = <1>;
#size-cells = <1>;
ranges;
dsp_cma_pool: dsp_cma@c3000000 {
compatible = "shared-dma-pool";
reg = <0xc3000000 0x1000000>;
reusable;
status = "okay";
};
dsp_cma_pool1: dsp_cma_ipc@c5000000 {
compatible = "shared-dma-pool";
reg = <0xc5000000 0x1000000>;
reusable;
status = "okay";
};
};
In the DSP.cfg I have also added :
var Cache = xdc.useModule('ti.sysbios.family.c64p.Cache');
Cache.MAR192_223 = 0x00000008;
to enable cache only for 0xc3000000 for DSP app and disabled cache for rest (0xc5000000).
When trying to boot DSP from remoteproc I get the following error:
root@omapl138-lcdk:/sys/bus/platform/drivers/davinci-rproc# echo davinci-rproc.0 > bind
davinci-rproc davinci-rproc.0: assigned reserved memory node dsp_cma@c3000000
remoteproc remoteproc0: dsp is available
root@omapl138-lcdk:/sys/bus/platform/drivers/davinci-rproc# remoteproc remoteproc0: powering up dsp
remoteproc remoteproc0: Booting fw image rproc-dsp-fw, size 5604612
davinci-rproc davinci-rproc.0: failed to allocate dma memory: len 0xf00000
remoteproc remoteproc0: Failed to process resources: -12
All I want to do is:
* Implement some heap buffer to be used to comms between DSP and Linux using MessageQ.
Thanks in advance.