summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Mouchard2015-04-02 12:01:52 -0500
committerBenjamin Mouchard2015-04-02 12:01:52 -0500
commit7a92c0fd32de8edf983a28c80a06214c7ee11bcd (patch)
treed6b4f4996113395b2f79ee41f7794ed57f4ef3c7
parent94017e30c87853e48f6e947186c5075289b190c6 (diff)
downloadiqn2-lld-7a92c0fd32de8edf983a28c80a06214c7ee11bcd.tar.gz
iqn2-lld-7a92c0fd32de8edf983a28c80a06214c7ee11bcd.tar.xz
iqn2-lld-7a92c0fd32de8edf983a28c80a06214c7ee11bcd.zip
add support for lte dio mode
-rw-r--r--include/IQN2_defs.h4
-rw-r--r--src/iqn2lld/IQN2_init.c418
-rw-r--r--test/utils/wcdmaUtils.c26
-rw-r--r--test/utils/wcdmaUtils.h1
4 files changed, 277 insertions, 172 deletions
diff --git a/include/IQN2_defs.h b/include/IQN2_defs.h
index a516f48..4630a8e 100644
--- a/include/IQN2_defs.h
+++ b/include/IQN2_defs.h
@@ -720,6 +720,8 @@ typedef struct IQN2_DioEventObj{
720 uint32_t numCtlChannel; 720 uint32_t numCtlChannel;
721 /** Holds the AID2 SI delay on this Aid */ 721 /** Holds the AID2 SI delay on this Aid */
722 uint32_t siDelay; 722 uint32_t siDelay;
723 /** Setup the LTE traffic to use DIO instead of PKTDMA */
724 uint32_t lteDio;
723 } IQN2_AidConfigObj, *IQN2_AidConfigHandle; 725 } IQN2_AidConfigObj, *IQN2_AidConfigHandle;
724 726
725/** 727/**
@@ -757,6 +759,8 @@ typedef struct IQN2_DioEventObj{
757 uint32_t rsaOn; 759 uint32_t rsaOn;
758 /** Set Egress UL traffic */ 760 /** Set Egress UL traffic */
759 uint32_t egRsaOn; 761 uint32_t egRsaOn;
762 /** Set if dio is used for LTE or WCDMA */
763 uint32_t lteMode;
760 } IQN2_DioConfigObj, *IQN2_DioConfigHandle; 764 } IQN2_DioConfigObj, *IQN2_DioConfigHandle;
761 765
762/** 766/**
diff --git a/src/iqn2lld/IQN2_init.c b/src/iqn2lld/IQN2_init.c
index 207326c..e43cb67 100644
--- a/src/iqn2lld/IQN2_init.c
+++ b/src/iqn2lld/IQN2_init.c
@@ -176,7 +176,7 @@ const char* IQN2_getVersionStr (void)
176 return iqn2LldVersionStr; 176 return iqn2LldVersionStr;
177} 177}
178 178
179//Initialize IQN2 DIO buffers 179//Initialize IQN2 DIO buffers //FIXME need update for lte dio mode
180void 180void
181IQN2_initDio( 181IQN2_initDio(
182 IQN2_ConfigHandle hIqn2 182 IQN2_ConfigHandle hIqn2
@@ -201,6 +201,16 @@ IQN2_initDio(
201 num_AxC_pe += hIqn2->ailConfig[j].numWcdmaPeAxC; 201 num_AxC_pe += hIqn2->ailConfig[j].numWcdmaPeAxC;
202 } 202 }
203 num_AxC_pe += hIqn2->aidConfig.numWcdmaEgressAxC; 203 num_AxC_pe += hIqn2->aidConfig.numWcdmaEgressAxC;
204 for (i=0;i<=(num_AxC_pe/16);i++)
205 {
206 hIqn2->dioConfig[i].offsetPeDBCH = i*16;
207 if(i == num_AxC_pe/16)
208 hIqn2->dioConfig[i].numPeDBCH = num_AxC_pe%16;
209 else
210 hIqn2->dioConfig[i].numPeDBCH = 16;
211 }
212 } else {
213 num_AxC_pe = num_channel_pe;
204 } 214 }
205 215
206 if( num_channel_pd == 0) 216 if( num_channel_pd == 0)
@@ -210,24 +220,16 @@ IQN2_initDio(
210 num_AxC_pd += hIqn2->ailConfig[j].numWcdmaPdAxC; 220 num_AxC_pd += hIqn2->ailConfig[j].numWcdmaPdAxC;
211 } 221 }
212 num_AxC_pd += hIqn2->aidConfig.numWcdmaIngressAxC; 222 num_AxC_pd += hIqn2->aidConfig.numWcdmaIngressAxC;
213 } 223 for (i=0;i<=(num_AxC_pd/16);i++)
214 224 {
215 for (i=0;i<=(num_AxC_pe/16);i++) 225 hIqn2->dioConfig[i].offsetPdDBCH = i*16;
216 { 226 if(i == num_AxC_pd/16)
217 hIqn2->dioConfig[i].offsetPeDBCH = i*16; 227 hIqn2->dioConfig[i].numPdDBCH = num_AxC_pd%16;
218 if(i == num_AxC_pe/16) 228 else
219 hIqn2->dioConfig[i].numPeDBCH = num_AxC_pe%16; 229 hIqn2->dioConfig[i].numPdDBCH = 16;
220 else 230 }
221 hIqn2->dioConfig[i].numPeDBCH = 16; 231 } else {
222 } 232 num_AxC_pd = num_channel_pd;
223
224 for (i=0;i<=(num_AxC_pd/16);i++)
225 {
226 hIqn2->dioConfig[i].offsetPdDBCH = i*16;
227 if(i == num_AxC_pd/16)
228 hIqn2->dioConfig[i].numPdDBCH = num_AxC_pd%16;
229 else
230 hIqn2->dioConfig[i].numPdDBCH = 16;
231 } 233 }
232 234
233 for (i=0; i<IQN2_MAX_NUM_DIO_ENGINE; i++) 235 for (i=0; i<IQN2_MAX_NUM_DIO_ENGINE; i++)
@@ -622,18 +624,25 @@ IQN2_initHw(
622 Iqn2_osalLog("Fatal Error: addAxCtoEgrGroupTable returned bad ID\n"); 624 Iqn2_osalLog("Fatal Error: addAxCtoEgrGroupTable returned bad ID\n");
623 } else { 625 } else {
624 if (isNewGroup) { 626 if (isNewGroup) {
625 if (lteCpType == IQN2_LTE_CPTYPE_NORMAL) { 627// if(hIqn2->aidConfig.lteDio == 1)
626 egrRadStdInfo[groupId].indexSc = frameIndexSc;//start index 628// {
627 egrRadStdInfo[groupId].indexTc = frameIndexSc + ((MBSFN_FACTOR * IQN2_LTE_SYMBOL_NUM) - 1);//terminal index 629// egrRadStdInfo[groupId].indexSc = frameIndexSc;//start index
628 egrRadStdInfo[groupId].symbolTc = IQN2_LTE_FRAME_SYMBOL_NUM-1;//140 symbols for LTE 630// egrRadStdInfo[groupId].indexTc = frameIndexSc;//terminal index
629 frameIndexSc += (MBSFN_FACTOR * IQN2_LTE_SYMBOL_NUM); 631// frameIndexSc += 1;
630 } 632// } else {
631 else { // Extended CP 633 if (lteCpType == IQN2_LTE_CPTYPE_NORMAL) {
632 egrRadStdInfo[groupId].indexSc = frameIndexSc;//start index 634 egrRadStdInfo[groupId].indexSc = frameIndexSc;//start index
633 egrRadStdInfo[groupId].indexTc = frameIndexSc + (IQN2_LTE_SYMBOL_NUM_EXT_CP-1);//terminal index 635 egrRadStdInfo[groupId].indexTc = frameIndexSc + ((MBSFN_FACTOR * IQN2_LTE_SYMBOL_NUM) - 1);//terminal index
634 egrRadStdInfo[groupId].symbolTc = IQN2_LTE_FRAME_SYMBOL_NUM_EXT_CP-1;//120 symbols for LTE with extended CP 636 egrRadStdInfo[groupId].symbolTc = IQN2_LTE_FRAME_SYMBOL_NUM-1;//140 symbols for LTE
635 frameIndexSc += IQN2_LTE_SYMBOL_NUM_EXT_CP; 637 frameIndexSc += (MBSFN_FACTOR * IQN2_LTE_SYMBOL_NUM);
636 } 638 }
639 else { // Extended CP
640 egrRadStdInfo[groupId].indexSc = frameIndexSc;//start index
641 egrRadStdInfo[groupId].indexTc = frameIndexSc + (IQN2_LTE_SYMBOL_NUM_EXT_CP-1);//terminal index
642 egrRadStdInfo[groupId].symbolTc = IQN2_LTE_FRAME_SYMBOL_NUM_EXT_CP-1;//120 symbols for LTE with extended CP
643 frameIndexSc += IQN2_LTE_SYMBOL_NUM_EXT_CP;
644 }
645// }
637 } 646 }
638 } 647 }
639 } 648 }
@@ -716,17 +725,24 @@ IQN2_initHw(
716 Iqn2_osalLog("Fatal Error: addAxCtoIngrGroupTable returned bad ID\n"); 725 Iqn2_osalLog("Fatal Error: addAxCtoIngrGroupTable returned bad ID\n");
717 } else { 726 } else {
718 if (isNewGroup) { 727 if (isNewGroup) {
719 if (lteCpType == IQN2_LTE_CPTYPE_NORMAL) { 728// if(hIqn2->aidConfig.lteDio == 1)
720 ingrRadStdInfo[groupId].indexSc = frameIndexSc;//start index 729// {
721 ingrRadStdInfo[groupId].indexTc = frameIndexSc + (IQN2_LTE_SYMBOL_NUM-1);//terminal index 730// ingrRadStdInfo[groupId].indexSc = frameIndexSc;//start index
722 ingrRadStdInfo[groupId].symbolTc = IQN2_LTE_FRAME_SYMBOL_NUM-1;//140 symbols for LTE 731// ingrRadStdInfo[groupId].indexTc = frameIndexSc;//terminal index
723 frameIndexSc += IQN2_LTE_SYMBOL_NUM; 732// frameIndexSc += 1;
724 } else { // Extended CP 733// } else {
725 ingrRadStdInfo[groupId].indexSc = frameIndexSc;//start index 734 if (lteCpType == IQN2_LTE_CPTYPE_NORMAL) {
726 ingrRadStdInfo[groupId].indexTc = frameIndexSc + (IQN2_LTE_SYMBOL_NUM_EXT_CP-1);//terminal index 735 ingrRadStdInfo[groupId].indexSc = frameIndexSc;//start index
727 ingrRadStdInfo[groupId].symbolTc = IQN2_LTE_FRAME_SYMBOL_NUM_EXT_CP-1;//120 symbols for LTE with extended CP 736 ingrRadStdInfo[groupId].indexTc = frameIndexSc + (IQN2_LTE_SYMBOL_NUM-1);//terminal index
728 frameIndexSc += IQN2_LTE_SYMBOL_NUM_EXT_CP; 737 ingrRadStdInfo[groupId].symbolTc = IQN2_LTE_FRAME_SYMBOL_NUM-1;//140 symbols for LTE
729 } 738 frameIndexSc += IQN2_LTE_SYMBOL_NUM;
739 } else { // Extended CP
740 ingrRadStdInfo[groupId].indexSc = frameIndexSc;//start index
741 ingrRadStdInfo[groupId].indexTc = frameIndexSc + (IQN2_LTE_SYMBOL_NUM_EXT_CP-1);//terminal index
742 ingrRadStdInfo[groupId].symbolTc = IQN2_LTE_FRAME_SYMBOL_NUM_EXT_CP-1;//120 symbols for LTE with extended CP
743 frameIndexSc += IQN2_LTE_SYMBOL_NUM_EXT_CP;
744 }
745// }
730 } 746 }
731 } 747 }
732 } 748 }
@@ -753,10 +769,16 @@ IQN2_initHw(
753 { 769 {
754 if (ingrGroupInfo[i].g.isLte) 770 if (ingrGroupInfo[i].g.isLte)
755 { 771 {
756 FrameMsg1[i] = ingrGroupInfo[i].g.samplingRate * (IQN2_LTE20_FFT_SIZE + IQN2_LTE20_CYPRENORMAL1_SIZE) / IQN2_LTE20_SAMPLE_RATE; 772// if ((ingrRadStdInfo[groupId].indexTc - ingrRadStdInfo[groupId].indexSc == 0))
757 FrameMsg[i] = ingrGroupInfo[i].g.samplingRate * (IQN2_LTE20_FFT_SIZE + IQN2_LTE20_CYPRENORMAL_SIZE) / IQN2_LTE20_SAMPLE_RATE; 773// {
758 FrameMsg2[i] = ingrGroupInfo[i].g.samplingRate * (IQN2_LTE20_FFT_SIZE + IQN2_LTE20_CYPREEXTENDED_SIZE) / IQN2_LTE20_SAMPLE_RATE; 774// FrameMsg[i] = ingrGroupInfo[i].g.samplingRate / 7680 * 2560;
759 FrameMsgTot[i] = FrameMsg1[i] + (6 * FrameMsg[i]); 775// FrameMsgTot[i] = FrameMsg[i];
776// } else {
777 FrameMsg1[i] = ingrGroupInfo[i].g.samplingRate * (IQN2_LTE20_FFT_SIZE + IQN2_LTE20_CYPRENORMAL1_SIZE) / IQN2_LTE20_SAMPLE_RATE;
778 FrameMsg[i] = ingrGroupInfo[i].g.samplingRate * (IQN2_LTE20_FFT_SIZE + IQN2_LTE20_CYPRENORMAL_SIZE) / IQN2_LTE20_SAMPLE_RATE;
779 FrameMsg2[i] = ingrGroupInfo[i].g.samplingRate * (IQN2_LTE20_FFT_SIZE + IQN2_LTE20_CYPREEXTENDED_SIZE) / IQN2_LTE20_SAMPLE_RATE;
780 FrameMsgTot[i] = FrameMsg1[i] + (6 * FrameMsg[i]);
781// }
760 } else { 782 } else {
761 FrameMsg[i] = 2560; 783 FrameMsg[i] = 2560;
762 FrameMsgTot[i] = FrameMsg[i]; 784 FrameMsgTot[i] = FrameMsg[i];
@@ -781,7 +803,8 @@ IQN2_initHw(
781 } 803 }
782 } 804 }
783 805
784 for(i=0;i<hIqn2->aidConfig.numLteEgressAxC;i++){ 806
807 for(i=0;i<hIqn2->aidConfig.numLteEgressAxC;i++){ //FIXME lteDIO
785 topSetup.top_psr_cfg.drop_pkt[i] = 1;//1; 808 topSetup.top_psr_cfg.drop_pkt[i] = 1;//1;
786 topSetup.top_psr_cfg.pack_ps_data[i] = 1;//pack ps data for pktDMA chan 809 topSetup.top_psr_cfg.pack_ps_data[i] = 1;//pack ps data for pktDMA chan
787 } 810 }
@@ -819,17 +842,25 @@ IQN2_initHw(
819 } 842 }
820 843
821 for(i=0;i<hIqn2->aidConfig.numWcdmaEgressAxC;i++){ 844 for(i=0;i<hIqn2->aidConfig.numWcdmaEgressAxC;i++){
822 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].chan = hIqn2->aidConfig.firstWcdmaAxC + i;//DIO chan 0 ~ 15 is mapped to AIL0 chan 0 ~ 15 845 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].chan = hIqn2->aidConfig.firstWcdmaAxC + i;//DIO chan 0 ~ 15 is mapped to AID chan 0 ~ 15
823 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].dest = IQN2FL_AID2_AXC; //IQN2FL_AIL0_AXC; //destination is AIL0 AxC 846 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].dest = IQN2FL_AID2_AXC; //IQN2FL_AID_AXC; //destination is AID AxC
824 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].psi_pri = 1; 847 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].psi_pri = 1;
825 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].arb_pri = 1; 848 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].arb_pri = 1;
826 } 849 }
827 850
828 for(i=0;i<hIqn2->aidConfig.numLteEgressAxC;i++){ 851 for(i=0;i<hIqn2->aidConfig.numLteEgressAxC;i++){
829 iqs2Setup.iqs2_egress_chan_cfg.egr_pktdma_cfg[i].chan = hIqn2->aidConfig.firstLteAxC + i;//pktDMA chan 0 ~ 3 is mapped to AID chan 0 ~ 3 852 if(hIqn2->aidConfig.lteDio==1)
830 iqs2Setup.iqs2_egress_chan_cfg.egr_pktdma_cfg[i].dest = IQN2FL_AID2_AXC; //destination is AID AxC 853 {
831 iqs2Setup.iqs2_egress_chan_cfg.egr_pktdma_cfg[i].arb_pri = 0; 854 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].chan = hIqn2->aidConfig.firstLteAxC + i;//DIO chan 0 ~ 15 is mapped to AID chan 0 ~ 15
832 iqs2Setup.iqs2_egress_chan_cfg.egr_pktdma_cfg[i].psi_pri = 0; 855 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].dest = IQN2FL_AID2_AXC; //IQN2FL_AID_AXC; //destination is AID AxC
856 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].psi_pri = 1;
857 iqs2Setup.iqs2_egress_chan_cfg.egr_dio2_cfg[i].arb_pri = 1;
858 } else {
859 iqs2Setup.iqs2_egress_chan_cfg.egr_pktdma_cfg[i].chan = hIqn2->aidConfig.firstLteAxC + i;//pktDMA chan 0 ~ 3 is mapped to AID chan 0 ~ 3
860 iqs2Setup.iqs2_egress_chan_cfg.egr_pktdma_cfg[i].dest = IQN2FL_AID2_AXC; //destination is AID AxC
861 iqs2Setup.iqs2_egress_chan_cfg.egr_pktdma_cfg[i].arb_pri = 0;
862 iqs2Setup.iqs2_egress_chan_cfg.egr_pktdma_cfg[i].psi_pri = 0;
863 }
833 } 864 }
834 865
835 for(i=0;i<hIqn2->aidConfig.numCtlChannel;i++){ 866 for(i=0;i<hIqn2->aidConfig.numCtlChannel;i++){
@@ -882,8 +913,14 @@ IQN2_initHw(
882 } 913 }
883 914
884 for(i=0;i<hIqn2->aidConfig.numLteIngressAxC;i++){ 915 for(i=0;i<hIqn2->aidConfig.numLteIngressAxC;i++){
885 iqs2Setup.iqs2_ingress_chan_cfg.aid2_axc_lut_cfg[i + hIqn2->aidConfig.firstLteAxC].chan = i;//AID chan 0 ~ 3 is mapped to PktDMA chan 0 ~ 3 916 if(hIqn2->aidConfig.lteDio==1)
886 iqs2Setup.iqs2_ingress_chan_cfg.aid2_axc_lut_cfg[i + hIqn2->aidConfig.firstLteAxC].dest = IQN2FL_PKTDMA;//destination is PktDMA 917 {
918 iqs2Setup.iqs2_ingress_chan_cfg.aid2_axc_lut_cfg[i + hIqn2->aidConfig.firstLteAxC].chan = i;//AID chan 0 ~ 3 is mapped to PktDMA chan 0 ~ 3
919 iqs2Setup.iqs2_ingress_chan_cfg.aid2_axc_lut_cfg[i + hIqn2->aidConfig.firstLteAxC].dest = IQN2FL_DIO2;//destination is PktDMA
920 } else {
921 iqs2Setup.iqs2_ingress_chan_cfg.aid2_axc_lut_cfg[i + hIqn2->aidConfig.firstLteAxC].chan = i;//AID chan 0 ~ 3 is mapped to PktDMA chan 0 ~ 3
922 iqs2Setup.iqs2_ingress_chan_cfg.aid2_axc_lut_cfg[i + hIqn2->aidConfig.firstLteAxC].dest = IQN2FL_PKTDMA;//destination is PktDMA
923 }
887 } 924 }
888 925
889 for(i=0;i<hIqn2->aidConfig.numCtlChannel;i++){ 926 for(i=0;i<hIqn2->aidConfig.numCtlChannel;i++){
@@ -914,7 +951,6 @@ IQN2_initHw(
914 } 951 }
915 if (enableDio) 952 if (enableDio)
916 { 953 {
917 uint32_t firstDioAxC = 0;
918 /********* DIO Core setup ***************************/ 954 /********* DIO Core setup ***************************/
919#ifdef DEVICE_LE 955#ifdef DEVICE_LE
920 dio2Setup.dio2_global_cfg_rsa_big_endian = 0;//little endian order for UL RSA data 956 dio2Setup.dio2_global_cfg_rsa_big_endian = 0;//little endian order for UL RSA data
@@ -936,6 +972,10 @@ IQN2_initHw(
936 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_qwd = IQN2FL_2QW;//2 QWD for UL 972 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_qwd = IQN2FL_2QW;//2 QWD for UL
937 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_brst_ln = IQN2FL_2QW;//2 QWD per burst 973 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_brst_ln = IQN2FL_2QW;//2 QWD per burst
938 dio2Setup.dio2_core_egress.dma_cfg0[j].rsa_cnvrt_en = 1; 974 dio2Setup.dio2_core_egress.dma_cfg0[j].rsa_cnvrt_en = 1;
975 } else if (hIqn2->dioConfig[j].lteMode == 1){
976 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_qwd = IQN2FL_4QW;//1 QWD for DL
977 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_brst_ln = IQN2FL_4QW;//1 QWD per burst
978 dio2Setup.dio2_core_egress.dma_cfg0[j].rsa_cnvrt_en = 0;
939 } else { 979 } else {
940 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_qwd = IQN2FL_1QW;//1 QWD for DL 980 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_qwd = IQN2FL_1QW;//1 QWD for DL
941 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_brst_ln = IQN2FL_1QW;//1 QWD per burst 981 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_brst_ln = IQN2FL_1QW;//1 QWD per burst
@@ -945,7 +985,11 @@ IQN2_initHw(
945 if (hIqn2->dioConfig[j].usedWithTAC == 0) 985 if (hIqn2->dioConfig[j].usedWithTAC == 0)
946 { 986 {
947 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_blks = hIqn2->dioConfig[j].outNumBlock - 1;//DIO_NUM_BLOCK -1;//Set N-1 987 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_blks = hIqn2->dioConfig[j].outNumBlock - 1;//DIO_NUM_BLOCK -1;//Set N-1
948 dio2Setup.dio2_core_egress.dma_cfg1_dma_blk_addr_stride[j] = (dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_qwd)+1; 988 if (hIqn2->dioConfig[j].lteMode == 1){
989 dio2Setup.dio2_core_egress.dma_cfg1_dma_blk_addr_stride[j] = 4;
990 } else {
991 dio2Setup.dio2_core_egress.dma_cfg1_dma_blk_addr_stride[j] = (dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_qwd)+1;
992 }
949 } else { 993 } else {
950 if (hIqn2->dioConfig[j].outNumBlock <= 64) 994 if (hIqn2->dioConfig[j].outNumBlock <= 64)
951 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_blks = hIqn2->dioConfig[j].outNumBlock - 1;//DIO_NUM_BLOCK -1;//Set N-1 995 dio2Setup.dio2_core_egress.dma_cfg0[j].dma_num_blks = hIqn2->dioConfig[j].outNumBlock - 1;//DIO_NUM_BLOCK -1;//Set N-1
@@ -981,6 +1025,10 @@ IQN2_initHw(
981 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_num_qwd = IQN2FL_2QW;//2 QWD for UL 1025 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_num_qwd = IQN2FL_2QW;//2 QWD for UL
982 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_brst_ln = IQN2FL_2QW;//2 QWD per burst 1026 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_brst_ln = IQN2FL_2QW;//2 QWD per burst
983 dio2Setup.dio2_core_ingress.dma_cfg0[j].rsa_cnvrt_en = 1; 1027 dio2Setup.dio2_core_ingress.dma_cfg0[j].rsa_cnvrt_en = 1;
1028 } else if (hIqn2->dioConfig[j].lteMode == 1){
1029 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_num_qwd = IQN2FL_4QW;//1 QWD for DL
1030 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_brst_ln = IQN2FL_4QW;//1 QWD per burst
1031 dio2Setup.dio2_core_ingress.dma_cfg0[j].rsa_cnvrt_en = 0;
984 } else { 1032 } else {
985 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_num_qwd = IQN2FL_1QW;//1 QWD for DL 1033 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_num_qwd = IQN2FL_1QW;//1 QWD for DL
986 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_brst_ln = IQN2FL_1QW;//1 QWD per burst 1034 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_brst_ln = IQN2FL_1QW;//1 QWD per burst
@@ -990,7 +1038,11 @@ IQN2_initHw(
990 1038
991 if (hIqn2->dioConfig[j].usedWithRAC == 0){ 1039 if (hIqn2->dioConfig[j].usedWithRAC == 0){
992 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_num_blks = hIqn2->dioConfig[j].inNumBlock - 1; //DIO_NUM_BLOCK -1;//Set N-1 1040 dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_num_blks = hIqn2->dioConfig[j].inNumBlock - 1; //DIO_NUM_BLOCK -1;//Set N-1
993 dio2Setup.dio2_core_ingress.dma_cfg1_dma_blk_addr_stride[j] = (dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_num_qwd)+1;//1qwd per AxC 1041 if (hIqn2->dioConfig[j].lteMode == 1){
1042 dio2Setup.dio2_core_ingress.dma_cfg1_dma_blk_addr_stride[j] = 4;//1qwd per AxC
1043 } else {
1044 dio2Setup.dio2_core_ingress.dma_cfg1_dma_blk_addr_stride[j] = (dio2Setup.dio2_core_ingress.dma_cfg0[j].dma_num_qwd)+1;//1qwd per AxC
1045 }
994 } else { 1046 } else {
995 // The fact that the RAC FE is mapped with a jump of 0x800 every 8 chips with 4 blocks every 32-chip period 1047 // The fact that the RAC FE is mapped with a jump of 0x800 every 8 chips with 4 blocks every 32-chip period
996 // -> Block Stride is 0x80 1048 // -> Block Stride is 0x80
@@ -1016,35 +1068,37 @@ IQN2_initHw(
1016 1068
1017 1069
1018 /** DIO SI setup. Be careful! DIO SI has reversed order of Egress/Ingress when compared to SoC level order ***/ 1070 /** DIO SI setup. Be careful! DIO SI has reversed order of Egress/Ingress when compared to SoC level order ***/
1019 if(hIqn2->aidConfig.aidEnable)
1020 {
1021 firstDioAxC = hIqn2->aidConfig.firstWcdmaAxC;
1022 } else {
1023 for (k=0;k<IQN2_MAX_NUM_AIL;k++)
1024 {
1025 if (hIqn2->ailConfig[k].numWcdmaPeAxC != 0)
1026 firstDioAxC = hIqn2->ailConfig[k].firstWcdmaAxC;
1027 }
1028 }
1029 1071
1030 //DIO SI ingress for SoC level egress operation (matched with AIL egress) 1072 //DIO SI ingress for SoC level egress operation (matched with AIL egress)
1031 for(j=0; j<IQN2_MAX_NUM_DIO_ENGINE;j++) 1073 for(j=0; j<IQN2_MAX_NUM_DIO_ENGINE;j++)
1032 { 1074 {
1033 for(i = 0; i < hIqn2->dioConfig[j].numPeDBCH; i++){ 1075 for(i = 0; i < hIqn2->dioConfig[j].numPeDBCH; i++){
1034 dio2Setup.dio2_ife_chan_cfg_grp[i].chan_en = 1; 1076 dio2Setup.dio2_ife_chan_cfg_grp[i].chan_en = 1;
1035 dio2Setup.dio2_ife_chan_cfg_grp[i].chan_radio_sel = (Iqn2Fl_ChanRadioSel) IQN2_getEgressRadioStandardId(i + firstDioAxC); 1077 dio2Setup.dio2_ife_chan_cfg_grp[i].chan_radio_sel = (Iqn2Fl_ChanRadioSel) IQN2_getEgressRadioStandardId(i + hIqn2->dioConfig[j].offsetPeDBCH);
1036 dio2Setup.dio2_ife_chan_cfg_grp[i].chan_axc_offset = 0;//fine AxC offset within QWD level. normally set to zero 1078 dio2Setup.dio2_ife_chan_cfg_grp[i].chan_axc_offset = 0;//fine AxC offset within QWD level. normally set to zero
1037 } 1079 }
1038 } 1080 }
1039 1081
1040 for (i=0;i<IQN2_MAX_NUM_RADIO_STANDARD;i++) 1082 for (i=0;i<IQN2_MAX_NUM_RADIO_STANDARD;i++)
1041 { 1083 {
1042 if((egrGroupInfo[i].g.isLte == 0) && (egrGroupInfo[i].g.isPopulated == 1)) 1084 if((egrGroupInfo[i].g.isPopulated == 1) && ((egrGroupInfo[i].g.isLte == 0) || ((egrGroupInfo[i].g.isLte==1)&&(hIqn2->aidConfig.lteDio==1))))
1043 { 1085 {
1044 dio2Setup.dio2_ife_radio_std_grp.ife_frm_tc_cfg[i].sym_tc = egrRadStdInfo[i].symbolTc;//15 WCDMA slots. Set N-1 1086 dio2Setup.dio2_ife_radio_std_grp.ife_frm_tc_cfg[i].sym_tc = egrRadStdInfo[i].symbolTc;//15 WCDMA slots. Set N-1
1045 dio2Setup.dio2_ife_radio_std_grp.ife_frm_tc_cfg[i].index_sc = egrRadStdInfo[i].indexSc; 1087 dio2Setup.dio2_ife_radio_std_grp.ife_frm_tc_cfg[i].index_sc = egrRadStdInfo[i].indexSc;
1046 dio2Setup.dio2_ife_radio_std_grp.ife_frm_tc_cfg[i].index_tc = egrRadStdInfo[i].indexTc; 1088 dio2Setup.dio2_ife_radio_std_grp.ife_frm_tc_cfg[i].index_tc = egrRadStdInfo[i].indexTc;
1047 dio2Setup.ife_frm_samp_tc_cfg_samp_tc[egrRadStdInfo[i].indexSc] = FrameMsg[i] - 1;//Set N-1 1089 if(egrGroupInfo[i].g.isLte == 0)
1090 {
1091 dio2Setup.ife_frm_samp_tc_cfg_samp_tc[egrRadStdInfo[i].indexSc] = FrameMsg[i] - 1;//Set N-1
1092 } else {
1093 dio2Setup.ife_frm_samp_tc_cfg_samp_tc[egrRadStdInfo[i].indexSc] = FrameMsg1[i] - 1;//Set N-1
1094 for(j=1;j<(IQN2_LTE_SYMBOL_NUM);j++){
1095 dio2Setup.ife_frm_samp_tc_cfg_samp_tc[egrRadStdInfo[i].indexSc+j] = FrameMsg[i]- 1;//frame message terminal count for other 6 normal cyclic prefix LTE symbols
1096 }
1097 for(j = IQN2_LTE_SYMBOL_NUM; j < (MBSFN_FACTOR * IQN2_LTE_SYMBOL_NUM); j++) {
1098 dio2Setup.ife_frm_samp_tc_cfg_samp_tc[egrRadStdInfo[i].indexSc + j] =
1099 dio2Setup.ife_frm_samp_tc_cfg_samp_tc[egrRadStdInfo[i].indexSc + (j - IQN2_LTE_SYMBOL_NUM)];
1100 }
1101 }
1048 } 1102 }
1049 } 1103 }
1050 1104
@@ -1055,19 +1109,27 @@ IQN2_initHw(
1055 { 1109 {
1056 for(i = 0; i < hIqn2->dioConfig[j].numPdDBCH; i++){ 1110 for(i = 0; i < hIqn2->dioConfig[j].numPdDBCH; i++){
1057 dio2Setup.dio2_efe_cfg_grp.chan_en[i] = 1; 1111 dio2Setup.dio2_efe_cfg_grp.chan_en[i] = 1;
1058 dio2Setup.dio2_efe_cfg_grp.chan_radio_sel[i] = (Iqn2Fl_ChanRadioSel) IQN2_getIngressRadioStandardId(i + firstDioAxC);//use radio standard 0 for WCDMA 1112 dio2Setup.dio2_efe_cfg_grp.chan_radio_sel[i] = (Iqn2Fl_ChanRadioSel) IQN2_getIngressRadioStandardId(i + hIqn2->dioConfig[j].offsetPdDBCH);//use radio standard 0 for WCDMA
1059 dio2Setup.efe_chan_axc_offset_cfg[i] = 0;//for CPRI,this should be matched with AIL PD AxC offset 1113 dio2Setup.efe_chan_axc_offset_cfg[i] = 0;//for CPRI,this should be matched with AIL PD AxC offset
1060 } 1114 }
1061 } 1115 }
1062 1116
1063 for (i=0;i<IQN2_MAX_NUM_RADIO_STANDARD;i++) 1117 for (i=0;i<IQN2_MAX_NUM_RADIO_STANDARD;i++)
1064 { 1118 {
1065 if((ingrGroupInfo[i].g.isLte == 0) && (ingrGroupInfo[i].g.isPopulated == 1)) 1119 if((ingrGroupInfo[i].g.isPopulated == 1) && ((ingrGroupInfo[i].g.isLte == 0) || ((ingrGroupInfo[i].g.isLte==1)&&(hIqn2->aidConfig.lteDio==1))))
1066 { 1120 {
1067 dio2Setup.dio2_efe_radio_std_grp.efe_frm_tc_cfg[i].sym_tc = ingrRadStdInfo[i].symbolTc;//15 WCDMA slots. Set N-1 1121 dio2Setup.dio2_efe_radio_std_grp.efe_frm_tc_cfg[i].sym_tc = ingrRadStdInfo[i].symbolTc;//15 WCDMA slots. Set N-1
1068 dio2Setup.dio2_efe_radio_std_grp.efe_frm_tc_cfg[i].index_sc = ingrRadStdInfo[i].indexSc; 1122 dio2Setup.dio2_efe_radio_std_grp.efe_frm_tc_cfg[i].index_sc = ingrRadStdInfo[i].indexSc;
1069 dio2Setup.dio2_efe_radio_std_grp.efe_frm_tc_cfg[i].index_tc = ingrRadStdInfo[i].indexTc; 1123 dio2Setup.dio2_efe_radio_std_grp.efe_frm_tc_cfg[i].index_tc = ingrRadStdInfo[i].indexTc;
1070 dio2Setup.efe_frm_samp_tc_cfg[ingrRadStdInfo[i].indexSc] = FrameMsg[i] - 1;//Set N-1 1124 if(ingrGroupInfo[i].g.isLte == 0)
1125 {
1126 dio2Setup.efe_frm_samp_tc_cfg[ingrRadStdInfo[i].indexSc] = FrameMsg[i] - 1;//Set N-1
1127 } else {
1128 dio2Setup.efe_frm_samp_tc_cfg[ingrRadStdInfo[i].indexSc] = FrameMsg1[i] - 1;//Set N-1
1129 for(j=1;j<(IQN2_LTE_SYMBOL_NUM);j++){
1130 dio2Setup.efe_frm_samp_tc_cfg[ingrRadStdInfo[i].indexSc+j] = FrameMsg[i] - 1;//Set N-1
1131 }
1132 }
1071 } 1133 }
1072 } 1134 }
1073 1135
@@ -1081,9 +1143,9 @@ IQN2_initHw(
1081 1143
1082 for (i=0;i<IQN2_MAX_NUM_RADIO_STANDARD;i++) 1144 for (i=0;i<IQN2_MAX_NUM_RADIO_STANDARD;i++)
1083 { 1145 {
1084 if((ingrGroupInfo[i].g.isLte == 0) && (ingrGroupInfo[i].g.isPopulated == 1)) 1146 if((ingrGroupInfo[i].g.isPopulated == 1) && ((ingrGroupInfo[i].g.isLte == 0) || ((ingrGroupInfo[i].g.isLte==1)&&(hIqn2->aidConfig.lteDio==1))))
1085 { 1147 {
1086 dio2Setup.efe_rad_std_sch_cfg_tdm_start[i] = 0; 1148 dio2Setup.efe_rad_std_sch_cfg_tdm_start[i] = i*16; //FIXME lteDio
1087 dio2Setup.efe_rad_std_sch_cfg_tdm_len[i] = 16;//ingrGroupInfo[i].endAxC - ingrGroupInfo[i].startAxC; //FIXME TODO try new settings for this value 1149 dio2Setup.efe_rad_std_sch_cfg_tdm_len[i] = 16;//ingrGroupInfo[i].endAxC - ingrGroupInfo[i].startAxC; //FIXME TODO try new settings for this value
1088 dio2Setup.efe_rad_std_sch_cfg_tdm_en[i] = 1; 1150 dio2Setup.efe_rad_std_sch_cfg_tdm_en[i] = 1;
1089 } 1151 }
@@ -1098,22 +1160,19 @@ IQN2_initHw(
1098 if ((hIqn2->protocol == IQN2FL_PROTOCOL_CPRI) || (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_245_76)) 1160 if ((hIqn2->protocol == IQN2FL_PROTOCOL_CPRI) || (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_245_76))
1099 { 1161 {
1100 dio2Setup.uat_dio_egr_radt_tc_cfg_val[j] = IQN2_CPRI_CLOCK_COUNT_TC_PHY_TIMER;//CPRI frame length with 245.76 MHz clock 1162 dio2Setup.uat_dio_egr_radt_tc_cfg_val[j] = IQN2_CPRI_CLOCK_COUNT_TC_PHY_TIMER;//CPRI frame length with 245.76 MHz clock
1101 if (hIqn2->dioConfig[j].egRsaOn == 1) 1163 } else if (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_368_64){
1102 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[16+j] = (64 * 8) - 1;//8 chip event for UL 1164 dio2Setup.uat_dio_egr_radt_tc_cfg_val[j] = IQN2_DFE_368_64_CLOCK_COUNT_TC_PHY_TIMER;
1103 else
1104 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[16+j] = (64 * 4) - 1;//4 chip event for DL
1105 } else if (hIqn2->protocol == IQN2FL_PROTOCOL_OBSAI){ //OBSAI 1165 } else if (hIqn2->protocol == IQN2FL_PROTOCOL_OBSAI){ //OBSAI
1106 dio2Setup.uat_dio_egr_radt_tc_cfg_val[j] = IQN2_OBSAI_CLOCK_COUNT_TC_PHY_TIMER;//OBSAI frame length with 307.20 MHz clock 1166 dio2Setup.uat_dio_egr_radt_tc_cfg_val[j] = IQN2_OBSAI_CLOCK_COUNT_TC_PHY_TIMER;//OBSAI frame length with 307.20 MHz clock
1107 if (hIqn2->dioConfig[j].egRsaOn == 1) 1167 }
1108 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[16+j] = (80 * 8) - 1;//4 chip event for DL 1168 if(hIqn2->dioConfig[j].lteMode == 1)
1109 else 1169 {
1110 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[16+j] = (80 * 4) - 1;//4 chip event for DL 1170 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[16+j] = (((dio2Setup.uat_dio_egr_radt_tc_cfg_val[j]+1)/FrameMsgTot[IQN2_getEgressRadioStandardId(hIqn2->dioConfig[j].offsetPeDBCH)]/20) * 16) - 1;//16 sample event for Lte
1111 } else if (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_368_64){ 1171 } else {
1112 dio2Setup.uat_dio_egr_radt_tc_cfg_val[j] = IQN2_DFE_368_64_CLOCK_COUNT_TC_PHY_TIMER;//DFE frame length with 368.64 MHz clock 1172 if (hIqn2->dioConfig[j].egRsaOn == 1)
1113 if (hIqn2->dioConfig[j].egRsaOn == 1) 1173 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[16+j] = (((dio2Setup.uat_dio_egr_radt_tc_cfg_val[j]+1)/FrameMsgTot[IQN2_getEgressRadioStandardId(hIqn2->dioConfig[j].offsetPeDBCH)]/15) * 8) - 1;//8 sample event for UL
1114 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[16+j] = (96 * 8) - 1;//4 chip event for DL 1174 else
1115 else 1175 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[16+j] = (((dio2Setup.uat_dio_egr_radt_tc_cfg_val[j]+1)/FrameMsgTot[IQN2_getEgressRadioStandardId(hIqn2->dioConfig[j].offsetPeDBCH)]/15) * 4) - 1;//4 sample event for DL
1116 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[16+j] = (96 * 4) - 1;//4 chip event for DL
1117 } 1176 }
1118 dio2Setup.uat_dio_egr_radt_offset_cfg_val[j] = 0;//not used for DIAG_SYNC test mode 1177 dio2Setup.uat_dio_egr_radt_offset_cfg_val[j] = 0;//not used for DIAG_SYNC test mode
1119 dio2Setup.uat_evt_radt_cmp_cfg_val[16+j] = 0;//No initial delay 1178 dio2Setup.uat_evt_radt_cmp_cfg_val[16+j] = 0;//No initial delay
@@ -1124,25 +1183,30 @@ IQN2_initHw(
1124 //DIO SI Ingress RADT is not used (SoC level DIO egress doesn't require event) 1183 //DIO SI Ingress RADT is not used (SoC level DIO egress doesn't require event)
1125 1184
1126 //DIO SI Egress RADT0 with event0 (Used for SoC level Ingress operation) 1185 //DIO SI Egress RADT0 with event0 (Used for SoC level Ingress operation)
1127 if ((hIqn2->protocol == IQN2FL_PROTOCOL_CPRI) || (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_245_76)) 1186 for (j=0;j<IQN2_MAX_NUM_DIO_ENGINE;j++)
1128 { 1187 {
1129 dio2Setup.uat_egr_radt_tc_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = IQN2_CPRI_CLOCK_COUNT_TC_PHY_TIMER;//CPRI frame length with 245.76 MHz clock 1188 if(hIqn2->dioConfig[j].numPdDBCH != 0)
1130 dio2Setup.uat_egr_radt_offset_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = 0;//not used for DIAG_SYNC test mode 1189 {
1131 if (hIqn2->aidConfig.aidEnable) 1190 if ((hIqn2->protocol == IQN2FL_PROTOCOL_CPRI) || (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_245_76))
1132 dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = hIqn2->aidConfig.siDelay + 500;//(AID2 SI offset) + 500 (ingress pipe delay) 1191 {
1133 else 1192 dio2Setup.uat_egr_radt_tc_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] = IQN2_CPRI_CLOCK_COUNT_TC_PHY_TIMER;//CPRI frame length with 245.76 MHz clock
1134 dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = hIqn2->ailConfig[0].pe2Offset + 500;//pi + 500 (ingress pipe delay) 1193 } else if (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_368_64){
1135 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = (64 * 4) - 1;//4 sample event 1194 dio2Setup.uat_egr_radt_tc_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] = IQN2_DFE_368_64_CLOCK_COUNT_TC_PHY_TIMER;//DFE frame length with 368.64 MHz clock
1136 } else if(hIqn2->protocol == IQN2FL_PROTOCOL_OBSAI){ //OBSAI 1195 } else if(hIqn2->protocol == IQN2FL_PROTOCOL_OBSAI){ //OBSAI
1137 dio2Setup.uat_egr_radt_tc_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = IQN2_OBSAI_CLOCK_COUNT_TC_PHY_TIMER;//OBSAI frame length with 307.20 MHz clock 1196 dio2Setup.uat_egr_radt_tc_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] = IQN2_OBSAI_CLOCK_COUNT_TC_PHY_TIMER;//OBSAI frame length with 307.20 MHz clock
1138 dio2Setup.uat_egr_radt_offset_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = 0;//not used for DIAG_SYNC test mode 1197 }
1139 dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] + 500;//(DIO SI delay) + (ingress pipe delay) 1198 dio2Setup.uat_egr_radt_offset_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] = 0;//not used for DIAG_SYNC test mode
1140 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = (80 * 4) - 1;//4 sample event 1199 if (hIqn2->aidConfig.aidEnable)
1141 } else if (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_368_64){ 1200 dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] = hIqn2->aidConfig.siDelay + hIqn2->AxCconfig[hIqn2->dioConfig[j].offsetPdDBCH].ingressAxCOffset + 500;//(AID2 SI offset) + 500 (ingress pipe delay)
1142 dio2Setup.uat_egr_radt_tc_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = IQN2_DFE_368_64_CLOCK_COUNT_TC_PHY_TIMER;//DFE frame length with 368.64 MHz clock 1201 else
1143 dio2Setup.uat_egr_radt_offset_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = 0;//not used for DIAG_SYNC test mode 1202 dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] = hIqn2->ailConfig[0].pe2Offset + 500;//pi + 500 (ingress pipe delay)
1144 dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = hIqn2->aidConfig.siDelay + 500;//(DIO SI delay) + (ingress pipe delay) 1203
1145 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[IQN2_getIngressRadioStandardId(firstDioAxC)] = (96 * 4) - 1;//4 sample event 1204 if(hIqn2->dioConfig[j].lteMode == 1){
1205 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] = ((dio2Setup.uat_egr_radt_tc_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)]+1) / FrameMsgTot[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] / 20 * 4) - 1;//4 sample event
1206 } else {
1207 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] = ((dio2Setup.uat_egr_radt_tc_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)]+1) / FrameMsgTot[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] / 15 * 4) - 1;//4 sample event
1208 }
1209 }
1146 } 1210 }
1147 1211
1148 for (j=0;j<IQN2_MAX_NUM_DIO_ENGINE;j++) 1212 for (j=0;j<IQN2_MAX_NUM_DIO_ENGINE;j++)
@@ -1150,38 +1214,28 @@ IQN2_initHw(
1150 if(hIqn2->dioConfig[j].numPdDBCH != 0) 1214 if(hIqn2->dioConfig[j].numPdDBCH != 0)
1151 { 1215 {
1152 //DIO Core Ingress RADT0 with event19 (Used for Soc level Ingress operation) 1216 //DIO Core Ingress RADT0 with event19 (Used for Soc level Ingress operation)
1153 if ((hIqn2->protocol == IQN2FL_PROTOCOL_CPRI) || (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_245_76)) 1217 if ((hIqn2->protocol == IQN2FL_PROTOCOL_CPRI) || (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_245_76)) {
1154 {
1155 dio2Setup.uat_dio_ing_radt_tc_cfg_val[j] = IQN2_CPRI_CLOCK_COUNT_TC_PHY_TIMER;//CPRI frame length with 245.76 MHz clock 1218 dio2Setup.uat_dio_ing_radt_tc_cfg_val[j] = IQN2_CPRI_CLOCK_COUNT_TC_PHY_TIMER;//CPRI frame length with 245.76 MHz clock
1156 if (hIqn2->dioConfig[j].rsaOn == 1) 1219 } else if (hIqn2->protocol == IQN2FL_PROTOCOL_OBSAI) {
1157 { 1220 dio2Setup.uat_dio_ing_radt_tc_cfg_val[j] = IQN2_OBSAI_CLOCK_COUNT_TC_PHY_TIMER;//OBSAI frame length with 307.20 MHz clock
1158 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j] = (64 * 8) - 1;//8 chip event for UL 1221 } else if (hIqn2->protocol == IQN2FL_PROTOCOL_DFE_368_64) {
1159 dio2Setup.uat_evt_radt_cmp_cfg_val[19+j] = 1230;//DIO SI delay + 480 = 1230 clock delay for 8 chip DMA 1222 dio2Setup.uat_dio_ing_radt_tc_cfg_val[j] = IQN2_DFE_368_64_CLOCK_COUNT_TC_PHY_TIMER;//DFE frame length with 368.64 MHz clock
1160 } else { 1223 }
1161 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j] = (64 * 4) - 1;//4 chip event for DL 1224
1162 dio2Setup.uat_evt_radt_cmp_cfg_val[19+j] = 990;//DIO SI delay + 240 = 1400 clock delay for 4 chip DMA 1225 if (hIqn2->dioConfig[j].lteMode == 1) {
1163 } 1226 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j] = (((dio2Setup.uat_dio_ing_radt_tc_cfg_val[j]+1)/FrameMsgTot[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)]/20) * 16) - 1;
1164 } else if(hIqn2->protocol == IQN2FL_PROTOCOL_OBSAI){ //OBSAI 1227 dio2Setup.uat_evt_radt_cmp_cfg_val[19+j] = dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] + (dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j]);//DIO SI delay + n chip delay
1165 dio2Setup.uat_dio_ing_radt_tc_cfg_val[j] = IQN2_OBSAI_CLOCK_COUNT_TC_PHY_TIMER;//OBSAI frame length with 307.20 MHz clock 1228 } else {
1166 if (hIqn2->dioConfig[j].rsaOn == 1) 1229 if (hIqn2->dioConfig[j].rsaOn == 1)
1167 { 1230 {
1168 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j] = (80 * 8) - 1;//8 chip event for UL 1231 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j] = (((dio2Setup.uat_dio_ing_radt_tc_cfg_val[j]+1)/FrameMsgTot[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)]/15) * 8) - 1;
1169 dio2Setup.uat_evt_radt_cmp_cfg_val[19+j] = 1230;//DIO SI delay + 480 = 1230 clock delay for 8 chip DMA 1232 dio2Setup.uat_evt_radt_cmp_cfg_val[19+j] = dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] + 480;//DIO SI delay + 480 = 1230 clock delay for 8 chip DMA
1170 } else { 1233 } else {
1171 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j] = (80 * 4) - 1;//4 chip event for DL 1234 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j] = (((dio2Setup.uat_dio_ing_radt_tc_cfg_val[j]+1)/FrameMsgTot[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)]/15) * 4) - 1;
1172 dio2Setup.uat_evt_radt_cmp_cfg_val[19+j] = 1090;//DIO SI delay + 240 = 1400 clock delay for 4 chip DMA 1235 dio2Setup.uat_evt_radt_cmp_cfg_val[19+j] = dio2Setup.uat_evt_radt_cmp_cfg_val[IQN2_getIngressRadioStandardId(hIqn2->dioConfig[j].offsetPdDBCH)] + 240;//DIO SI delay + 240 = 1400 clock delay for 4 chip DMA
1173 } 1236 }
1174 } else if(hIqn2->protocol == IQN2FL_PROTOCOL_DFE_368_64){
1175 dio2Setup.uat_dio_ing_radt_tc_cfg_val[j] = IQN2_DFE_368_64_CLOCK_COUNT_TC_PHY_TIMER;//DFE frame length with 368.64 MHz clock
1176 if (hIqn2->dioConfig[j].rsaOn == 1)
1177 {
1178 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j] = (96 * 8) - 1;//8 chip event for UL
1179 dio2Setup.uat_evt_radt_cmp_cfg_val[19+j] = 1230;//DIO SI delay + 480 = 1230 clock delay for 8 chip DMA
1180 } else {
1181 dio2Setup.uat_evt_clk_cnt_tc_cfg_val[19+j] = (96 * 4) - 1;//4 chip event for DL
1182 dio2Setup.uat_evt_radt_cmp_cfg_val[19+j] = 990;//DIO SI delay + 240 = 1400 clock delay for 4 chip DMA
1183 }
1184 } 1237 }
1238
1185 dio2Setup.uat_dio_ing_radt_offset_cfg_val[j] = 0;//not used for DIAG_SYNC test mode 1239 dio2Setup.uat_dio_ing_radt_offset_cfg_val[j] = 0;//not used for DIAG_SYNC test mode
1186 } 1240 }
1187 } 1241 }
@@ -1989,23 +2043,28 @@ IQN2_initHw(
1989 2043
1990 if(egrGroupInfo[i].g.isLte) 2044 if(egrGroupInfo[i].g.isLte)
1991 { 2045 {
1992 if(egrGroupInfo[i].g.cpType == IQN2_LTE_CPTYPE_NORMAL) 2046// if(hIqn2->aidConfig.lteDio == 1)
1993 { 2047// {
1994 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc] = FrameMsg1[i] - 1;//2208 samples for first 20MHz symbol 2048// aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc] = FrameMsg[i]- 1;
1995 for(j=1;j<(IQN2_LTE_SYMBOL_NUM);j++){ 2049// } else {
1996 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc + j] = FrameMsg[i]- 1;//frame message terminal count for other 6 normal cyclic prefix LTE symbols 2050 if(egrGroupInfo[i].g.cpType == IQN2_LTE_CPTYPE_NORMAL)
1997 } 2051 {
1998 2052 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc] = FrameMsg1[i] - 1;//2208 samples for first 20MHz symbol
1999 for(j = IQN2_LTE_SYMBOL_NUM; j < (MBSFN_FACTOR * IQN2_LTE_SYMBOL_NUM); j++) { 2053 for(j=1;j<(IQN2_LTE_SYMBOL_NUM);j++){
2000 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc + j] = 2054 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc + j] = FrameMsg[i]- 1;//frame message terminal count for other 6 normal cyclic prefix LTE symbols
2001 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc + (j - IQN2_LTE_SYMBOL_NUM)]; 2055 }
2002 } 2056
2003 2057 for(j = IQN2_LTE_SYMBOL_NUM; j < (MBSFN_FACTOR * IQN2_LTE_SYMBOL_NUM); j++) {
2004 } else { 2058 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc + j] =
2005 for(j=0 ;j<(IQN2_LTE_SYMBOL_NUM_EXT_CP);j++){ 2059 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc + (j - IQN2_LTE_SYMBOL_NUM)];
2006 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc + j] = FrameMsg2[i]- 1; 2060 }
2007 } 2061
2008 } 2062 } else {
2063 for(j=0 ;j<(IQN2_LTE_SYMBOL_NUM_EXT_CP);j++){
2064 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc + j] = FrameMsg2[i]- 1;
2065 }
2066 }
2067// }
2009 } else { 2068 } else {
2010 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc] = FrameMsg[i]- 1; 2069 aid2Setup.efe_samp_tc[egrRadStdInfo[i].indexSc] = FrameMsg[i]- 1;
2011 } 2070 }
@@ -2015,7 +2074,7 @@ IQN2_initHw(
2015 for(i=hIqn2->aidConfig.firstWcdmaAxC;i<hIqn2->aidConfig.numWcdmaEgressAxC + hIqn2->aidConfig.firstWcdmaAxC;i++){//EFE TDM look up table setup 2074 for(i=hIqn2->aidConfig.firstWcdmaAxC;i<hIqn2->aidConfig.numWcdmaEgressAxC + hIqn2->aidConfig.firstWcdmaAxC;i++){//EFE TDM look up table setup
2016 aid2Setup.efe_chan_index_cfg[i] = i; 2075 aid2Setup.efe_chan_index_cfg[i] = i;
2017 aid2Setup.efe_chan_index_en_cfg[i] = 1; 2076 aid2Setup.efe_chan_index_en_cfg[i] = 1;
2018#ifdef DEVICE_LE 2077#ifdef DEVICE_LE //FIXME lteDio maybe needed for lte too
2019 if (hIqn2->dioConfig[i/16].egRsaOn == 1) 2078 if (hIqn2->dioConfig[i/16].egRsaOn == 1)
2020 { 2079 {
2021 aid2Setup.edc_ch_cfg_dat_swap[i] = 0;//no swap 2080 aid2Setup.edc_ch_cfg_dat_swap[i] = 0;//no swap
@@ -2100,16 +2159,21 @@ IQN2_initHw(
2100 2159
2101 if (ingrGroupInfo[i].g.isLte) 2160 if (ingrGroupInfo[i].g.isLte)
2102 { 2161 {
2103 if (ingrRadStdInfo[i].symbolTc == (IQN2_LTE_FRAME_SYMBOL_NUM-1)) { 2162// if(hIqn2->aidConfig.lteDio == 1)
2104 aid2Setup.ife_samp_tc[ingrRadStdInfo[i].indexSc] = FrameMsg1[i] - 1;//2208 samples for first 20MHz symbol 2163// {
2105 for(j=1;j<(IQN2_LTE_SYMBOL_NUM);j++){ 2164// aid2Setup.ife_samp_tc[ingrRadStdInfo[i].indexSc] = FrameMsg[i]- 1;
2106 aid2Setup.ife_samp_tc[ingrRadStdInfo[i].indexSc + j] = FrameMsg[i]- 1;//frame message terminal count for other 6 normal cyclic prefix LTE symbols 2165// } else {
2107 } 2166 if (ingrRadStdInfo[i].symbolTc == (IQN2_LTE_FRAME_SYMBOL_NUM-1)) {
2108 } else { 2167 aid2Setup.ife_samp_tc[ingrRadStdInfo[i].indexSc] = FrameMsg1[i] - 1;//2208 samples for first 20MHz symbol
2109 for(j=0 ;j<(IQN2_LTE_SYMBOL_NUM_EXT_CP);j++){ 2168 for(j=1;j<(IQN2_LTE_SYMBOL_NUM);j++){
2110 aid2Setup.ife_samp_tc[ingrRadStdInfo[i].indexSc + j] = FrameMsg2[i]- 1; 2169 aid2Setup.ife_samp_tc[ingrRadStdInfo[i].indexSc + j] = FrameMsg[i]- 1;//frame message terminal count for other 6 normal cyclic prefix LTE symbols
2111 } 2170 }
2112 } 2171 } else {
2172 for(j=0 ;j<(IQN2_LTE_SYMBOL_NUM_EXT_CP);j++){
2173 aid2Setup.ife_samp_tc[ingrRadStdInfo[i].indexSc + j] = FrameMsg2[i]- 1;
2174 }
2175 }
2176// }
2113 } else { 2177 } else {
2114 aid2Setup.ife_samp_tc[ingrRadStdInfo[i].indexSc] = FrameMsg[i]- 1; 2178 aid2Setup.ife_samp_tc[ingrRadStdInfo[i].indexSc] = FrameMsg[i]- 1;
2115 } 2179 }
@@ -2154,9 +2218,14 @@ IQN2_initHw(
2154 aid2Setup.uat_evt_radt_cmp_cfg_val[i] = hIqn2->aidConfig.siDelay + hIqn2->AxCconfig[egrGroupInfo[i].g.startAxC].egressAxCOffset;//200 clock delay for AID SI event start 2218 aid2Setup.uat_evt_radt_cmp_cfg_val[i] = hIqn2->aidConfig.siDelay + hIqn2->AxCconfig[egrGroupInfo[i].g.startAxC].egressAxCOffset;//200 clock delay for AID SI event start
2155 2219
2156 if (egrGroupInfo[i].g.isLte) 2220 if (egrGroupInfo[i].g.isLte)
2157 aid2Setup.uat_evt_clk_cnt_tc_cfg_val[i] = ((frameLength+1) / FrameMsgTot[i] / 20 * 4) - 1;//4 sample event (LTE20MHz) 2221 {
2158 else 2222// if(hIqn2->aidConfig.lteDio == 1)
2223// aid2Setup.uat_evt_clk_cnt_tc_cfg_val[i] = ((frameLength+1) / FrameMsgTot[i] / 15 * 4) - 1;//
2224// else
2225 aid2Setup.uat_evt_clk_cnt_tc_cfg_val[i] = ((frameLength+1) / FrameMsgTot[i] / 20 * 4) - 1;//4 sample event (LTE20MHz)
2226 } else {
2159 aid2Setup.uat_evt_clk_cnt_tc_cfg_val[i] = ((frameLength+1) / FrameMsgTot[i] / 15 * 4) - 1;// 2227 aid2Setup.uat_evt_clk_cnt_tc_cfg_val[i] = ((frameLength+1) / FrameMsgTot[i] / 15 * 4) - 1;//
2228 }
2160 } 2229 }
2161 if (ingrGroupInfo[i].g.isPopulated) 2230 if (ingrGroupInfo[i].g.isPopulated)
2162 { 2231 {
@@ -2165,9 +2234,14 @@ IQN2_initHw(
2165 aid2Setup.uat_ing_radt_offset_cfg_val[i] = 0;//not used for DIAG_SYNC test mode 2234 aid2Setup.uat_ing_radt_offset_cfg_val[i] = 0;//not used for DIAG_SYNC test mode
2166 aid2Setup.uat_evt_radt_cmp_cfg_val[8 + i] = hIqn2->aidConfig.siDelay + 8 + hIqn2->AxCconfig[ingrGroupInfo[i].g.startAxC].ingressAxCOffset;// radio delay for AID SI event start (+8 is a temporaly fix for dfe exception in LTE) 2235 aid2Setup.uat_evt_radt_cmp_cfg_val[8 + i] = hIqn2->aidConfig.siDelay + 8 + hIqn2->AxCconfig[ingrGroupInfo[i].g.startAxC].ingressAxCOffset;// radio delay for AID SI event start (+8 is a temporaly fix for dfe exception in LTE)
2167 if (ingrGroupInfo[i].g.isLte) 2236 if (ingrGroupInfo[i].g.isLte)
2168 aid2Setup.uat_evt_clk_cnt_tc_cfg_val[8 + i] = ((frameLength+1) / FrameMsgTot[i] / 20 * 4) - 1;//4 sample event (LTE20MHz) 2237 {
2169 else 2238// if(hIqn2->aidConfig.lteDio == 1)
2239 aid2Setup.uat_evt_clk_cnt_tc_cfg_val[8 + i] = ((frameLength+1) / FrameMsgTot[i] / 20 * 4) - 1;//4 sample event (LTE20MHz)
2240// else
2241// aid2Setup.uat_evt_clk_cnt_tc_cfg_val[8 + i] = ((frameLength+1) / FrameMsgTot[i] / 15 * 4) - 1;//4 sample event (LTE20MHz)
2242 } else {
2170 aid2Setup.uat_evt_clk_cnt_tc_cfg_val[8 + i] = ((frameLength+1) / FrameMsgTot[i] / 15 * 4) - 1;//4 sample event (LTE20MHz) 2243 aid2Setup.uat_evt_clk_cnt_tc_cfg_val[8 + i] = ((frameLength+1) / FrameMsgTot[i] / 15 * 4) - 1;//4 sample event (LTE20MHz)
2244 }
2171 } 2245 }
2172 2246
2173 } 2247 }
@@ -2322,7 +2396,7 @@ IQN2_initRadioTimer(
2322 at2Setup.at2_radt_0_cfg_lutindex_tc[i] = lut_index; 2396 at2Setup.at2_radt_0_cfg_lutindex_tc[i] = lut_index;
2323 at2Setup.at2_radt_sym_lut_ram_cfg_symbcnt_tc[lut_index] = FrameMsg[grpId] - 1;;//2560 chips in slot 2397 at2Setup.at2_radt_sym_lut_ram_cfg_symbcnt_tc[lut_index] = FrameMsg[grpId] - 1;;//2560 chips in slot
2324 lut_index++; 2398 lut_index++;
2325 at2Setup.at2_radt_0_cfg_symb_tc[i] = 14; //15 slots in frame 2399 at2Setup.at2_radt_0_cfg_symb_tc[i] = 14; //15 slots in frame //FIXME add user specified for WCDMA radio timer
2326 } 2400 }
2327 } 2401 }
2328 } 2402 }
@@ -2536,7 +2610,7 @@ void IQN2_startHw(
2536 Iqn2Fl_hwControl(hIqn2->hFl, IQN2FL_CMD_AID2_ICTL_GLOBAL_ENABLE_SET, (void *)&ctrlArg); 2610 Iqn2Fl_hwControl(hIqn2->hFl, IQN2FL_CMD_AID2_ICTL_GLOBAL_ENABLE_SET, (void *)&ctrlArg);
2537 } 2611 }
2538 2612
2539 if (hIqn2->aidConfig.numWcdmaEgressAxC != 0) 2613 if ((hIqn2->aidConfig.numWcdmaEgressAxC != 0) || ((hIqn2->aidConfig.numLteEgressAxC != 0) && (hIqn2->aidConfig.lteDio)))
2540 { 2614 {
2541 //global enable of DIO SI (Egress, Ingress) 2615 //global enable of DIO SI (Egress, Ingress)
2542 Iqn2Fl_hwControl(hIqn2->hFl, IQN2FL_CMD_DIO2_EFE_GLOBAL_ENABLE_SET, (void *)&ctrlArg); 2616 Iqn2Fl_hwControl(hIqn2->hFl, IQN2FL_CMD_DIO2_EFE_GLOBAL_ENABLE_SET, (void *)&ctrlArg);
diff --git a/test/utils/wcdmaUtils.c b/test/utils/wcdmaUtils.c
index 82bda4b..5941c2f 100644
--- a/test/utils/wcdmaUtils.c
+++ b/test/utils/wcdmaUtils.c
@@ -84,6 +84,32 @@ void load_dioData(IQN2_DioConfigHandle hDioConfig)
84 } 84 }
85} 85}
86 86
87void load_dioData_lte(IQN2_DioConfigHandle hDioConfig)
88{
89 uint32_t idx, idx2, numChip;
90 uint32_t *ptr;
91
92 numChip = 4;
93 if (hDioConfig->out[0]) {
94 UTILS_cacheInvalidate((void *)hDioConfig->out[0], (hDioConfig->numPdDBCH*numChip*hDioConfig->inNumBlock)); // writeback in MSM
95 }
96 for (idx2 = 0; idx2 < hDioConfig->numPdDBCH; idx2 ++)
97 {
98 ptr = hDioConfig->out[idx2];
99 if (ptr)
100 {
101 for(idx =0; idx < numChip*hDioConfig->inNumBlock; idx++)
102 {
103 *ptr = (idx2 << 24) + idx;///numChip;
104 ptr++;
105 }
106 }
107 }
108 if (hDioConfig->out[0]) {
109 UTILS_cacheWriteBack((void *)hDioConfig->out[0], (hDioConfig->numPdDBCH*numChip*hDioConfig->inNumBlock)); // writeback in MSM
110 }
111}
112
87void wcdmaFinalCheck(IQN2_DioConfigHandle hDioConfig) 113void wcdmaFinalCheck(IQN2_DioConfigHandle hDioConfig)
88{ 114{
89 uint32_t testpass = 0; 115 uint32_t testpass = 0;
diff --git a/test/utils/wcdmaUtils.h b/test/utils/wcdmaUtils.h
index 8137ef2..f55c031 100644
--- a/test/utils/wcdmaUtils.h
+++ b/test/utils/wcdmaUtils.h
@@ -56,6 +56,7 @@ extern volatile unsigned int testcheck;
56 56
57 57
58extern void load_dioData(IQN2_DioConfigHandle hDioConfig); 58extern void load_dioData(IQN2_DioConfigHandle hDioConfig);
59extern void load_dioData_lte(IQN2_DioConfigHandle hDioConfig);
59extern void wcdmaFinalCheck(IQN2_DioConfigHandle hDioConfig); 60extern void wcdmaFinalCheck(IQN2_DioConfigHandle hDioConfig);
60 61
61 62