Hello Team,
Our customer wants to made data reception on PCIe and distribution to DSP, and then processing the data and data tranfer with SPI in two directions.
The orginal thread is below(problem with qmss):
e2e.ti.com/.../2433219
The customer asked additional question, about IPC_start:
1)Due to source code of prj «transportQmssDspEpK2HC66TestProject» in «dsp_ep.c» file, the IPC initialization is:
/* Setup TransportRpmsg for host communication */
IpcMgr_ipcStartup();
/* Setup IPC for DSP to DSP communication */
status = Ipc_start();
Then Ipc_start() turns to the endless cyrcle.
But in documentation mentioned that Keystone 2 in Linux-DSP mode should only use the IpcMgr_ipcStartup(). But when doing so, the ti_sdo_ipc_SharedRegion_attach() and SharedRegion_getHeap() wasnt called and the initialization of ti_sdo_ipc_GateMP_Instance_init() returns NULL.
The question:
Should the SharedRegion_module->regions[0].heap be initializated in ARM-Linux?
If it is, then: Why wasnt it initializated by «armEpTest_k2h.out» from «ipc-transport-qmss-test»?
Also the customer adds:
1)If Ipc_start() left in DSP module then it doesnt turn to the cycle. And then, if we try to make Ipc_attach(2) to another DSP, after calling status = Ipc_procSyncStart(remoteProcId, Ipc_module->ipcSharedAddr) it returns status = -11 (Ipc_E_NOTREADY).
Log from DSP2:
2 Resource entries at 0x810000
Core 1 : ******************************************************
Core 1 : SYS/BIOS DSP TransportQmss Heterogeneous Test (DSP EP)
Core 1 : ******************************************************
Core 1 : Device name: TMS320TCI6636
Core 1 : Processor names: HOST,CORE0,CORE1
Core 1 : IPC Core ID: 2
Core 1 : Number of DSPs 2
Core 1 : Number of test iterations: 100
Core 1 : Starting IPC core 2 with name ("CORE1")
TransportRpmsg_Instance_init: remoteProc: 0
registering rpmsg-proto:rpmsg-proto service on 61 with HOST
[t=0x00052e1c] xdc.runtime.Main: NameMap_sendMessage: HOST 53, port=61
2) In the example project (transportQmssDspEpK2HC66TestProject) there are function:
/* The region heap will do the alignment */
regionHeap = SharedRegion_getHeap(obj->regionId);
It returns NULL without Ipc_start() (If we left only IpcMgr_ipcStartup()).
If we turns on the Ipc_start(), when the DSP2 is trying attach to DSP1 the process crashes with reinitialization(because through the RM server we can work only with HOST).
But at this moment we dont need operations between DSP cores.
Stack of calls when NULL is returned:
initTsk >>>
GateMP_create >>>
ti_sdo_ipc_GateMP_create >>>
ti_sdo_ipc_GateMP_Instance_init__E >>>
ti_sdo_ipc_GateMP_Instance_init >>>
SharedRegion_getHeap(0) return NULL!!!
Stack when the error in Ipc_start() CORE0 occurs:
Ipc_start >>>
status = Ipc_attach(baseId = 2); >>>
status = ti_sdo_ipc_MessageQ_SetupTransportProxy_attach(2, 0); return -1; !!!
TransportRpmsgSetup_attach
TransportRpmsg_Instance_init
/* This MessageQ Transport over RPMSG only talks to the "HOST" for now: */ !!!
Could you help us please to reslove our customer's problem. This is very important project.