Hi,
TI's dspbridge patchset has been rebased on the latest l-o just for
its easy intergration. Most of the patches just came from o-z(Thanks
TI dspbridge team!) and I just collected them. The latest one is:
http://4869037.web.fc2.com/tidspbridge-20081021.tgz
So steps are:
$ git clone
http://www.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
$ cd linux-omap-2.6
$ wget http://4869037.web.fc2.com/tidspbridge-<date>.tgz
$ tar xvzf tidspbridge-<date>.tgz
$ git am *.patch
$ make <your omap3 board>_defconfig
$ make menuconfig # add the following options in the menuconfig
...
CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=14
...
CONFIG_MPU_BRIDGE=m
CONFIG_DISABLE_BRIDGE_DVFS=y
# CONFIG_DISABLE_BRIDGE_PM is not set
CONFIG_BRIDGE_DEBUG=y
...
You can get bridge sample binaries as below:
https://omapzoom.org/gf/download/frsrelease/132/632/dspbridge_binaries.tar.bz2
And extract it somewhere on target rootfs. After kernel booted up:
$ depmod -a
$ modprobe bridgedriver base_img=ddspbase_tiomap3430.dof64P
$ <Thy some sample applications>
If I missed something here, please let me know.
Hiroshi DOYU
From: Hiroshi DOYU <[EMAIL PROTECTED]>
Subject: Re: [PATCH][omapzoom] BRIDGE Add preemption support to unprotected
functions
Date: Thu, 09 Oct 2008 07:48:29 +0300 (EEST)
> Hi Omar,
>
> This patch has been added to l-o tidspbridge patchset for its easy
> integration against l-o:
>
> http://4869037.web.fc2.com/tidspbridge-20081010.tgz
>
> Hiroshi DOYU
>
> It has been sync'ed with omapzoom("o-z") bridge patches[1] and rebased
> on the latest l-o. Most of the patches come from o-z(Thanks TI bridge
> team!) and I just collected them;)
>
> So steps are:
>
> $ git clone
> http://www.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
> $ cd linux-omap-2.6
> $ wget http://4869037.web.fc2.com/tidspbridge-<date>.tgz
> $ tar xvzf tidspbridge-<date>.tgz
> $ git am *.patch
> $ make <your omap3 board>_defconfig
> $ make menuconfig # add the following options in the menuconfig
> ...
> CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=14
> ...
> CONFIG_MPU_BRIDGE=m
> CONFIG_DISABLE_BRIDGE_DVFS=y
> ...
>
> You can get bridge sample binaries as below:
>
>
> https://omapzoom.org/gf/download/frsrelease/132/632/dspbridge_binaries.tar.bz2
>
> And extract it somewhere on target rootfs.
>
> After kernel booted up:
>
> $ depmod -a
> $ modprobe bridgedriver base_img=ddbase_tiomap3430.dof64P
> $ <Thy some sample applications>
>
>
> From: "ext Ramirez Luna, Omar" <[EMAIL PROTECTED]>
> Subject: [PATCH][omapzoom] BRIDGE Add preemption support to unprotected
> functions
> Date: Wed, 8 Oct 2008 17:07:15 -0500
>
> > From: Hari Kanigeri <[EMAIL PROTECTED]>
> > Date: Fri, 3 Oct 2008 12:20:45 -0500
> > Subject: [PATCH] BRIDGE Add preemption support to unprotected functions
> >
> > This patch protects the critical sections in bridge
> > driver that otherwise might end in unexpected behavior.
> >
> > Signed-off-by: Hari Kanigeri <[EMAIL PROTECTED]>
> > Signed-off-by: Omar Ramirez Luna <[EMAIL PROTECTED]>
> > ---
> > arch/arm/plat-omap/include/dspbridge/sync.h | 15 +++++++-----
> > drivers/dsp/bridge/rmgr/proc.c | 31
> > ++++++++++++++++++++------
> > drivers/dsp/bridge/services/sync.c | 9 +-------
> > 3 files changed, 34 insertions(+), 21 deletions(-)
> >
> > diff --git a/arch/arm/plat-omap/include/dspbridge/sync.h
> > b/arch/arm/plat-omap/include/dspbridge/sync.h
> > index e340c88..26aa370 100644
> > --- a/arch/arm/plat-omap/include/dspbridge/sync.h
> > +++ b/arch/arm/plat-omap/include/dspbridge/sync.h
> > @@ -55,6 +55,11 @@
> > #ifndef _SYNC_H
> > #define _SYNC_H
> >
> > +#include <asm/semaphore.h>
> > +
> > +#define SIGNATURECS 0x53435953 /* "SYCS" (in reverse) */
> > +#define SIGNATUREDPCCS 0x53445953 /* "SYDS" (in reverse) */
> > +
> > /* Special timeout value indicating an infinite wait: */
> > #define SYNC_INFINITE 0xffffffff
> >
> > @@ -63,14 +68,12 @@
> >
> > /* Generic SYNC object: */
> > struct SYNC_OBJECT;
> > - /*typedef struct SYNC_OBJECT *SYNC_HOBJECT;*/
> >
> > /* Generic SYNC CS object: */
> > - struct SYNC_CSOBJECT;
> > - /*typedef struct SYNC_CSOBJECT *SYNC_HCSOBJECT;*/
> > -
> > -/* Used SYNC_CSOBJECT instead of SYNC_DPCCSOBJECT to avoid warnings */
> > - /*typedef struct SYNC_CSOBJECT *SYNC_HDPCCSOBJECT;*/
> > +struct SYNC_CSOBJECT {
> > + u32 dwSignature; /* used for object validation */
> > + struct semaphore sem;
> > +} ;
> >
> > /* SYNC object attributes: */
> > struct SYNC_ATTRS {
> > diff --git a/drivers/dsp/bridge/rmgr/proc.c b/drivers/dsp/bridge/rmgr/proc.c
> > index b60fd3a..4464c62 100644
> > --- a/drivers/dsp/bridge/rmgr/proc.c
> > +++ b/drivers/dsp/bridge/rmgr/proc.c
> > @@ -118,7 +118,7 @@
> > #include <dspbridge/list.h>
> > #include <dspbridge/mem.h>
> > #include <dspbridge/ntfy.h>
> > -
> > +#include <dspbridge/sync.h>
> > /* ----------------------------------- Mini Driver */
> > #include <dspbridge/wmd.h>
> >
> > @@ -197,6 +197,8 @@ static struct GT_Mask PROC_DebugMask = { NULL, NULL };
> > /* WCD MGR Mask */
> >
> > static u32 cRefs;
> >
> > +struct SYNC_CSOBJECT *hProcLock; /* For critical sections */
> > +
> > #ifndef CONFIG_DISABLE_BRIDGE_PM
> > #ifndef CONFIG_DISABLE_BRIDGE_DVFS
> > #ifdef CONFIG_OMAP3_PM
> > @@ -733,12 +735,13 @@ DSP_STATUS PROC_FlushMemory(DSP_HPROCESSOR
> > hProcessor, void *pMpuAddr,
> > "Entered PROC_FlushMemory, args:\n\t"
> > "hProcessor: 0x%x pMpuAddr: 0x%x ulSize 0x%x, ulFlags 0x%x\n",
> > hProcessor, pMpuAddr, ulSize, ulFlags);
> > -
> > + /* Critical section */
> > + (void)SYNC_EnterCS(hProcLock);
> > MEM_FlushCache(pMpuAddr, ulSize, FlushMemType);
> > + (void)SYNC_LeaveCS(hProcLock);
> >
> > GT_1trace(PROC_DebugMask, GT_ENTER, "Leaving PROC_FlushMemory [0x%x]",
> > status);
> > -
> > return status;
> > }
> >
> > @@ -759,7 +762,10 @@ DSP_STATUS PROC_InvalidateMemory(DSP_HPROCESSOR
> > hProcessor, void *pMpuAddr,
> > "Entered PROC_InvalidateMemory, args:\n\t"
> > "hProcessor: 0x%x pMpuAddr: 0x%x ulSize 0x%x\n", hProcessor,
> > pMpuAddr, ulSize);
> > + (void)SYNC_EnterCS(hProcLock);
> > MEM_FlushCache(pMpuAddr, ulSize, FlushMemType);
> > + (void)SYNC_LeaveCS(hProcLock);
> > +
> > GT_1trace(PROC_DebugMask, GT_ENTER,
> > "Leaving PROC_InvalidateMemory [0x%x]", status);
> > return status;
> > @@ -847,6 +853,9 @@ void PROC_Exit(void)
> > {
> > DBC_Require(cRefs > 0);
> >
> > + if (hProcLock)
> > + (void)SYNC_DeleteCS(hProcLock);
> > +
> > cRefs--;
> >
> > GT_1trace(PROC_DebugMask, GT_5CLASS,
> > @@ -992,6 +1001,8 @@ bool PROC_Init(void)
> > DBC_Assert(!PROC_DebugMask.flags);
> > GT_create(&PROC_DebugMask, "PR"); /* "PR" for Processor */
> >
> > + MEM_AllocObject(hProcLock, struct SYNC_CSOBJECT, SIGNATURECS);
> > + (void)SYNC_InitializeCS(&hProcLock);
> > }
> >
> > if (fRetval)
> > @@ -1384,6 +1395,8 @@ DSP_STATUS PROC_Map(DSP_HPROCESSOR hProcessor, void
> > *pMpuAddr, u32 ulSize,
> > GT_3trace(PROC_DebugMask, GT_ENTER, "PROC_Map: vaAlign %x, paAlign %x, "
> > "sizeAlign %x\n", vaAlign, paAlign, sizeAlign);
> >
> > + /* Critical section */
> > + (void)SYNC_EnterCS(hProcLock);
> > status = DMM_GetHandle(pProcObject, &hDmmMgr);
> > if (DSP_FAILED(status)) {
> > GT_1trace(PROC_DebugMask, GT_7CLASS,
> > @@ -1406,6 +1419,8 @@ DSP_STATUS PROC_Map(DSP_HPROCESSOR hProcessor, void
> > *pMpuAddr, u32 ulSize,
> > } else {
> > DMM_UnMapMemory(hDmmMgr, vaAlign, &sizeAlign);
> > }
> > + (void)SYNC_LeaveCS(hProcLock);
> > +
> > #ifndef RES_CLEANUP_DISABLE
> > if (DSP_SUCCEEDED(status)) {
> > /* Update the node and stream resource status */
> > @@ -1532,9 +1547,9 @@ DSP_STATUS PROC_ReserveMemory(DSP_HPROCESSOR
> > hProcessor, u32 ulSize,
> > if (DSP_FAILED(status)) {
> > GT_1trace(PROC_DebugMask, GT_7CLASS, "PROC_ReserveMemory: "
> > "Failed to get DMM Mgr handle: 0x%x\n", status);
> > - } else {
> > + } else
> > status = DMM_ReserveMemory(hDmmMgr, ulSize, (u32 *)ppRsvAddr);
> > - }
> > +
> > GT_1trace(PROC_DebugMask, GT_ENTER, "Leaving PROC_ReserveMemory [0x%x]",
> > status);
> > return status;
> > @@ -1743,6 +1758,8 @@ DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void
> > *pMapAddr)
> > vaAlign = PG_ALIGN_LOW((u32) pMapAddr, PG_SIZE_4K);
> >
> > status = DMM_GetHandle(hProcessor, &hDmmMgr);
> > + /* Critical section */
> > + (void)SYNC_EnterCS(hProcLock);
> > if (DSP_FAILED(status)) {
> > GT_1trace(PROC_DebugMask, GT_7CLASS, "PROC_UnMap: "
> > "Failed to get DMM Mgr handle: 0x%x\n", status);
> > @@ -1751,12 +1768,12 @@ DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor,
> > void *pMapAddr)
> > This function returns error if the VA is not mapped */
> > status = DMM_UnMapMemory(hDmmMgr, (u32) vaAlign, &sizeAlign);
> > }
> > -
> > /* Remove mapping from the page tables. */
> > if (DSP_SUCCEEDED(status)) {
> > status = (*pProcObject->pIntfFxns->pfnBrdMemUnMap)
> > (pProcObject->hWmdContext, vaAlign, sizeAlign);
> > }
> > + (void)SYNC_LeaveCS(hProcLock);
> > #ifndef RES_CLEANUP_DISABLE
> > GT_1trace(PROC_DebugMask, GT_ENTER,
> > "PROC_UnMap DRV_GetDMMResElement "
> > @@ -1804,7 +1821,7 @@ DSP_STATUS PROC_UnReserveMemory(DSP_HPROCESSOR
> > hProcessor, void *pRsvAddr)
> > status = DMM_GetHandle(pProcObject, &hDmmMgr);
> > if (DSP_FAILED(status))
> > GT_1trace(PROC_DebugMask, GT_7CLASS,
> > - "PROC_Map: Failed to get DMM Mgr "
> > + "PROC_UnReserveMemory: Failed to get DMM Mgr "
> > "handle: 0x%x\n", status);
> > else
> > status = DMM_UnReserveMemory(hDmmMgr, (u32) pRsvAddr);
> > diff --git a/drivers/dsp/bridge/services/sync.c
> > b/drivers/dsp/bridge/services/sync.c
> > index 40c832f..d3453fa 100644
> > --- a/drivers/dsp/bridge/services/sync.c
> > +++ b/drivers/dsp/bridge/services/sync.c
> > @@ -15,7 +15,7 @@
> > */
> >
> > /*
> > - * ======== syncce.c ========
> > + * ======== sync.c ========
> > * Purpose:
> > * Synchronization services.
> > *
> > @@ -68,8 +68,6 @@
> >
> > /* ----------------------------------- Defines, Data Structures, Typedefs
> > */
> > #define SIGNATURE 0x434e5953 /* "SYNC" (in reverse) */
> > -#define SIGNATURECS 0x53435953 /* "SYCS" (in reverse) */
> > -#define SIGNATUREDPCCS 0x53445953 /* "SYDS" (in reverse) */
> >
> > enum wait_state {
> > wo_waiting,
> > @@ -95,11 +93,6 @@ struct SYNC_OBJECT {
> > struct WAIT_OBJECT *pWaitObj;
> > };
> >
> > -struct SYNC_CSOBJECT {
> > - u32 dwSignature; /* used for object validation */
> > - struct semaphore sem;
> > -} ;
> > -
> > struct SYNC_DPCCSOBJECT {
> > u32 dwSignature; /* used for object validation */
> > spinlock_t sync_dpccs_lock;
> > --
> > 1.5.6.3
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> > the body of a message to [EMAIL PROTECTED]
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html