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.

DSP MMU Fault

Other Parts Discussed in Thread: DM3730

Hello!

my chip is DM3730 and software is DVSDK4.03.

when running the app,it will display "DSP MMU Error Fault! MMU_IRQSTATUS = [0x1]. Virtual DSP addr reference that generated the interrupt = [0x8c2000e0]." and I learn the problem from processors.wiki.ti.com/.../DSP_MMU_Faults, so I debug the app and find the function "VIDDEC_process()" can't open, the debug inifo as:
@10,056,427us: [+0 T:0x400aa410] ti.sdo.ce.video.VIDDEC - VIDDEC_process> Enter (handle=0x4cb58, inBufs=0xbeacec3c, outBufs=0xbeacec30, inArgs=)
@10,056,457us: [+4 T:0x400aa410] CV - VISA_getMaxMsgSize(0x4cb58): returning 0x1000
@10,056,488us: [+5 T:0x400aa410] CV - VISA_allocMsg> Allocating message for messageId=0x0002fe65
@10,056,518us: [+0 T:0x400aa410] CV - VISA_call(visa=0x4cb58, msg=0x40a3d880): messageId=0x0002fe65, command=0x0
DSP MMU Error Fault! MMU_IRQSTATUS = [0x1]. Virtual DSP addr reference that generated the interrupt = [0x8c2000e0].

and I check the input/output of the function "VIDDEC_process(dec, &inputBufDesc, &outputBufDesc, &decInArgs,&decOutArgs)",and my app about it is:


//INPUT

XDAS_Int8* pInputBuf[XDM_MAX_IO_BUFFERS];
XDAS_Int32 inbufSizeArray[XDM_MAX_IO_BUFFERS];

XDAS_Int8* pInputBuf[XDM_MAX_IO_BUFFERS];
XDAS_Int32 inbufSizeArray[XDM_MAX_IO_BUFFERS];

memset(pInputBuf,0,sizeof(pInputBuf[0]) * XDM_MAX_IO_BUFFERS);
memset(inbufSizeArray, 0, sizeof(inbufSizeArray[0]) * XDM_MAX_IO_BUFFERS);

for(int i=0;i<NumBuff;i++){
inBuf = Memory_alloc(inbuf_size, &allocParams);
if(!inbuf){
printf("CMEM is error!\n");
goto end;
}
pInputBuf[i] = inBuf;
inbufSizeArray[i] = inbuf_size;
}
inBuf = Memory_alloc(inargs_size, &allocParams);
if(!inbuf){
printf("CMEM is error!\n");
goto end;
}
in_args = (struct In_Args *)inbuf;
pInputBuf[NumBuff] = inBuf;
inbufSizeArray[NumBuff] = inargs_size;
//XDM_BufDesc_in
inputBufDesc.bufs = pInputBuf;
inputBufDesc.bufSizes = inbufSizeArray;
inputBufDesc.numBufs = NumBuff+1;

//OUTPUT

XDAS_Int8* pOutputBuf[XDM_MAX_IO_BUFFERS];
XDAS_Int32 outbufSizeArray[XDM_MAX_IO_BUFFERS];

memset(pOutputBuf,0,sizeof(pOutputBuf[0]) * XDM_MAX_IO_BUFFERS);
memset(outbufSizeArray, 0, sizeof(outbufSizeArray[0]) * XDM_MAX_IO_BUFFERS);

outBuf = Memory_alloc(outargs_size, &allocParams);
if(!outBuf){
printf("CMEM is error!\n");
goto end;
}
pOutputBuf[0] = outBuf;
outbufSizeArray[0] = outbuf_size;
out_args = (struct Out_Args *)outBuf;
//XDM_BufDesc_out finished
outputBufDesc.bufs = pOutputBuf;
outputBufDesc.bufSizes = outbufSizeArray;
outputBufDesc.numBufs = 1;

and I think my CMEM address of input/output isn't error,but I don't know why ? Please reply to me,Thank you!

  • Hi Zane Huang,

    The error message: DSP MMU Error Fault! MMU_IRQSTATUS = [0x1]. Virtual DSP addr reference that generated the interrupt = [0x8c2000e0] is caused by DSP accessing of an L3 interconnect address space (addresses above 0x11000000) which is not in the MMU TLB.
    You can find description in the DSP/BIOS™ LINK LNK 173 USR PLATFORM GUIDE section 6.2.3 MMU Faults at:
    docs.google.com/viewer
    Also a similar issue is discussed at:
    e2e.ti.com/.../319222

    BR
    Tsvetolin Shulev
  • Thanks for your reply!
    After several tests, we found the reason is the code of algorithm had crashed.We think maybe had stack flow bcause of our algorithm have use many OPENCV functions,and if we ignore those functions ,the app can run successfully.
    But the code ,server,app have many stacksize setting, ande How to chang the stacksize?
    Thank you again!