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.

Keystone II - Linux interface to FFT Coprocessor

Hello,

we are trying to implement a LTE processing chain on our Keystone II Kepler board.

Therefore we want use the DSP cores for processing only and the ARM cores for controlling.

Is it possible to access the FFT coprocessor and the Antenna Interface (AIF2) from ARM cores running Linux, without the need of interacting with DSPs?

Kind regards,

Tobias Jaeuthe

  • Welcome to the TI E2E forum. I hope you will find many good answers here and in the TI.com documents and in the TI Wiki Pages (for processor issues). Be sure to search those for helpful information and to browse for the questions others may have asked on similar topics (e2e.ti.com). Please read all the links below my signature.

     

    Is it possible to access the FFT coprocessor and the Antenna Interface (AIF2) from ARM cores running Linux, without the need of interacting with DSPs?


    Yes. It is possible.

    Thank you.

  • Well, for the start  that sounds good.


    Maybe I should tell you our problems running FFTC on ARM and you could provide some information how to deal with it correctly.

    At first there is no Linux library for FFTC available in mcsdk_linux_3_00_04_18/  and an ARM build is not supported in  pdk_keystone2_3_00_04_18/ .

    I've compiled one for ARM by adapting the QMSS build for FFTC.



    When using the FFTC example from C66x for ARM (see code beneath), I get a segmentation fault occurs when calling fftc_init().

    /* Initialize FFTC driver */
        Fftc_GlobalCfg      		fftcGlobalCfg;
        Fftc_DeviceCfg              fftcDevCfg;
    
        Fftc_RetVal             retVal;
    
        int txQueueIx;
        int coreNum = 0;
    
    
        /* Set up the FFTC Configuration Register */
        for (txQueueIx = 0; txQueueIx < FFTC_MAX_NUM_TXQUEUES; txQueueIx ++)
        {
            fftcGlobalCfg.queueFlowidOverwrite [txQueueIx]   =   0;
            fftcGlobalCfg.queuePriority [txQueueIx]          =   0;
        }
        fftcGlobalCfg.starvationPeriodVal            =   0x0;
        fftcGlobalCfg.bDisableFFT                    =   0;
    
        /* Initialize FFTC driver for instance number specified. */
         fftcDevCfg.cpdmaNum     =   Cppi_CpDma_FFTC_A_CPDMA;
         fftcDevCfg.baseQueueNum =   QMSS_FFTC_A_QUEUE_BASE;
         fftcDevCfg.cfgRegs      =   (void *) (CSL_FFTC_0_CFG_REGS);
         retVal = Fftc_init (fftcInstNum, &fftcGlobalCfg, &fftcDevCfg);
         if (retVal == FFTC_RETVAL_SUCCESS)
         {
             System_printf ("[Core %d]: FFTC instance %d successfully initialized \n", coreNum, fftcInstNum);
         }
         else
         {
             System_printf ("[Core %d]: FFTC init failed on instance %d \n", coreNum, fftcInstNum);
             return -1;
         }
    



    TI doesn't provide any examples for FFTC on ARM.

    What exactly do I have to do to get it to work?

    Kind regards,

    Tobias Jaeuthe

    
    

  • Hi,

       Although AIF2 and FFTC are accessible from ARM, currently there is no support for that beyond the CSL layer.

    Sudhanand

  • Ok I understand thank you,

    but one last question:

    When I program the FFTC from ARM via CSL Layer do I still need a Linux driver for FFTC?

    Because there does not exist a driver for FFTC yet.

    Regards,

    Tobias Jaeuthe

  • Hi Tobias Jaeuthe,
    Your understanding is correct. The CSL layer contains the Register overlay structure and field definition macros for FFTC.

    You can write your own user space driver or kernel space driver to configure the FFTC peripheral.

    Thank you.