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.

PCIe boot mode,target program could not clear msi interrupt status

boot loader do

{

1,push data to L2 memory

2,set program entry

3,send msi interrupt (MSI_IRQ = 0) to wake up core0

}

and then my traget(c6657&RBL) program running,i try to clear msi vector 0 interrupt status in my target program,such as follow:

MSI_IRQ_STATUS = 0x01;

IRQ_EOI = 0x04;

but no effect,i can see MSI0_IRQ_STATUS alwways 0x00000001 in memory browser,I directly modify the memory to write 0x01 @MSI0_IRQ_STATUS is OK,MSI0_IRQ_STATUS can be clear by emulator.

  • Let me understood your sequence:

    1) You have 6657 powered up, it is in RBL running "IDLE" instructions

    2) From PCIE host, you push the your program (converted into data) into L2, set _c_int00 to DSP_START_ADDRESS, and generate a MSI interrupt using vector 0

    3) On 6657 side, DSP core 0 woke up correctly by MSI interrupt, and start to execute your program, and in the program, you have the code to clear the MSI interrupt but it didn't work.

    Is possible your code was optimized out because not declared as volatile:

    Try if below works:

    #define IRQ_EOI        0x21800050
    #define MSI0_IRQ_STATUS   0x21800104

    #define DEVICE_REG32_W(x,y)   *(volatile unsigned int *)(x)=(y)

     DEVICE_REG32_W(MSI0_IRQ_STATUS, 0x1);
     DEVICE_REG32_W(IRQ_EOI, 0x4);  /* end of MSI0, event number=4 */

     Regards, Eric

     

  • Thank you for providing an effective check list;

    the 1st and 2nd are OK but 3rd,

    I found the target program NOT updated correctly because hex6x conversion failed, the older .btbl file be used by my bootloader application at all times.