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 Link example failure on DM3730

The CPU is DM3730, with 256 Mbytes DDR
DVSDK version is 4.03
Kernel version is 3.2.9 mainline

I am trying the dsplink sample applications. What happens is I can only run one app, If I try to run a different app, it fails with :

DSP MMU Erro Fault! MMU_IRQSTATUS = [0x1] Virtual DSP addr reference that generated the interrupt = [0xbebebeb8]

, and a different faulting address each time.

I compiled the dsplink, without modification. I also checked this  link :

http://processors.wiki.ti.com/index.php/Changing_DSPLink_Memory_Map

And everything is fine, my kernel command line is mem=55M@0x80000000.
So I think the issue is not a memory map problem. What is also strange is that it
affects only the second app.

For example, if I launch the loop application then the message application, the message application will fail. Now if I do the opposite, ie launch the message application first, it will run sucessfully, and the loop application will then fail. After an application failed, no application will work, but only the first to fail triggers an MMU fault. It occurs when I launch a different application. If for example I launch the message app twice and then the loop app, the fault will occur with the loop app. It looks like the ARM can't stop the DSP, and when it loads another app, a running DSP program has it's memory overwritten.

  • I tried with the kernel provided in the DVSDK, but the outcome is the same.

  • I have seen this in the DSPLINK platform guide :

    6.1.2
    Using LPM
    When cache is enabled, a MMU fault is seen when one application is run followed by
    a run of another application. This issue is not seen when one application is run
    followed by a run of the same application. To overcome this issue the LPM module is
    used to power cycle the EVM between runs.

    What does it mean exactly ? If I want to run several apps, I should use the LPM module to power on / off the DSP ?
    The documentation says "power cycle the EVM", this looks quite radical to me.

    When using codec engine, the example app use a codec server. Does it mean that after a CEruntimeInit,
    I can safely initialise / release codec instance without entering this cache bug ?