]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/aif2-lld.git/commitdiff
adding support for LTE40 in ltecheckrf and OBSAI in wcdmacheckrf
authorSebastien Tomas <s-tomas@ti.com>
Wed, 1 Oct 2014 12:17:43 +0000 (14:17 +0200)
committerSebastien Tomas <s-tomas@ti.com>
Wed, 1 Oct 2014 12:17:43 +0000 (14:17 +0200)
AIF_defs.h
config.bld
docs/aif2lldDocs.chm
package.xdc
src/AIF_calcParam.c
src/AIF_init.c
test/cpricheckrf/ltecheckrf.c
test/cpricheckrf/wcdmacheckrf.c

index d9606f321f668eeefe88010328b6e92e51e2878c..ab504083461fd44e6780e033cc65ba6d072248e7 100644 (file)
@@ -180,6 +180,7 @@ extern "C" {
 #define AIF2_LTE10_FFT_SIZE                                    1024\r
 #define AIF2_LTE5_FFT_SIZE                                     512\r
 #define AIF2_LTE1P4_FFT_SIZE                           128\r
+#define AIF2_LTE40_FFT_SIZE                                    4096\r
 \r
 #define AIF2_LTE20_CYPRENORMAL1_SIZE           160\r
 #define AIF2_LTE20_CYPRENORMAL_SIZE                    144\r
@@ -196,6 +197,9 @@ extern "C" {
 #define AIF2_LTE1P4_CYPRENORMAL1_SIZE          10\r
 #define AIF2_LTE1P4_CYPRENORMAL_SIZE           9\r
 #define AIF2_LTE1P4_CYPREEXTENDED_SIZE         32\r
+#define AIF2_LTE40_CYPRENORMAL1_SIZE           320\r
+#define AIF2_LTE40_CYPRENORMAL_SIZE                    288\r
+#define AIF2_LTE40_CYPREEXTENDED_SIZE          1024\r
 \r
 /** missing parameters from the AIF2 CSL*/\r
 #define AIF2_BASE_TX_QUE_NUM           512\r
@@ -384,6 +388,8 @@ typedef enum {
                        AIF_SRATE_23P04MHZ , \\r
                        /**  Sampling rate 30.72MHz*/\r
                        AIF_SRATE_30P72MHZ , \\r
+                       /**  Sampling rate 61.44MHz*/\r
+                       AIF_SRATE_61P44MHZ , \\r
                        AIF_SRATE_MAX    }AIF_SampleRate;\r
 \r
 /**\r
index 56e46bb52b101a221b4bd6f8290cc4163e6c96a1..48fe07f46fda5b7c8952126b60a99ae3dbe93298 100644 (file)
@@ -24,7 +24,7 @@ var aif2DriverPath = new java.io.File(".//").getPath();
 var aif2LLDPartNumber = java.lang.System.getenv("SOC_FAMILY");\r
 \r
 /* Configure the AIF2 Socket Release Version Information */\r
-var aif2DriverReleaseVersion = [01,01,00,03];\r
+var aif2DriverReleaseVersion = [01,01,00,04];\r
 \r
 var pkgName = Pkg.name;\r
 \r
index b64ca3491221643d488217120f8c4eeb51d3138c..18e3aa5b816a9b9d85a2b87bc0038d98ff1cd163 100644 (file)
Binary files a/docs/aif2lldDocs.chm and b/docs/aif2lldDocs.chm differ
index 36914c9c8a1cdb64a726b356a2b073621f394bea..a2eb3a559f77d3e9419fd656290a17fa66beb3d3 100644 (file)
@@ -12,7 +12,7 @@
 requires ti.drv.cppi;\r
 requires ti.drv.qmss;\r
 \r
-package ti.drv.aif2[1, 1, 0, 03] {\r
+package ti.drv.aif2[1, 1, 0, 04] {\r
     module Settings;\r
 }\r
 \r
index bd36d1cea50990284120a101447abc07d3c6800a..738ed6415bb306ca90acd544e6171b4d4a4ad0bc 100644 (file)
@@ -69,6 +69,7 @@ AIF_LinkConfigHandle aifConfig = &(hAif->linkConfig[linkIndex]);
                        if (aifConfig->sampleRate  == AIF_SRATE_15P36MHZ) aifConfig->numPeAxC= aifConfig->linkRate*4*256*15/15360;\r
                        if (aifConfig->sampleRate  == AIF_SRATE_23P04MHZ) aifConfig->numPeAxC= aifConfig->linkRate*4*256*15/30720; // same as LTE20\r
                        if (aifConfig->sampleRate  == AIF_SRATE_30P72MHZ) aifConfig->numPeAxC= aifConfig->linkRate*4*256*15/30720;\r
+                       if (aifConfig->sampleRate  == AIF_SRATE_61P44MHZ) aifConfig->numPeAxC= aifConfig->linkRate*4*256*15/61440;\r
                }\r
                if (hAif->mode == AIF_LTE_WCDMA_MODE)\r
                {\r
@@ -81,6 +82,7 @@ AIF_LinkConfigHandle aifConfig = &(hAif->linkConfig[linkIndex]);
                                if (aifConfig->sampleRate  == AIF_SRATE_15P36MHZ) aifConfig->numPeAxC= aifConfig->linkRate*4*256*15/15360;\r
                                if (aifConfig->sampleRate  == AIF_SRATE_23P04MHZ) aifConfig->numPeAxC= aifConfig->linkRate*4*256*15/30720;  // same as LTE20\r
                                if (aifConfig->sampleRate  == AIF_SRATE_30P72MHZ) aifConfig->numPeAxC= aifConfig->linkRate*4*256*15/30720;\r
+                               if (aifConfig->sampleRate  == AIF_SRATE_61P44MHZ) aifConfig->numPeAxC= aifConfig->linkRate*4*256*15/61440;\r
                        }\r
                }\r
 \r
index 68a74a20e1179af4ce4a47d1d248adf4d26de41d..af3d0899431a8dded1eeb0de2015d799e80f7913 100644 (file)
@@ -1166,6 +1166,7 @@ void AIF_initHw(
                                        if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_15P36MHZ) dbmxPd               = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/15360);\r
                                        if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_23P04MHZ) dbmxPd               = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/30720); // same as LTE15\r
                                        if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_30P72MHZ) dbmxPd               = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/30720);\r
+                                       if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_61P44MHZ) dbmxPd               = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/61440);\r
                                } else {\r
                                        dbmxPd      = hAif->linkConfig[i].numPdAxC;\r
                                }\r
@@ -1181,6 +1182,7 @@ void AIF_initHw(
                                                if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_15P36MHZ) dbmxPd               = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/15360);\r
                                                if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_23P04MHZ) dbmxPd               = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/30720); // same as LTE15\r
                                                if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_30P72MHZ) dbmxPd               = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/30720);\r
+                                               if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_61P44MHZ) dbmxPd               = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/61440);\r
                                        }\r
                                        else\r
                                                dbmxPd      = hAif->linkConfig[i].numPdAxC;\r
@@ -1389,6 +1391,7 @@ void AIF_initHw(
                                                if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_15P36MHZ) dbmxPe[i]            = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/15360);\r
                                                if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_23P04MHZ) dbmxPe[i]            = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/30720); // same as LTE20\r
                                                if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_30P72MHZ) dbmxPe[i]            = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/30720);\r
+                                               if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_61P44MHZ) dbmxPe[i]            = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/61440);\r
                                }\r
 \r
                                if (hAif->mode == AIF_LTE_WCDMA_MODE)\r
@@ -1400,6 +1403,7 @@ void AIF_initHw(
                                                if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_15P36MHZ) dbmxPe[i]            = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/15360);\r
                                                if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_23P04MHZ) dbmxPe[i]            = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/30720); // same as LTE20\r
                                                if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_30P72MHZ) dbmxPe[i]            = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/30720);\r
+                                               if (hAif->linkConfig[i].sampleRate  == AIF_SRATE_61P44MHZ) dbmxPe[i]            = _bitc32(hAif->linkConfig[i].maskPattern[0]) * (hAif->linkConfig[i].linkRate*4*256*15/61440);\r
                                        } else {\r
                                                if ((CSL_AIF2_DATA_WIDTH_16_BIT==hAif->linkConfig[i].outboundDataWidth)||\r
                                                        (CSL_AIF2_DATA_WIDTH_8_BIT==hAif->linkConfig[i].outboundDataWidth))\r
@@ -1673,6 +1677,12 @@ void AIF_initHw(
                                        FrameMsg2       = AIF2_LTE20_FFT_SIZE + AIF2_LTE20_CYPREEXTENDED_SIZE;\r
                                        totalAxC    = linkRate*4*256*15/30720;\r
                                }\r
+                               if (sampleRate == AIF_SRATE_61P44MHZ) {\r
+                                       FrameMsg1       = AIF2_LTE40_FFT_SIZE + AIF2_LTE40_CYPRENORMAL1_SIZE;\r
+                                       FrameMsg        = AIF2_LTE40_FFT_SIZE + AIF2_LTE40_CYPRENORMAL_SIZE;\r
+                                       FrameMsg2       = AIF2_LTE40_FFT_SIZE + AIF2_LTE40_CYPREEXTENDED_SIZE;\r
+                                       totalAxC    = linkRate*4*256*15/61440;\r
+                               }\r
 \r
                                if (superPacket == 0){\r
                                        if (lte1_4 == 1)\r
@@ -1974,6 +1984,11 @@ void AIF_initHw(
                                        FrameMsg        = AIF2_LTE20_FFT_SIZE + AIF2_LTE20_CYPRENORMAL_SIZE;\r
                                        FrameMsg2       = AIF2_LTE20_FFT_SIZE + AIF2_LTE20_CYPREEXTENDED_SIZE;\r
                                }\r
+                               if (sampleRate == AIF_SRATE_61P44MHZ) {\r
+                                       FrameMsg1       = AIF2_LTE40_FFT_SIZE + AIF2_LTE40_CYPRENORMAL1_SIZE;\r
+                                       FrameMsg        = AIF2_LTE40_FFT_SIZE + AIF2_LTE40_CYPRENORMAL_SIZE;\r
+                                       FrameMsg2       = AIF2_LTE40_FFT_SIZE + AIF2_LTE40_CYPREEXTENDED_SIZE;\r
+                               }\r
 \r
                                if (CSL_AIF2_LINK_PROTOCOL_CPRI==hAif->protocol){\r
                                        if (sampleRate == AIF_SRATE_1P92MHZ)\r
index 041b9ba43d0f537b311c75e9a484cb73a8e0643f..d90cdf1a56810b4201efcd0de5de95ac6f3ef7c6 100644 (file)
 #define     SAMP_FREQ_FLOAT     15.36  // LTE10 sample rate
 #elif LTE_RATE == 5
 #define     SAMP_FREQ_FLOAT     7.68   // LTE5 sample rate
+#elif LTE_RATE == 40
+#define     SAMP_FREQ_FLOAT     61.44  // LTE5 sample rate
 #else
 #error                 "LTE_RATE not valid."
 #endif
 #define     NBCHANNELMAXPERLINK 4      // Max number of AxCs per link
 #elif LTE_RATE == 5
 #define     NBCHANNELMAXPERLINK 8      // Max number of AxCs per link
+#elif LTE_RATE == 40
+#define     NBCHANNELMAXPERLINK 1      // Max number of AxCs per link
 #endif
 #if SPECIAL_SEQUENCE == 2 || SPECIAL_SEQUENCE == 3
 #define     NBCHANNELPERLINK   NBCHANNELMAXPERLINK     // Number of AxCs in use per link (fixed to max for this rf test)
 #else
+#if LTE_RATE == 40
+#define     NBCHANNELPERLINK   1                       // Number of AxCs in use per link (fixed to 1)
+#else
 #define     NBCHANNELPERLINK   2                       // Number of AxCs in use per link (fixed to 2)
 #endif
+#endif
 #define     NBSYMBOL                   AIF2_LTE_SYMBOL_NUM     // Number of symbols per slot
 #if LTE_RATE == 20
 #define                LTESYMBOLSIZE           ((AIF2_LTE20_FFT_SIZE+AIF2_LTE20_CYPRENORMAL1_SIZE)*4 + 16)    // 8848: FFT size + CP first
 #define                FFT_SIZE                        AIF2_LTE5_FFT_SIZE
 #define                CYPRENORMAL1_SIZE       AIF2_LTE5_CYPRENORMAL1_SIZE
 #define                CYPRENORMAL_SIZE        AIF2_LTE5_CYPRENORMAL_SIZE
+#elif LTE_RATE == 40
+#define                LTESYMBOLSIZE           ((AIF2_LTE40_FFT_SIZE+AIF2_LTE40_CYPRENORMAL1_SIZE)*4 + 16)
+#define        LTESYMBOL2SIZE          ((AIF2_LTE40_FFT_SIZE+AIF2_LTE40_CYPRENORMAL_SIZE)*4 + 16)
+#define                FFT_SIZE                        AIF2_LTE40_FFT_SIZE
+#define                CYPRENORMAL1_SIZE       AIF2_LTE40_CYPRENORMAL1_SIZE
+#define                CYPRENORMAL_SIZE        AIF2_LTE40_CYPRENORMAL_SIZE
 #endif
 
 #ifdef SUPERPACKET
 #define                NBDESCMAX                       (128*NB_LINKS)          // Descriptor count rounded to the next power of 2
 #elif LTE_RATE == 5
 #define                NBDESCMAX                       (256*NB_LINKS)          // Descriptor count rounded to the next power of 2
+#elif LTE_RATE == 40
+#define                NBDESCMAX                       (32*NB_LINKS)          // Descriptor count rounded to the next power of 2
 #endif
 #endif
 #define                MAX_DEBUG_SLOT          400                     // For debug, size of monitoring arrays
 #define        FREQ                            1.0
 #define     PEAK_LOC_2MHZ              (FFT_SIZE/SAMP_FREQ_FLOAT*FREQ*2) // Used for peak detection after fft on Rx symbols  - 2048/30.72*2MHz, same for Lte5 or Lte10
 #define        PEAK_LOC_1MHZ           (FFT_SIZE/SAMP_FREQ_FLOAT*FREQ)   // Used for peak detection after fft on Rx symbols  - 2048/30.72*1MHz, same for Lte5 or Lte10
+#if LTE_RATE == 40
+#define                N   (4096)                                                                                        // Used for twiddle factor generation
+#else
 #define                N   (2048)                                                                                        // Used for twiddle factor generation
+#endif
 #define        PAD (16)                                                                                          // Used for twiddle factor generation
 
 #define SLOT_NUM_FIRST_PUSH    100                     // The first push needs to happen on the last slot number before frame boundary
@@ -405,6 +425,8 @@ volatile TestObj                     testObjTab[TEST_NUM] = {
          "LTE_RELAY_10MHZ_RF_SINGLE_TONE", // test name
 #elif LTE_RATE == 5
          "LTE_RELAY_5MHZ_RF_SINGLE_TONE", // test name
+#elif LTE_RATE == 40
+         "LTE_RELAY_40MHZ_RF_SINGLE_TONE", // test name
 #endif
         // link0          link1          link2          link3          link4          link5
          {0,             0,             0,             1,             0,             0            },  // link enable
@@ -422,6 +444,8 @@ volatile TestObj                     testObjTab[TEST_NUM] = {
          "LTE_RELAY_10MHZ_RF_SINGLE_TONE", // test name
 #elif LTE_RATE == 5
          "LTE_RELAY_5MHZ_RF_SINGLE_TONE", // test name
+#elif LTE_RATE == 40
+         "LTE_RELAY_40MHZ_RF_SINGLE_TONE", // test name
 #endif
         // link0          link1          link2          link3          link4          link5
          {1,             0,             0,             0,             0,             0            },  // link enable
@@ -819,6 +843,7 @@ void slotIsr()
        if ((slotcount < (SLOT_NUM_DATA_CHECK-1)) || (testInfo.never_end == 1))
        {
 #if SPECIAL_SEQUENCE == 0
+#if LTE_RATE != 40
                // Run-time RF checks
                if (rxCheckCnt == 0)
                {
@@ -869,6 +894,7 @@ void slotIsr()
                        }
                }
 #endif         
+#endif
                rxCheckCnt++;
                if (rxCheckCnt == NBSYMBOL) {
                        rxCheckCnt = 0;
@@ -933,6 +959,8 @@ int main(void)
        return(0);
 #endif
 
+       TSCL = 0;
+
     /* Make shared memory (MSM) non cacheable for the purpose of testing */
     CSL_XMC_invalidatePrefetchBuffer();
     CACHE_setMemRegionInfo(12,1,0); // MAR12 - cacheable (always), not prefetchable
@@ -1167,12 +1195,15 @@ int main(void)
 #if LTE_RATE == 20
                                 aifObj.linkConfig[i].sampleRate                 = AIF_SRATE_30P72MHZ;
                                 aifObj.linkConfig[i].cpriPackMode       = AIF2_LTE_CPRI_8b8;
-#elif LTE_RATE ==10
+#elif LTE_RATE == 10
                                 aifObj.linkConfig[i].sampleRate                 = AIF_SRATE_15P36MHZ;
                                 aifObj.linkConfig[i].cpriPackMode       = AIF2_LTE_CPRI_4b4;
-#elif LTE_RATE ==5
+#elif LTE_RATE == 5
                                 aifObj.linkConfig[i].sampleRate                 = AIF_SRATE_7P68MHZ;
                                 aifObj.linkConfig[i].cpriPackMode       = AIF2_LTE_CPRI_2b2;
+#elif LTE_RATE == 40
+                                aifObj.linkConfig[i].sampleRate                 = AIF_SRATE_61P44MHZ;
+                                aifObj.linkConfig[i].cpriPackMode       = AIF2_LTE_CPRI_1b1;
 #endif
                                 aifObj.linkConfig[i].outboundDataType   = testObjTab[ntest].outboundDataType[i];
                                 aifObj.linkConfig[i].outboundDataWidth  = testObjTab[ntest].outboundDataWidth[i];
@@ -1944,6 +1975,8 @@ int main(void)
     printf("Test: ending AIF2 LTE 10MHz RF test \n");
 #elif LTE_RATE == 5
     printf("Test: ending AIF2 LTE 5MHz RF test \n");
+#elif LTE_RATE == 40
+    printf("Test: ending AIF2 LTE 40MHz RF test \n");
 #endif
 
     if (aifObj.aif2EeCount.eeFlag != 0) testcheck++;
index 075a571e562ec25dd10ba6072df4fa48918f3194..d50570d17e764e628a1d254cb108e1e99f3a37a4 100644 (file)
@@ -47,6 +47,8 @@
 #include <ti/csl/src/intc/csl_intc.h>
 #include <ti/csl/cslr_tmr.h>
 #include <ti/csl/csl_tmrAux.h>
+#include <ti/csl/csl_cache.h>
+#include <ti/csl/csl_cacheAux.h>
 
 #include <ti/drv/aif2/aif2.h>
 #include <ti/drv/cppi/cppi_drv.h>
 
 #define        _CSL_AIF2_DUMP          0       // Enable the DUMP of the AIF configuration, for debug purposes
 
+// #define     OBSAI
+
 //Value for Sin calculation
 #if CPRI_RELAY_CFG == 2
 #define     Q_FACTOR            8191
 #endif
 #define                DUAL_CARRIER_SUPPORT 1                                                          // Enabled - requires dual carrier firmware
 #define     DIO_0               CSL_AIF2_DIO_ENGINE_0                  // selects AIF2 DIO engine to be used - 0 is default
+#ifndef OBSAI
 #define        NUM_AxC                         4                                                               // Defines the number of Wcdma AxCs to be used in this test
+#else
+#define        NUM_AxC                         16                                                              // Defines the number of Wcdma AxCs to be used in this test
+#endif
 #define                DIO_DMA_QW                      4                                                               // Num of 32-bit words in one quadword
 #define                DIO_DMA_NUM_BLOCKS      2400                                                    // selects the size of the dio circular buffers in quadwords x NUM_AxC
 #define                DIO_BUFFER_SIZE_AXC     (DIO_DMA_NUM_BLOCKS*DIO_DMA_QW) // Computes the size of buffer for one AxC in 32-bit words
 #define                N                               (2048)                                                  // Used for twiddle factor generation
 #define        PAD                             (16)                                                    // Used for twiddle factor generation
 #define        RX_SUCCESS_CNT          (800*NUM_AxC)                                   // Define a number of consecutive runtime RF check success prior to monitoring runtime failures
+#ifndef OBSAI
 #if CPRI_RELAY_CFG == 2
 #define                FRAME_NUM_DATA_CHECK 7500                                                       //calculated from the LTE RF test (150000 slots = 7500 frames).
 #else
 #define                FRAME_NUM_DATA_CHECK 500                                                        // random value, Loopback test no need to wait for Radio On to be active (Cpri relay setup).
 #endif
+#else
+#define                FRAME_NUM_DATA_CHECK 500                                                        // random value, Loopback test no need to wait for Radio On to be active (Cpri relay setup).
+#endif
 #define                DISABLE_AXC_TRANSMISSION        0                                               // Can be used to test AIF2LLD AIF_disablePeCh() APIs - Once disabled, zeros are inserted for this particular AxC
 #define                DISABLE_AXC_RECEPTION           0                                               // Can be used to test AIF2LLD AIF_disablePeCh() APIs - Once disabled, non-zero stale data is kept for this particular AxC
 
@@ -271,7 +283,11 @@ volatile unsigned int swSync        = 0;
 
 volatile TestObj                     testObjTab[CPRIRELAY_CONFIG_NUM] = {
        {//CPRI_RELAY_CFG = 1 or DL traffic configuration (DSP_2)
+#ifndef OBSAI
       "CPRI_RELAY_DL_TEST", // test name
+#else
+      "OBSAI_DL_TEST", // test name
+#endif
       // link0          link1          link2          link3          link4          link5
       {1,             0,             0,             1,             0,             0            },  // link enable
       {4,             4,             4,             4,             4,             4            },  // link rate
@@ -282,7 +298,11 @@ volatile TestObj                     testObjTab[CPRIRELAY_CONFIG_NUM] = {
          {DIO_0,         DIO_0,         DIO_0,         DIO_0,         DIO_0,         DIO_0},          // dio engine
        },
        {//CPRI_RELAY_CFG = 2 or CPRI relay configuration (DSP_2) - used when exercising RF path
+#ifndef OBSAI
       "WCDMA_CPRI_RELAY_SW", // test name
+#else
+      "WCDMA_OBSAI_SW", // test name
+#endif
       // link0          link1          link2          link3          link4          link5
       {1,             0,             0,             1,             0,             0            },  // link enable
       {4,             4,             4,             4,             4,             4            },  // link rate
@@ -304,8 +324,10 @@ Int16   twiddleFacts[2*N + 2*PAD];
  *     Buffers used to send and receive antenna IQ samples
  *     To be kept in LL2 to enable HW cache coherency
  */
+#pragma DATA_SECTION (dio_data, ".dioData");
 #pragma DATA_ALIGN (dio_data, 16);
 Uint32   dio_data[NUM_AxC][DIO_BUFFER_SIZE_AXC];
+#pragma DATA_SECTION (dio_result, ".dioData");
 #pragma DATA_ALIGN (dio_result, 16);
 Uint32   dio_result[NUM_AxC][DIO_BUFFER_SIZE_AXC];
 
@@ -436,11 +458,15 @@ int main(void)
        return(0);
 #endif
 
+#ifndef OBSAI
 #if CPRI_RELAY_CFG == 0 || CPRI_RELAY_CFG == 1
     printf("Beginning AIF2 WCDMA CPRI relay Software testing\n");
 #else
     printf("Starting AIF2 WCDMA CPRI relay Software\n");
 #endif
+#else
+    printf("Beginning AIF2 WCDMA OBSAI Software testing\n");
+#endif
 
     UTILS_waitForHw(100000);
 
@@ -482,7 +508,11 @@ int main(void)
        // General parameters
        memset(&aifObj, 0, sizeof(aifObj));
        aifObj.aif2ClkSpeedKhz    = (Uint32)SYSCLK_INPUT_KHZ;
+#ifndef OBSAI
        aifObj.protocol           = CSL_AIF2_LINK_PROTOCOL_CPRI;
+#else
+       aifObj.protocol           = CSL_AIF2_LINK_PROTOCOL_OBSAI;
+#endif
        aifObj.pktdmaOrDioEngine  = CSL_AIF2_DIO;
        aifObj.mode               = AIF_WCDMA_MODE;
        if (swSync == 0)
@@ -625,6 +655,7 @@ int main(void)
                {
                        getcomplex((Complex16*) &dio_data[chan][idx],idx,chan);
                }
+               CACHE_wbInvL1d((void *)(dio_data[chan]), (numBlock/2 * NUM_AxC * numWord)*4, CACHE_WAIT);
        }
 
        /* Fft software initialization */
@@ -721,6 +752,7 @@ int main(void)
        for (chan=0;chan<aifObj.linkConfig[activeLink].numPdAxC;chan++)
 #endif
        {
+               CACHE_invL1d((void *)dio_result[chan], (FFT_SIZE*4), CACHE_WAIT);
 #if CPRI_RELAY_CFG == 2
                BufferConvertion(dio_result[chan], rxBuffer[0], FFT_SIZE);
 #else
@@ -758,7 +790,11 @@ int main(void)
 #endif
 
        if (testpass != 0) {
+#ifndef OBSAI
                printf(" DIO CPRI Data for WCDMA AxC0 or AxC1 or AxC2 or AxC3: FAIL\n");
+#else
+               printf(" DIO OBSAI Data for WCDMA: FAIL\n");
+#endif
                testcheck++;
        }
 
@@ -790,7 +826,11 @@ int main(void)
 
        if (testpass == 0) {
                if (DSP_procId == 1) {
+#ifndef OBSAI
                        printf("Test success: stopping AIF2 WCDMA CPRI relay test\n");
+#else
+                       printf("Test success: stopping AIF2 WCDMA OBSAI test\n");
+#endif
                }
                if (DSP_procId == 2) {
                        printf("Ending AIF2 WCDMA CPRI relay Software\n");