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.

NOTIFY module problem

Other Parts Discussed in Thread: OMAP3530

Hi,

I'm experiencing some problems while trying to send notifications to ARM Linux from DSP/BIOS task and can't get it work (step 8 in DSP/BIOS part below).

My setup is OMAP3530 with DSP/BIOS 5.32 and DSP/BIOS Link 1.65.00.03. Development tool used is CCS v4.

What I'm basically trying to implement is some kind of a communication protocol between ARM and DSP where they inform each other of certain events by using NOTIFY module from DSP/LINK.

So what protocol looks like is:


/****************************************
* ARM Linux side *
****************************************/

/* in main() */
1. PROC_setup
2. PROC_attach
3. POOL_open
4. POOL_alloc         /* Allocate memory for data to be exchanged between ARM and DSP */
5. POOL_translateAddr /* Translate the ARM-space address of allocated memory to DSP-space */
6. sem_init           /* Semaphore synchronization mechanism */
7. NOTIFY_register    /* Register for events to be received from DSP */
8. PROC_load
9. PROC_start         /* Start the DSP execution */
10. sem_wait          /* Wait for notification from DSP that setup (step 5 on DSP side) is completed */
11. NOTIFY_notify     /* After receiving notification that DSP is ready, send the address of allocated memory */
12. while(1){}        /* Continue receiving events from DSP */

/* in NOTIFY callback function */
1. PROC_read          /* Read memory after receiving notification that DSP has written some data */

/****************************************
* DSP/BIOS side *
****************************************/
/* in main() */
1. DSPLINK_init      /* Initialize DSP/BIOS Link driver */
2. SEM_create        /* Semaphore synchronization mechanism */
3. NOTIFY_register   /* Register for events to be received from ARM */ 
4. TSK_create        /* create task */
5. NOTIFY_notify     /* send notification to ARM that DSP is ready for data exchange (step 10 on ARM side) */

/* in TSK */
6. SEM_pendBinary    /* wait ARM to send the address of allocated memory (step 11 on ARM side) */
7. BCACHE_wb         /* write some data to allocated memory */
8. NOTIFY_notify     /* inform ARM side of data being written */


So it is rather very simple protocol but I'm stuck in step 8 on DSP/BIOS side. Notification simply isn't being sent. But sending notifications from main() (i.e. step 5) work as expected. Is it possible that task isn't executing at all? How to check something like that? I've checked my setup and TSK module is enabled in .tcf file. 
Also pending semaphore isn't the source of problem as I tried to put step 5 in task and problem persisted.

As I am experiencing some problems with emulator, I cannot easily debug DSP side code. So please can you give me some advices what could be wrong with this procedure. Maybe I haven't set something or some kind of constraint I'm not aware of?
Practically same code can be seen in MPCSXFER program given in DSP/BIOS Link examples. And it really does work (i.e. sending notifications from task).
So obviously I am missing something. My .tcf file is almost the same as the one from MPCSXFER. Also compiler options, flags etc.

If needed I can provide the source code but I thought presenting problem this way would be more clear.

Thank you for your time and help,

Adi