From: Axel Haslam <[EMAIL PROTECTED]>
Date: Fri, 12 Sep 2008 19:09:01 -0500
Subject: [PATCH] BRIDGE tiomap unmap fix

Fixed unexpected return value when calling DSPProcessor_UnMap,
now it provides only DSP_xxx return codes

Signed-off-by: Axel Haslam <[EMAIL PROTECTED]>
---
 drivers/dsp/bridge/wmd/tiomap3430.c |   40 ++++++++++++++++++++++++----------
 1 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/drivers/dsp/bridge/wmd/tiomap3430.c 
b/drivers/dsp/bridge/wmd/tiomap3430.c
index e5c235d..5ff3670 100644
--- a/drivers/dsp/bridge/wmd/tiomap3430.c
+++ b/drivers/dsp/bridge/wmd/tiomap3430.c
@@ -1506,12 +1506,17 @@ static DSP_STATUS WMD_BRD_MemUnMap(struct 
WMD_DEV_CONTEXT *hDevContext,
                                /* vaCurr aligned to pteSize? */
                                if ((pteSize != 0) && (remBytesL2 >= pteSize) &&
                                   !(vaCurr & (pteSize - 1))) {
-                                       HW_MMU_PteClear(pteAddrL2, vaCurr,
-                                                        pteSize);
-                                       remBytesL2 -= pteSize;
-                                       vaCurr += pteSize;
-                                       pteAddrL2 += (pteSize >> 12) *
-                                                     sizeof(u32);
+                                       if (HW_MMU_PteClear(pteAddrL2,
+                                               vaCurr, pteSize) == RET_OK) {
+                                               status = DSP_SOK;
+                                               remBytesL2 -= pteSize;
+                                               vaCurr += pteSize;
+                                               pteAddrL2 += (pteSize >> 12) *
+                                                               sizeof(u32);
+                                       } else {
+                                               status = DSP_EFAIL;
+                                               goto EXIT_LOOP;
+                                       }
                                } else {
                                        status = DSP_EFAIL;
                                }
@@ -1522,9 +1527,13 @@ static DSP_STATUS WMD_BRD_MemUnMap(struct 
WMD_DEV_CONTEXT *hDevContext,
                                if (pt->pgInfo[L2PageNum].numEntries == 0) {
                                        /* Clear the L1 PTE pointing to the
                                         * L2 PT */
-                                       status = HW_MMU_PteClear(L1BaseVa,
-                                                vaCurrOrig,
-                                                HW_MMU_COARSE_PAGE_SIZE);
+                                       if (RET_OK == HW_MMU_PteClear(L1BaseVa,
+                                       vaCurrOrig, HW_MMU_COARSE_PAGE_SIZE))
+                                               status = DSP_SOK;
+                                       else {
+                                               status = DSP_EFAIL;
+                                               goto EXIT_LOOP;
+                                       }
                                }
                                remBytes -= pteCount * PG_SIZE_4K;
                        } else {
@@ -1540,15 +1549,22 @@ static DSP_STATUS WMD_BRD_MemUnMap(struct 
WMD_DEV_CONTEXT *hDevContext,
                        /* pteSize = 1 MB or 16 MB */
                        if ((pteSize != 0) && (remBytes >= pteSize) &&
                           !(vaCurr & (pteSize - 1))) {
-                               HW_MMU_PteClear(L1BaseVa, vaCurr, pteSize);
-                               remBytes -= pteSize;
-                               vaCurr += pteSize;
+                               if (HW_MMU_PteClear(L1BaseVa,
+                                       vaCurr, pteSize) == RET_OK) {
+                                       status = DSP_SOK;
+                                       remBytes -= pteSize;
+                                       vaCurr += pteSize;
+                               } else {
+                                       status = DSP_EFAIL;
+                                       goto EXIT_LOOP;
+                               }
                } else {
                        status = DSP_EFAIL;
                }
        }
         /* It is better to flush the TLB here, so that any stale old entries
         * get flushed */
+EXIT_LOOP:
        HW_MMU_TLBFlushAll(pDevContext->dwDSPMmuBase);
        DBG_Trace(DBG_LEVEL1, "WMD_BRD_MemUnMap vaCurr %x, pteAddrL1 %x "
                  "pteAddrL2 %x\n", vaCurr, pteAddrL1, pteAddrL2);
-- 
1.5.5.4

--
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

Reply via email to