]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/performance-audio-sr.git/blobdiff - pasdk/test_dsp/sap/sap.c
Merge remote-tracking branch 'origin/dev_pasdk_govind_pasdk53IpDataDebug' into dev_pa...
[processor-sdk/performance-audio-sr.git] / pasdk / test_dsp / sap / sap.c
index 0b68afa1a342ca1af495e46f5973ea356be0f93d..174e76b143bf391df2fac8bab27199d93f33a2a4 100644 (file)
@@ -85,41 +85,70 @@ extern EDMA3_DRV_Handle hEdma0;
 extern EDMA3_DRV_Handle hEdma1;
 
 int gStartError;
-int gIsrCnt;
+int gIsrInputCnt;
+int gIsrOutputCnt;
 int gIsrElseCnt;
-int gIsrErrCnt;
+int gIsrInErrCnt;
+int gIsrOutErrCnt;
 int gIsrRunCnt;
 int gIsrNotRunCnt;
 int gisrOutput;
+int gSAPResetIn;
+int gSAPResetOut;
 
 typedef xdc_Short MdInt;
 
 void swapHdmi(Ptr, int);
 
-#define TEST_MULTICHANNEL
+//#define TEST_MULTICHANNEL
 
 
 #ifdef TEST_MULTICHANNEL
-#define SAP_UNDER_LEN 4
+#define SAP_UNDER_LEN 8
 //#define SAP_UNDER_LEN 1024 // GJ: experiment
 #else
 #define SAP_UNDER_LEN 1024
 #endif
 int sap_UNDER[SAP_UNDER_LEN]; // used for underrun
-int sap_OVER = 0;     // used for overrun
+int sap_OVER_1LANE = 0;     // used for overrun
+int sap_OVER_4LANE[4] = {0,0,0,0};      // used for overrun
+
+#ifdef DEBUG
 void DJDBG_SAP_EDMA_dumpParams(int tag_place)
 {
-       unsigned int *ptrPARAM_BASE = (unsigned int *)0x02704000;
-       unsigned int *ptrPARAM0x18 = (unsigned int *)0x02704300; // ((*((EDMA3_CCRL_Regs *) 0x02700000)).PARAMENTRY)[24]
+       //unsigned int *ptrPARAM_BASE = (unsigned int *)0x02704000;
+       //unsigned int *ptrPARAM0x18 = (unsigned int *)0x02704300; // ((*((EDMA3_CCRL_Regs *) 0x02700000)).PARAMENTRY)[24]
        unsigned int *ptrPARAM0x19 = (unsigned int *)0x02704320; // ((*((EDMA3_CCRL_Regs *) 0x02700000)).PARAMENTRY)[24]
+       unsigned int *ptrPARAM0x41 = (unsigned int *)0x027048A0; // ((*((EDMA3_CCRL_Regs *) 0x02700000)).PARAMENTRY)[24]
+       unsigned int *ptrPARAM0x42 = (unsigned int *)0x027048C0; // ((*((EDMA3_CCRL_Regs *) 0x02700000)).PARAMENTRY)[24]
+       unsigned int *ptrPARAM0x43 = (unsigned int *)0x027048E0; // ((*((EDMA3_CCRL_Regs *) 0x02700000)).PARAMENTRY)[24]
+       unsigned int *ptrPARAM0x44 = (unsigned int *)0x02704910; // ((*((EDMA3_CCRL_Regs *) 0x02700000)).PARAMENTRY)[24]
+
+       //Log_info5("PARAM0x18a(%d): 0x%x 0x%x 0x%x 0x%x", tag_place, ptrPARAM0x18[0], ptrPARAM0x18[1], ptrPARAM0x18[2], ptrPARAM0x18[3]);
+       //Log_info5("PARAM0x18b(%d): 0x%x 0x%x 0x%x 0x%x", tag_place, ptrPARAM0x18[4], ptrPARAM0x18[5], ptrPARAM0x18[6], ptrPARAM0x18[7]);
+
+       Log_info5("PARAM0x19a(%d): ITCINTEN: 0x%02x, TCINTEN: 0x%02x, TCC: 0x%02x, TCCMODE: %d", tag_place, ((ptrPARAM0x19[0] & 0x200000) >> 21), ((ptrPARAM0x19[0] & 0x100000) >> 20), ((ptrPARAM0x19[0] & 0x3F000) >> 12), ((ptrPARAM0x19[0] & 0x800) >> 11));
+       Log_info5("PARAM0x19b(%d): SRC: 0x%08x, A_B_CNT: 0x%08x, DST: 0x%08x,  SRC_DST_BIDX: 0x%08x", tag_place, ptrPARAM0x19[1], ptrPARAM0x19[2], ptrPARAM0x19[3], ptrPARAM0x19[4]);
+       Log_info4("PARAM0x19b(%d): LINK_BCNTRLD: 0x%08x, SRC_DST_CIDX: 0x%08x, CCNT: 0x%08x", tag_place, ptrPARAM0x19[5], ptrPARAM0x19[6], ptrPARAM0x19[7]);
+
+       Log_info5("PARAM0x41a(%d): ITCINTEN: 0x%02x, TCINTEN: 0x%02x, TCC: 0x%02x, TCCMODE: %d", tag_place, ((ptrPARAM0x41[0] & 0x200000) >> 21), ((ptrPARAM0x41[0] & 0x100000) >> 20), ((ptrPARAM0x41[0] & 0x3F000) >> 12), ((ptrPARAM0x41[0] & 0x800) >> 11));
+       Log_info5("PARAM0x41b(%d): SRC: 0x%08x, A_B_CNT: 0x%08x, DST: 0x%08x,  SRC_DST_BIDX: 0x%08x", tag_place, ptrPARAM0x41[1], ptrPARAM0x41[2], ptrPARAM0x41[3], ptrPARAM0x41[4]);
+       Log_info4("PARAM0x41b(%d): LINK_BCNTRLD: 0x%08x, SRC_DST_CIDX: 0x%08x, CCNT: 0x%08x", tag_place, ptrPARAM0x41[5], ptrPARAM0x41[6], ptrPARAM0x41[7]);
 
-       Log_info5("PARAM0x18a(%d): 0x%x 0x%x 0x%x 0x%x", tag_place, ptrPARAM0x18[0], ptrPARAM0x18[1], ptrPARAM0x18[2], ptrPARAM0x18[3]);
-       Log_info5("PARAM0x18b(%d): 0x%x 0x%x 0x%x 0x%x", tag_place, ptrPARAM0x18[4], ptrPARAM0x18[5], ptrPARAM0x18[6], ptrPARAM0x18[7]);
+       Log_info5("PARAM0x42a(%d): ITCINTEN: 0x%02x, TCINTEN: 0x%02x, TCC: 0x%02x, TCCMODE: %d", tag_place, ((ptrPARAM0x42[0] & 0x200000) >> 21), ((ptrPARAM0x42[0] & 0x100000) >> 20), ((ptrPARAM0x42[0] & 0x3F000) >> 12), ((ptrPARAM0x42[0] & 0x800) >> 11));
+       Log_info5("PARAM0x42b(%d): SRC: 0x%08x, A_B_CNT: 0x%08x, DST: 0x%08x,  SRC_DST_BIDX: 0x%08x", tag_place, ptrPARAM0x42[1], ptrPARAM0x42[2], ptrPARAM0x42[3], ptrPARAM0x42[4]);
+       Log_info4("PARAM0x42b(%d): LINK_BCNTRLD: 0x%08x, SRC_DST_CIDX: 0x%08x, CCNT: 0x%08x", tag_place, ptrPARAM0x42[5], ptrPARAM0x42[6], ptrPARAM0x42[7]);
 
-       Log_info5("PARAM0x19a(%d): 0x%x 0x%x 0x%x 0x%x", tag_place, ptrPARAM0x19[0], ptrPARAM0x19[1], ptrPARAM0x19[2], ptrPARAM0x19[3]);
-       Log_info5("PARAM0x19b(%d): 0x%x 0x%x 0x%x 0x%x", tag_place, ptrPARAM0x19[4], ptrPARAM0x19[5], ptrPARAM0x19[6], ptrPARAM0x19[7]);
+       Log_info5("PARAM0x43a(%d): ITCINTEN: 0x%02x, TCINTEN: 0x%02x, TCC: 0x%02x, TCCMODE: %d", tag_place, ((ptrPARAM0x43[0] & 0x200000) >> 21), ((ptrPARAM0x43[0] & 0x100000) >> 20), ((ptrPARAM0x43[0] & 0x3F000) >> 12), ((ptrPARAM0x43[0] & 0x800) >> 11));
+       Log_info5("PARAM0x43b(%d): SRC: 0x%08x, A_B_CNT: 0x%08x, DST: 0x%08x,  SRC_DST_BIDX: 0x%08x", tag_place, ptrPARAM0x43[1], ptrPARAM0x43[2], ptrPARAM0x43[3], ptrPARAM0x43[4]);
+       Log_info4("PARAM0x43b(%d): LINK_BCNTRLD: 0x%08x, SRC_DST_CIDX: 0x%08x, CCNT: 0x%08x", tag_place, ptrPARAM0x43[5], ptrPARAM0x43[6], ptrPARAM0x43[7]);
+
+       Log_info5("PARAM0x44a(%d): ITCINTEN: 0x%02x, TCINTEN: 0x%02x, TCC: 0x%02x, TCCMODE: %d", tag_place, ((ptrPARAM0x44[0] & 0x200000) >> 21), ((ptrPARAM0x44[0] & 0x100000) >> 20), ((ptrPARAM0x44[0] & 0x3F000) >> 12), ((ptrPARAM0x44[0] & 0x800) >> 11));
+       Log_info5("PARAM0x44b(%d): SRC: 0x%08x, A_B_CNT: 0x%08x, DST: 0x%08x,  SRC_DST_BIDX: 0x%08x", tag_place, ptrPARAM0x44[1], ptrPARAM0x44[2], ptrPARAM0x44[3], ptrPARAM0x44[4]);
+       Log_info4("PARAM0x44b(%d): LINK_BCNTRLD: 0x%08x, SRC_DST_CIDX: 0x%08x, CCNT: 0x%08x", tag_place, ptrPARAM0x44[5], ptrPARAM0x44[6], ptrPARAM0x44[7]);
     //Log_info1("TCC0: ERR reg %x", *((unsigned int *)0x02760120)); //DJDBG
 }
+#endif
 // .............................................................................
 // notes:
 //  . add control function to PORT table
@@ -149,7 +178,7 @@ Int  SAP_reclaim(DEV2_Handle);
 Int  SAP_shutdown(DEV2_Handle);
 Int  SAP_start(DEV2_Handle);
 Int  SAP_config(DEV2_Handle device, const SAP_Params *pParams);
-Int  SAP_EDMA_setupParam (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32 childEdma, unsigned int addr, unsigned int size);
+Int  SAP_EDMA_setupParam (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32 childEdma, XDAS_UInt32 addr, XDAS_UInt32 size);
 Int  SAP_EDMA_setupXfer (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32 parentEdma, XDAS_UInt32 childEdma, DEV2_Frame *pFrame);
 
 // .............................................................................
@@ -473,6 +502,9 @@ Int SAP_ctrl (DEV2_Handle device, Uns code, Arg arg)
     return result;
 } // SAP_ctrl
 
+int gSAPIdleShutdownIn=0;
+int gSAPIdleShutdownOut=0;
+
 // -----------------------------------------------------------------------------
 
 Int SAP_idle (DEV2_Handle device, Bool flush)
@@ -492,6 +524,10 @@ Int SAP_idle (DEV2_Handle device, Bool flush)
 
     // reset serial port -- stop generating sync events
     result = SAP_PORT_FTABLE_reset (device);
+    if(device->mode == DEV2_OUTPUT)
+       gSAPResetOut++;
+    else
+       gSAPResetIn++;
     if (result)
     {
         //TRACE_VERBOSE((&TR_MOD, "%s.%d: SAP_PORT_FTABLE_reset returned %d.\n", __FUNCTION__, __LINE__, result));
@@ -500,6 +536,11 @@ Int SAP_idle (DEV2_Handle device, Bool flush)
 
     pDevExt->shutDown = 0; // force shutdown to run
     result = SAP_FTABLE_shutdown (device);
+    if(device->mode == DEV2_OUTPUT)
+       gSAPIdleShutdownOut++;
+    else
+       gSAPIdleShutdownIn++;
+
     if (result)
     {
         //TRACE_VERBOSE((&TR_MOD, "%s.%d: SAP_FTABLE_shutdown returned %d.\n", __FUNCTION__, __LINE__, result));
@@ -583,7 +624,7 @@ Int SAP_start (DEV2_Handle device)
        // will be serviced and generate an interrupt even before the McASP is enabled.
        pDevExt->runState = 1;
        pDevExt->shutDown = 0;
-       //Log_info0 ("SAP_start runState=1 & ENABLE TRANSFERS");
+       Log_info1 ("SAP: %d, SAP_start runState=1 & ENABLE TRANSFERS", __LINE__);
        // enable interrupts and event servicing for this channel
        EDMA3_DRV_enableTransfer (hEdma, pDevExt->activeEdma, EDMA3_DRV_TRIG_MODE_EVENT);
 
@@ -600,7 +641,7 @@ Int SAP_start (DEV2_Handle device)
 } // SAP_start
 
 int gDmaParamsarray[17][3];
-int gDmaParamsidx=0;
+int gDmaParamsidx=0, gSAPSpecialCase=0;
 // -----------------------------------------------------------------------------
 
 Int SAP_issue (DEV2_Handle device)
@@ -668,8 +709,6 @@ Int SAP_issue (DEV2_Handle device)
     pFrame = Queue_dequeue (device->todevice);
     pParam = (SAP_EDMA_Param *) Queue_dequeue (Queue_handle(&pDevExt->paramQue));
 
-   /* if (pFrame->addr == NULL)
-               SW_BREAKPOINT; */
     if (pParam->hEdmaParam == NULL)
        Log_info0("SAP_issue: hEdma value is NULL");
     // set misc argument to pParam so get enqueue later
@@ -688,8 +727,8 @@ Int SAP_issue (DEV2_Handle device)
     pDevExt->numQueued += 1;
 
     result = SAP_EDMA_setupXfer (device, pParam->hEdmaParam, parentEdma, pDevExt->errorEdma, pFrame);
-    //Log_info4("SAP_issue.%d, EDMA_setupXfer: Target EDMA: 0x%x, Parent Edma: 0x%x Error Edma: 0x%x",
-    //                __LINE__, pParam->hEdma, parentEdma, pDevExt->errorEdma);
+    Log_info4("SAP_issue.%d, EDMA_setupXfer: Target EDMA: 0x%x, Parent Edma: 0x%x Error Edma: 0x%x",
+                    __LINE__, pParam->hEdmaParam, parentEdma, pDevExt->errorEdma);
 
     /*if ((device->mode != DEV2_INPUT) && (gDmaParamsidx <=16))
        {
@@ -705,10 +744,11 @@ Int SAP_issue (DEV2_Handle device)
 
     // special case enables when not yet started
     if (pDevExt->runState == 0) {
+       gSAPSpecialCase++;
         result = SAP_FTABLE_start (device);
         if (result) {
             //SAP_DMA_FTABLE_unlock (device);
-                 Hwi_enable ();
+                 Hwi_restore (key);
             return result;
         }
     }
@@ -751,16 +791,7 @@ void swapHdmi(Ptr Input, int size)
 
        }
 
-       Log_info3("SAP: Exiting swapHdmi with Frame->Addr: 0x%x, p1->addr: 0x%x, p2->addr: 0x%x ", (MdInt *)Input, p1, p2);
-
-       /**p2++ = 0xF872;
-       *p2++ = 0x4E1F;
-       *p2++ = 0x0016;
-       *p2++ = 0xEFF0;
-       *p2++ = 0x079E;
-       *p2++ = 0x0003;
-       *p2++ = 0x8401;
-       *p2++ = 0x0101; */
+       Log_info3("SAP: Exiting swapHdmi with Frame->Addr: 0x%x, p1->addr: 0x%x, p2->addr: 0x%x ", (xdc_IArg)Input, p1, p2);
 
        return;
 }
@@ -768,7 +799,6 @@ void swapHdmi(Ptr Input, int size)
 Int SAP_reclaim (DEV2_Handle device)
 {
     SAP_DeviceExtension *pDevExt = (SAP_DeviceExtension *)(device->object);
-    Int result, i, oldMask;
 #ifdef SAP_CACHE_SUPPORT
     DEV2_Frame *pFrame;
 #endif
@@ -784,6 +814,7 @@ Int SAP_reclaim (DEV2_Handle device)
 
     // idle if necessary
         if (pDevExt->errorState == PAF_SIO_ERROR_FATAL) {
+               Log_info1("SAP_reclaim: PAF_SIO_ERROR_FATAL,  Before Idle for device 0x%x  ", device->mode);
             DEV2_idle (device, 1);
             return SIO2_EBADIO;
         }
@@ -799,6 +830,7 @@ Int SAP_reclaim (DEV2_Handle device)
     }
     //Log_info1("SAP_reclaim: After SEM Pend for mode: 0x%x", device->mode);
 
+#if 0
     // return error (owner must idle)
     if (pDevExt->errorState == PAF_SIO_ERROR_FATAL)
     {
@@ -806,6 +838,7 @@ Int SAP_reclaim (DEV2_Handle device)
         //TRACE_TERSE((&TR_MOD, "SAP_reclaim.%d, PAF_SIO_ERROR_FATAL: 0x%x", __LINE__, pDevExt->errorState));
         return PAF_SIO_ERROR_FATAL;
     }
+#endif
 
 #ifdef SAP_CACHE_SUPPORT
     // invalidate CACHE region if input -- use clean since
@@ -819,18 +852,14 @@ Int SAP_reclaim (DEV2_Handle device)
         {
             Cache_inv (pFrame->addr, pFrame->size, Cache_Type_ALL, 0);
             Cache_wait();
-               //note: size here is in # of bytes, so incrementing by 4X32b words ( or 8X16b)
-                       //for(i=0; i<(pFrame->size)/(4*4); i+=16)
-                       //{
-                // Hwi_disable commented since it used to affect other interrupts
-                // max HWI disable duration ~1ms observed
-                   //oldMask = Hwi_disable ();
-                               swapHdmi(pFrame->addr, pFrame->size);
-                               //Hwi_restore(oldMask);
-
-                       Cache_wb (pFrame->addr, pFrame->size, Cache_Type_ALL, 0);
-                       Cache_wait();
-                       //}
+
+            // max HWI disable duration ~1ms observed
+            //unsigned int key = Hwi_disable ();                    // GJ: Revisit, along with other context protections here.
+            swapHdmi(pFrame->addr, pFrame->size);
+            //Hwi_restore(key);
+
+            Cache_wb (pFrame->addr, pFrame->size, Cache_Type_ALL, 0);
+            Cache_wait();
         }
     }
 
@@ -838,6 +867,7 @@ Int SAP_reclaim (DEV2_Handle device)
     /*if ((device->mode == DEV2_OUTPUT) && (pFrame->addr == NULL))
        SW_BREAKPOINT; */
 
+    Log_info1("SAP_reclaim: Exiting with SIO2_OK for device 0x%x  ", device->mode);
     //TRACE_VERBOSE((&TR_MOD, "SAP_reclaim.%d, exit SIO2_OK", __LINE__));
     return SIO2_OK;
 } // SAP_reclaim
@@ -1075,7 +1105,7 @@ Int SAP_shutdown (DEV2_Handle device)
     SAP_DeviceExtension *pDevExt = (SAP_DeviceExtension *)(device->object);
     SIO2_Handle stream = (SIO2_Handle) device;
     DEV2_Frame *pFrame;
-    Int result,i;
+    Int i;
     EDMA3_DRV_Handle hEdma;
     //TRACE_GEN((&TR_MOD, "SAP_shutdown.%d (0x%x)", __LINE__, device));
 
@@ -1116,6 +1146,7 @@ Int SAP_shutdown (DEV2_Handle device)
     // reset counter
     pDevExt->numQueued = 0;
 
+    //DJDBG_SAP_EDMA_dumpParams(1);
     // make sure active is linked to error
         EDMA3_DRV_linkChannel (hEdma, pDevExt->activeEdma, pDevExt->errorEdma);
 
@@ -1143,6 +1174,11 @@ Int SAP_shutdown (DEV2_Handle device)
 
 // -----------------------------------------------------------------------------
 int gSapWatchDogThrottle = 0; //DJDBG
+int gSapWatchDogIn =0;
+int gSapWatchDogOut = 0;
+int gSapWatchDogInSemPost = 0;
+int gSapWatchDogOutSemPost = 0;
+
 Void SAP_watchDog (Void)
 {
     DEV2_Handle device;
@@ -1160,10 +1196,9 @@ Void SAP_watchDog (Void)
 
     // protect context
     Task_disable (); // needed since we may call SEM_post
-    // Hwi_disable commented since it used to affect other interrupts
-    // max HWI disable duration ~4ms observed
     //oldMask = Hwi_disable ();
 
+
     //TRACE_VERBOSE((&TR_MOD, "%s.%d: devices loop, numDevices = %d", __FUNCTION__, __LINE__, dapDrv.numDevices));
 
     for (i=0; i < sapDrv.numDevices; i++) {
@@ -1187,6 +1222,11 @@ Void SAP_watchDog (Void)
             // set errorState which will force owner thread
             //   to clean up via SIO_idle()
             pDevExt->errorState = PAF_SIO_ERROR_FATAL;
+            if(device->mode == DEV2_INPUT)
+               gSapWatchDogIn++;
+            else
+                gSapWatchDogOut++;
+
             //TRACE_TERSE((&TR_MOD, "SAP_watchDog.%d, PAF_SIO_ERROR_FATAL: 0x%x", __LINE__, pDevExt->errorState));
            /* if(gSapWatchDogThrottle == 0) //DJDBG
             {
@@ -1196,10 +1236,17 @@ Void SAP_watchDog (Void)
             if(gSapWatchDogThrottle > 10) gSapWatchDogThrottle = 0; */
             // if outstanding pend then post to free owner thead
             if (!Semaphore_pend(pDevExt->sync, 0))
-                Semaphore_post (pDevExt->sync);
+            {
+               if(device->mode == DEV2_INPUT)
+                       gSapWatchDogInSemPost++;
+               else
+                       gSapWatchDogOutSemPost++;
+               Semaphore_post (pDevExt->sync);
+            }
         }
     }
 
+
     // renable interrupts and task manager.
     // If we posted to the semaphore then the TSK_enable call will lead to
     // an immediate task switch to the associated audio thread.
@@ -1225,8 +1272,8 @@ void SAP_isrCallback (Uint32 tcc, EDMA3_RM_TccStatus status, Ptr context)
 
     device = (DEV2_Handle) context;
     pDevExt = (SAP_DeviceExtension *)(device->object);
-    if (pDevExt->pParams == NULL)
-        return SIO2_EINVAL;
+    //if (pDevExt->pParams == NULL)
+        //return SIO2_EINVAL;
 
     if (pDevExt->pParams->sio.moduleNum == 0)
        hEdma = hEdma0;
@@ -1254,14 +1301,15 @@ void SAP_isrCallback (Uint32 tcc, EDMA3_RM_TccStatus status, Ptr context)
 
             // decrement count
             pDevExt->numQueued -= 1;
-            gIsrCnt++;
+            //gIsrCnt++;
             if (device->mode == 1)
-               gisrOutput++;
-
+               gIsrOutputCnt++;
+            else
+               gIsrInputCnt++;
             // place frame onto user queue and signal user thread
             Queue_enqueue (device->fromdevice, (Ptr) pFrame);
 
-            Log_info2("Before SEM_post for device: 0x%x gIsrOutput: %d", device->mode, gisrOutput);
+            //Log_info2("Before SEM_post for device: 0x%x gIsrOutput: %d", device->mode, gisrOutput);
             // signal user thread
             Semaphore_post (pDevExt->sync);
 #if 0
@@ -1280,7 +1328,10 @@ void SAP_isrCallback (Uint32 tcc, EDMA3_RM_TccStatus status, Ptr context)
 
         if (!(opt & EDMA3_DRV_OPT_TCINTEN_SET_MASK (1)))
         {
-               gIsrErrCnt++;
+               if (device->mode == 1)
+                       gIsrOutErrCnt++;
+               else
+                       gIsrInErrCnt++;
                pDevExt->errorState = PAF_SIO_ERROR_ERRBUF_XFER;
         }
 
@@ -1325,7 +1376,7 @@ Int SAP_EDMA_setupXfer (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32
     {
         Log_info0("pFrame has NULL address?");
     }
-    SAP_DMA_FTABLE_setupParam (device, targetEdma, childEdma, pFrame->addr, pFrame->size);
+    SAP_DMA_FTABLE_setupParam (device, targetEdma, childEdma, (XDAS_UInt32) pFrame->addr, pFrame->size);
 
     if (parentEdma != EDMA_HINV)
         EDMA3_DRV_linkChannel (hEdma, parentEdma, targetEdma);
@@ -1339,7 +1390,7 @@ Int SAP_EDMA_setupXfer (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32
 // -----------------------------------------------------------------------------
 // Configure EDMA3 parameter entry
 
-Int SAP_EDMA_setupParam (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32 childEdma, unsigned int addr, unsigned int size)
+Int SAP_EDMA_setupParam (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32 childEdma, XDAS_UInt32 addr, XDAS_UInt32 size)
 {
     SAP_DeviceExtension *pDevExt = (SAP_DeviceExtension *)device->object;
     EDMA3_DRV_Handle           hEdma;
@@ -1353,7 +1404,7 @@ Int SAP_EDMA_setupParam (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32
        else if (pDevExt->pParams->sio.moduleNum == 1 || pDevExt->pParams->sio.moduleNum == 2)
                hEdma = hEdma1;
     MCASP_Handle hPort = sapMcaspDrv.hPort[pDevExt->pParams->sio.moduleNum];
-    volatile Uint32 *base = (volatile Uint32 *)(hPort->baseAddr);
+   // volatile Uint32 *base = (volatile Uint32 *)(hPort->baseAddr);
 
    //Log_info3("%s.%d: Entered SAP_EDMA_setupParam for Target: 0x%x.\n", (xdc_IArg)__FUNCTION__, __LINE__, targetEdma);
 
@@ -1376,7 +1427,7 @@ Int SAP_EDMA_setupParam (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32
     }
     else {
        //edmaConfig.opt |= EDMA3_DRV_OPT_SAM_SET_MASK (EDMA3_DRV_ADDR_MODE_FIFO); //DJDBG!!!
-       //edmaConfig.opt |= 1;
+       edmaConfig.opt |= 1;
     }
 
     // if regular transfer then enable interrupt with tcc code
@@ -1403,38 +1454,39 @@ Int SAP_EDMA_setupParam (DEV2_Handle device, XDAS_UInt32 targetEdma, XDAS_UInt32
             edmaConfig.destAddr = addr;
             edmaConfig.destCIdx  = pDevExt->edmaWordSize * pDevExt->numSers ;
             if(pDevExt->edmaWordSize == 2)
-               edmaConfig.cCnt= (size)/((edmaConfig.aCnt * edmaConfig.bCnt)/2);        // GJ: Account for additional 2-bytes.
+               edmaConfig.cCnt= (size)/((edmaConfig.aCnt * edmaConfig.bCnt)/2);
         }
         else {
                //if(pDevExt->edmaWordSize == 2)
                //edmaConfig.srcAddr= (unsigned int)edmaConfig.srcAddr+ 2;
             edmaConfig.destBIdx = 0;
-            edmaConfig.destAddr = (unsigned int) &sap_OVER;
+            edmaConfig.destAddr = (unsigned int) &sap_OVER_4LANE;
+            edmaConfig.cCnt = 1;
         }
     }
     else {
         edmaConfig.destBIdx = 0;
+        edmaConfig.srcBIdx  = pDevExt->edmaWordSize;
         edmaConfig.destAddr = (unsigned int) (hPort->xbufAddr);
-
         if (addr) {
-            edmaConfig.srcBIdx  = pDevExt->edmaWordSize;
             edmaConfig.srcCIdx  = pDevExt->edmaWordSize * pDevExt->numSers ;
             edmaConfig.srcAddr  = addr;
-            Edma3_CacheFlush ((unsigned int) addr, (size+3)/4);
+            //Edma3_CacheFlush ((unsigned int) addr, (size+3)/4);
         }
         else {
             edmaConfig.srcBIdx  = 0;
             edmaConfig.srcAddr  = (unsigned int) &sap_UNDER[0];
 #if 1
             //edmaConfig.cCnt = (SAP_UNDER_LEN * sizeof(int))/(edmaConfig.aCnt * edmaConfig.bCnt); //DJDBG
-            edmaConfig.cCnt = 512; //DJDBG, if underrun have frame of silence
+            edmaConfig.cCnt = SAP_UNDER_LEN; //DJDBG, if underrun have frame of silence
 #endif
         }
     }
     edmaConfig.srcAddr  = (unsigned int) getGlobalAddr(edmaConfig.srcAddr);
     edmaConfig.destAddr  = (unsigned int) getGlobalAddr(edmaConfig.destAddr);
 
-    //Log_info3("SAP: Inside SAP_EDMA_setupParam with targetEdma = 0x%x linked to childEdma = 0x%x & dest-addr: 0x%x", targetEdma, childEdma, edmaConfig.destAddr);
+    Log_info5("SAP: Inside SAP_EDMA_setupParam with size=0x%x, targetEdma = 0x%x, CCNT = %d with dest-addr: 0x%x and OPT=0x%x", size, targetEdma, edmaConfig.cCnt, edmaConfig.destAddr, edmaConfig.opt);
+    Log_info5("SAP: Inside SAP_EDMA_setupParam with aCnt=0x%x, bCnt = 0x%x, destBIdx = 0x%x destCIdx: 0x%x and bCntReload=0x%x", edmaConfig.aCnt, edmaConfig.bCnt, edmaConfig.destBIdx, edmaConfig.destCIdx, edmaConfig.bCntReload);
 
     EDMA3_DRV_setPaRAM (hEdma, targetEdma, &edmaConfig);