OMAP3: PM: add scratchpad locking function

This patch implements locking using the semaphore in scratchpad
memory preventing any concurrent access to scratchpad from OMAP
and Baseband/Modem processor.

Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
This commit is contained in:
Rajendra Nayak 2009-05-28 18:13:06 +05:30 committed by Kevin Hilman
parent 5a1b1d3a9e
commit a89b6f0062
1 changed files with 33 additions and 0 deletions

View File

@ -33,6 +33,8 @@
#include "prm.h"
#include "sdrc.h"
#define SDRC_SCRATCHPAD_SEM_V 0xfa00291c
#define PM_PREPWSTST_CORE_V OMAP34XX_PRM_REGADDR(CORE_MOD, \
OMAP3430_PM_PREPWSTST)
#define PM_PREPWSTST_CORE_P 0x48306AE8
@ -57,6 +59,37 @@
#define SDRC_DLLA_STATUS_V OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS)
#define SDRC_DLLA_CTRL_V OMAP34XX_SDRC_REGADDR(SDRC_DLLA_CTRL)
.text
/* Function to aquire the semaphore in scratchpad */
ENTRY(lock_scratchpad_sem)
stmfd sp!, {lr} @ save registers on stack
wait_sem:
mov r0,#1
ldr r1, sdrc_scratchpad_sem
wait_loop:
ldr r2, [r1] @ load the lock value
cmp r2, r0 @ is the lock free ?
beq wait_loop @ not free...
swp r2, r0, [r1] @ semaphore free so lock it and proceed
cmp r2, r0 @ did we succeed ?
beq wait_sem @ no - try again
ldmfd sp!, {pc} @ restore regs and return
sdrc_scratchpad_sem:
.word SDRC_SCRATCHPAD_SEM_V
ENTRY(lock_scratchpad_sem_sz)
.word . - lock_scratchpad_sem
.text
/* Function to release the scratchpad semaphore */
ENTRY(unlock_scratchpad_sem)
stmfd sp!, {lr} @ save registers on stack
ldr r3, sdrc_scratchpad_sem
mov r2,#0
str r2,[r3]
ldmfd sp!, {pc} @ restore regs and return
ENTRY(unlock_scratchpad_sem_sz)
.word . - unlock_scratchpad_sem
.text
/* Function call to get the restore pointer for resume from OFF */
ENTRY(get_restore_pointer)