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.

EVM6678l stuck on a routine CSL_EDMA3_GetHwStatus ().



Hi, 

We ran the example edma_test located at: pdk_c6678_1_0_0_6_beta1/packages/ti/csl/example/edma
1. Under the simulator is running correctly.
2. Run EVM6678 card is stuck on a routine CSL_EDMA3_GetHwStatus ().

Naftali

  • We tried to run includes MCSDK BETA2 update without any improvement.
    We wait for several days without any response, is there any problem with the question?
    Waiting for any response ...

    Naftali

  • Hi,

    There are couple of problems in the example which we will fix in next BIOS-MCSDK drop. I am sendin the details in case if you would like to try the fix before getting the release.

    1) Incorrect Event Queue assignement for EDMA Instance: 0

    FIrst EDMA instance in the case of C6678 has 2  transfer controllers and 2 event queues. In the test it is trying to assign queue 3 which is fine in the case of second and third EDMA instance.  However it is incorrect in the case of instance 0. Here are the details of change:

    Function:edma_ping_pong_xfer_gbl_region()

    Current code:

    if (CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_1) != CSL_SOK)

    Modified code:

    ************

    if(!instNum)
        {
            /* For first EDMA instance there are only 2 TCs and 2 event queues
             * Modify the channel default queue setup from 0 to 1
             */
             if (CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_1) != CSL_SOK)
            {
                printf ("Error: EDMA channel setup queue failed\n");   
                return -1;
            }
        }
        else
        {
            /* For EDMA instance 1 and 2 maximum of 4 TCs and 4 event queues are supported
             * Change Channel Default queue setup from 0 to 3 
             */
            if (CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_3) != CSL_SOK)
            {
                printf ("Error: EDMA channel setup queue failed\n");   
                return -1;
            }

    ************

    2) Cache invalidation for buffers being placed in MSMC or DDR.

    This will be applicable if  .far section is in MSMC containing source and destination buffers. Before validating the buffer content, cache would need to be invalidated. See details on invalidation sequence:

    Include cache related API access to the file by:

    #include <ti/csl/csl_cacheAux.h>

    Function: Verify_Transfer ()

    Add following lines in beginning of the function:

        Uint16      key;


        /* Invalidate the cache before verification */
        /* Disable Interrupts */
        key = _disable_interrupts();
        CACHE_invL1d ((void *)srcBuff, 512, CACHE_WAIT);
        CACHE_invL2 ((void *)srcBuff, 512, CACHE_WAIT);
        CACHE_invL1d ((void *)dstBuff, 512, CACHE_WAIT);
        CACHE_invL2 ((void *)dstBuff, 512, CACHE_WAIT);
        _mfence();
        /* Re-enable Interrupts. */
        _restore_interrupts(key);

    Best Regards

    Raghu