This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6678: IPC failed when using SRIO doorbell interrupt simutaneously

Genius 13655 points
Part Number: TMS320C6678
Other Parts Discussed in Thread: SYSBIOS

Hello Champs,

Customer met a problem when using SRIO doorbell interrupt and IPC interrupt simutaneously.

Core0 run IPC and SRIO code, core1-7 run IPC code.

Core0 can send Notify_sendEvent to Core1~7 successfully and Core 1~7 can trigger the Callback function correctly.

Core1~Core7 can send Notify_sendEvent to Core0 successfully but Core 0 can't trigger the Callback function. Doorbell interrupt is always normal, but IPCGR, IPCAR isn't changed. If comment the SRIO code, the IPC can work successfully.

The result is the same if only enable core0 and core1. 

Is there some conflict when using when using SRIO doorbell interrupt and IPC interrupt simutaneously?

Below is the cfg: 

//---------------------------------------------
var BIOS = xdc.useModule('ti.sysbios.BIOS');

var Task = xdc.useModule('ti.sysbios.knl.Task');

var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');

var Log = xdc.useModule('xdc.runtime.Log');
var ti_sysbios_hal_Cache = xdc.useModule('ti.sysbios.hal.Cache');
var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
var Timer = xdc.useModule('ti.sysbios.hal.Timer');

Task.common$.namedInstance = true;

var Clock = xdc.useModule ('ti.sysbios.knl.Clock');

var Sem = xdc.useModule ('ti.sysbios.knl.Semaphore');

var Hwi = xdc.useModule ('ti.sysbios.hal.Hwi');

var Ecm = xdc.useModule ('ti.sysbios.family.c64p.EventCombiner');

var Diags = xdc.useModule('xdc.runtime.Diags');
/* Load the CSL package */
var Csl = xdc.useModule('ti.csl.Settings');

/* Load the CPPI package */
var Cppi = xdc.loadPackage('ti.drv.cppi');

/* Load the QMSS package */
var Qmss = xdc.loadPackage('ti.drv.qmss');

/* Load the PA package */
var Pa = xdc.useModule('ti.drv.pa.Settings');

/* Load the Platform/NDK Transport packages */
var PlatformLib = xdc.loadPackage('ti.platform.evmc6678l');
var NdkTransport = xdc.loadPackage('ti.transport.ndk');

var Global = xdc.useModule('ti.ndk.config.Global');
Global.enableCodeGeneration = false;

var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');

var Startup = xdc.useModule('xdc.runtime.Startup');

BIOS.taskEnabled = true;

Ecm.eventGroupHwiNum[0] = 7;
Ecm.eventGroupHwiNum[1] = 8;
Ecm.eventGroupHwiNum[2] = 9;
Ecm.eventGroupHwiNum[3] = 10;
//--------------------------------------


var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');

var nameList = ["CORE0", "CORE1", "CORE2", "CORE3", "CORE4", "CORE5", "CORE6", "CORE7"];//MultiProc.getDeviceProcNames();

MultiProc.setConfig(null, nameList);

var System = xdc.useModule('xdc.runtime.System');
var SysStd = xdc.useModule('xdc.runtime.SysStd');
System.SupportProxy = SysStd;

/* Modules explicitly used in the application */
var Notify = xdc.useModule('ti.sdo.ipc.Notify');
var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
var BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.heapSize = 0x8000;
var Task = xdc.useModule('ti.sysbios.knl.Task');

/* To avoid wasting shared memory for MessageQ transports */
for (var i = 0; i < MultiProc.numProcessors; i++) {
Ipc.setEntryMeta({
remoteProcId: i,
setupMessageQ: false,
});
}

/* Synchronize all processors (this will be done in Ipc_start) */
Ipc.procSync = Ipc.ProcSync_ALL;

/* Shared Memory base address and length */
var SHAREDMEM = 0x0C000000;
var SHAREDMEMSIZE = 0x00400000;

var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
SharedRegion.setEntryMeta(0,
{ base: SHAREDMEM,
len: SHAREDMEMSIZE,
ownerProcId: 0,
isValid: true,
name: "DDR2_RAM",
});

Program.sectMap[".csl_vect"] = "DDR3";
Program.sectMap[".vector"] = "DDR3";
Program.sectMap[".text"] = "DDR3";
Program.sectMap[".switch"] = "DDR3";
Program.sectMap[".const"] = "DDR3";
Program.sectMap[".cinit"] = "DDR3";

Program.sectMap[".neardata"] = "DDR3";
Program.sectMap[".rodata"] = "DDR3";
Program.sectMap[".bss"] = "DDR3";

Program.sectMap[".far"] = "DDR3";
Program.sectMap[".stack"] = "DDR3";
Program.sectMap[".system"] = "DDR3";

Program.sectMap[".extData"] = "DDR3";
Program.sectMap[".cio"] = "DDR3";
Program.sectMap[".fardata"] = "DDR3";

Program.sectMap[".code"] = "DDR3";
Program.sectMap[".args"] = "DDR3";
Program.sectMap[".vecs"] = "DDR3";
Program.sectMap["platform_lib"] = "DDR3";

Thanks.
Rgds
Shine

  • Hi,

    It would be useful to check the SYSBIOS project ROV view, the interrupt table to understand possible conflict:

    • what the IPC interrupt number and SRIO interrupt number?
    • are they second level interrupt or primary interrupt?
    • if event combiner used?
    • Interrupt vector Id and priority 

    Regards, Eric

  • Any update?

    -Eric

  • Hi Eric,

    Thanks for your help.

    I haven't received customer's reply yet. You could close the case. I'll reply as soon as I hear from customer.

    Rgds
    Shine