Merge "Fix for DMRS symbols overlap with PDSCH/PUSCH symbols (as per ODU-Low limitati...
authorHarshita Lal <harshita.lal@radisys.com>
Fri, 4 Jun 2021 05:18:10 +0000 (05:18 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Fri, 4 Jun 2021 05:18:10 +0000 (05:18 +0000)
1  2 
build/odu/makefile
docs/README
src/5gnrsch/sch_common.c
src/du_app/du_ue_mgr.c

diff --combined build/odu/makefile
@@@ -86,9 -86,6 +86,6 @@@ ifeq ($(PHY), INTEL_L1
        PLTFRM_FLAGS+=-DSS_USE_WLS_MEM -DINTEL_WLS_MEM -DDEBUG_MODE
  ifeq ($(PHY_MODE),TIMER)
        PLTFRM_FLAGS+=-DINTEL_TIMER_MODE
- else
-    #TODO: Remove below flag for testing RACH.indication onward
-    PLTFRM_FLAGS+=-DTEMP_INTG_FLAG
  endif
  endif
  
@@@ -144,7 -141,6 +141,7 @@@ endi
  ifeq ($(O1_ENABLE),YES)
    L_OPTS+=-lsysrepo -lyang
    L_OPTS+=-lsysrepo-cpp -lyang-cpp
 +L_OPTS+= -lnetconf2 -lcjson -lcurl
    L_OPTS+=-lstdc++
  endif
  
@@@ -215,7 -211,6 +212,7 @@@ du
                $(Q)$(MAKE) -f $(COM_BUILD_DIR)/phy_stub.mak OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
  ifeq ($(O1_ENABLE),YES)
                $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1.mak OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CCPP1)'
 +              $(Q)$(MAKE) -f $(COM_BUILD_DIR)/ves.mak OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CCPP1)'
  endif
  
  link_du: du
@@@ -236,7 -231,6 +233,7 @@@ clean_odu
                $(Q)$(MAKE) -f $(COM_BUILD_DIR)/phy_stub.mak clean OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
  ifeq ($(O1_ENABLE),YES)
                $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1.mak clean OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CCPP1)'
 +              $(Q)$(MAKE) -f $(COM_BUILD_DIR)/ves.mak clean OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CCPP1)'
  endif
                $(Q)rm -rf $(OBJ_ROOT)/odu/*
                $(Q)rm -rf $(LIB_ROOT)/odu/*
@@@ -261,7 -255,6 +258,7 @@@ cu
         $(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
  ifeq ($(O1_ENABLE),YES)
                $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1.mak OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CCPP1)'
 +              $(Q)$(MAKE) -f $(COM_BUILD_DIR)/ves.mak OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CCPP1)'
  endif
  
  clean_cu:
         $(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak clean OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
  ifeq ($(O1_ENABLE),YES)
                $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1.mak clean OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CCPP1)'
 +              $(Q)$(MAKE) -f $(COM_BUILD_DIR)/ves.mak clean OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CCPP1)'
  endif
         $(Q)rm -rf $(OBJ_ROOT)/cu_stub/*
         $(Q)rm -rf $(LIB_ROOT)/cu_stub/*
@@@ -297,7 -289,6 +294,7 @@@ ric
         $(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
  ifeq ($(O1_ENABLE),YES)
                $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1.mak OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CCPP1)'
 +              $(Q)$(MAKE) -f $(COM_BUILD_DIR)/ves.mak OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CCPP1)'
  endif
  
  clean_ric:
         $(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak clean OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
  ifeq ($(O1_ENABLE),YES)
                $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1.mak clean OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CCPP1)'
 +              $(Q)$(MAKE) -f $(COM_BUILD_DIR)/ves.mak clean OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CCPP1)'
  endif
         $(Q)rm -rf $(OBJ_ROOT)/ric_stub/*
         $(Q)rm -rf $(LIB_ROOT)/ric_stub/*
@@@ -330,7 -320,6 +327,7 @@@ copy_build: link_d
                        $(Q)cp -f ./obj/odu/odu ./bin/odu
                        $(Q)cp -rf ./bin/odu $(ROOT_DIR)/bin/
                        $(Q)cp -f ../scripts/odu_script.sh $(ROOT_DIR)/bin/odu
 +                      $(Q)cp -rf ../config/ $(ROOT_DIR)/bin/odu
                        $(Q)cp -f ./lib/odu/*.a $(ROOT_DIR)/libs/
                   $(Q)echo -e "***** BUILD COMPLETE *****"
  
diff --combined docs/README
@@@ -39,7 -39,7 +39,7 @@@ C. Pre-requisite for O1 Interface (Requ
  
        Create new netconf user (login with root user and run following commands)
        $adduser --system netconf && \
 -        echo "netconf:netconf" | chpasswd
 +        echo "netconf:netconf!" | chpasswd
  
        $mkdir -p /home/netconf/.ssh && \
        ssh-keygen -A && \
  
     $sysrepocfg --import=startup_config.xml --datastore running --module  o-ran-sc-odu-interface-v1 
  
 +5. Configure the netconf server details for VES PNF Event
 +
 +   $cd l2/build/config
 +
 +   Open the netconfConfig.xml and edit the desired MAC address, IP, Port, Username and Password for VES PNF Registration.
 +
 +6. Configure the VES server details to send VES Events
 +
 +   $cd l2/build/config
 +
 +   Open the vesConfig.xml and edit the desired IP, Port, Username and Password to send VES Event.
 +
  
  D. How to Clean and Build:
  --------------------------
- 1. Building ODU binary:
+ 1. Build commands:
+    a. odu       - Builds all components of ODU
+    b. cu_stub   - Builds all CU Stub
+    c. ric_stub  - Builds all RIC_Stub
+    d. clean_odu - clean up ODU
+    e. clean_cu  - clean up CU Stub
+    f. clean_ric - clean up RIC Stub
+    g. clean_all - cleanup everything
+    h. options:
+       i.   MACHINE=BIT64/BIT32 - Specify underlying machine type. Default is BIT32
+       ii.  NODE=TEST_STUB      - Specify if it is a test node. Mandatory for cu_stub/ric_stub. Must not be used for odu
+       iii. MODE=FDD/TDD        - Specify duplex mode. Default is FDD
+       iv.  PHY=INTEL_L1        - Specify type of phy. If not specified, PHY stub is used
+       v.   PHY_MODE=TIMER      - Specify mode of phy. Used only if PHY=INTEL_L1. Default is radio mode
+       vi.  O1_ENABLE=YES       - Specify if O1 interface is enabled. If not specified, it is disabled 
+ 2. Building ODU binary:
     a. Build folder
           cd l2/build/odu
     b. Building ODU binary
-          make odu MACHINE=BIT64 MODE=FDD
+          make odu MACHINE=<refer section D.1.h>  MODE=<refer section D.1.h>
     c. Cleaning ODU binary
-          make clean_odu MACHINE=BIT64 MODE=FDD
+          make clean_odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
  
2. Building CU Stub binary:
3. Building CU Stub binary:
     a. Build folder
           cd l2/build/odu
     b. Building CU Stub binary
-          make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
+          make cu_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
     c. Cleaning CU Stub binary
-          make clean_cu NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
+          make clean_cu NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
  
3. Building RIC Stub binary:
4. Building RIC Stub binary:
     a. Build folder
           cd l2/build/odu
     b. Building RIC Stub binary
-          make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
+          make ric_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
     c. Cleaning RIC Stub binary
-          make clean_ric NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
+          make clean_ric NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
  
4. Cleaning ODU, CU Stub and RIC Stub:
5. Cleaning ODU, CU Stub and RIC Stub:
        make clean_all
  
  
@@@ -118,25 -122,25 +134,25 @@@ E. How to Clean and Build with O1 inter
     a. Build folder
           cd l2/build/odu
     b. Building ODU binary
-          make odu MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
+          make odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
     c. Cleaning ODU binary
-          make clean_odu MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
+          make clean_odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
  
  2. Building CU Stub binary:
     a. Build folder
           cd l2/build/odu
     b. Building CU Stub binary
-          make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
+          make cu_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
     c. Cleaning CU Stub binary
-          make clean_cu NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
+          make clean_cu NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
  
  3. Building RIC Stub binary:
     a. Build folder
           cd l2/build/odu
     b. Building RIC Stub binary
-          make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
+          make ric_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
     c. Cleaning RIC Stub binary
-          make clean_ric NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
+          make clean_ric NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
  
  4. Cleaning ODU, CU Stub and RIC Stub:
        make clean_all
@@@ -194,19 -198,24 +210,24 @@@ I. Compilatio
        c. Build folder
                  cd l2/build/odu
        d. Build ODU Binary:
-                 make odu PHY=INTEL_L1 PHY_MODE=TIMER MACHINE=BIT64 MODE=FDD
+                         make odu PHY=<refer section D.1.h> PHY_MODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
  
     2. Build CU Stub and RIC Stub:
-       a. Execute steps in sections D.2 and D.3.
+       a. Execute steps in sections D.3 and D.4
  
  II. Execution
-     1. Execute L1:
+     1. Refer to below link for assumptions, dependencies, pre-requisites etc for ODU-Low execution
+        https://docs.o-ran-sc.org/projects/o-ran-sc-o-du-phy/en/latest/
+     2. Execute L1:
         a. Setup environment:
                  cd <intel_directory>/phy/
                  source ./setupenv.sh
         b. Run L1 binary :
                  cd <intel_directory>/FlexRAN/l1/bin/nr5g/gnb/l1
-                 To run in timer mode : ./l1.sh -e
+                 To run 
+                       i.  In timer mode : ./l1.sh -e
+                       ii. In radio mode : ./l1.sh -xran
                  L1 is up when console prints follow:
  
                     Non BBU threads in application
                   
                     PHY>welcome to application console
  
-     2. Execute FAPI Translator:
+     3. Execute FAPI Translator:
         a. Setup environment:
                  cd <intel_directory>/phy/
                  source ./setupenv.sh
                  cd <intel_directory>/phy/fapi_5g/bin/
                  ./oran_5g_fapi --cfg=oran_5g_fapi.cfg
  
-     3. Execute CU Stub and RIC Stub:
+     4. Execute CU Stub and RIC Stub:
         a. Run steps in sections E.1-E.3
  
-     4. Execute DU:
+     5. Execute DU:
         a. DU execution folder
                cd l2/bin/odu
         b. Export WLS library path
@@@ -247,7 -256,7 +268,7 @@@ H. How to execute the Health Check : ge
     2. Connect to the server with 
  
          user: netconf
 -        pwd:  netconf
 +        pwd:  netconf!
  
     3. Send a Netconf get request for alarms xpath
  
diff --combined src/5gnrsch/sch_common.c
@@@ -205,8 -205,7 +205,8 @@@ void schPrachResAlloc(SchCellCb *cell, 
        {
           /* prach ocassion present in this subframe */
  #ifdef NR_TDD
 -         if(UL_SLOT != schGetSlotSymbFrmt(prachOccasionTimingInfo.slot, cell->slotFrmtBitMap))
 +         if(UL_SLOT != schGetSlotSymbFrmt(prachOccasionTimingInfo.slot%cell->numSlotsInPeriodicity,\
 +         cell->slotFrmtBitMap))
           {
              DU_LOG("\nERROR  --> SCH : PrachCfgIdx %d doesn't support UL slot", prachCfgIdx);
           }
@@@ -557,7 -556,7 +557,7 @@@ uint8_t schUlResAlloc(SchCellCb *cell, 
   *         RFAILED - failure
   *
   * ****************************************************************/
- uint8_t schDlRsrcAllocMsg4(DlMsgAlloc *msg4Alloc, SchCellCb *cell, uint16_t slot)
+ uint8_t schDlRsrcAllocMsg4(DlMsgAlloc *msg4Alloc, SchCellCb *cell, uint16_t slot, bool ssbPresent, bool sib1Present)
  {
     uint8_t coreset0Idx = 0;
     uint8_t numRbs = 0;
     uint8_t offsetPointA;
     uint8_t FreqDomainResource[6] = {0};
     uint16_t tbSize = 0;
-    uint8_t numPdschSymbols = 12; /* considering pdsch region from 2 to 13 */
-    uint8_t mcs = 4;  /* MCS fixed to 4 */
+    uint8_t numPdschSymbols = 11;            /* considering pdsch region from 3 to 13 */
+    uint8_t mcs = 4;                         /* MCS fixed to 4 */
     SchBwpDlCfg *initialBwp;
+    FreqDomainAlloc *sib1PdschFreqAlloc = NULL;
  
     PdcchCfg *pdcch = &msg4Alloc->dlMsgPdcchCfg;
     PdschCfg *pdsch = &msg4Alloc->dlMsgPdschCfg;
        pdsch->codeword[cwCount].mcsIndex = mcs; /* mcs configured to 4 */
        pdsch->codeword[cwCount].mcsTable = 0; /* notqam256 */
        pdsch->codeword[cwCount].rvIndex = 0;
-       /* 38.214: Table 5.1.3.2-1,  divided by 8 to get the value in bytes */
-       /* TODO : Calculate tbSize based of DL CCCH msg size */
-       tbSize = schCalcTbSize(2664/8); /* send this value to the func in bytes when considering msg4 size */
+       tbSize = schCalcTbSize(msg4Alloc->dlMsgInfo.dlMsgPduLen + TX_PAYLOAD_HDR_LEN); /* MSG4 size + FAPI header size*/
        pdsch->codeword[cwCount].tbSize = tbSize;
     }
     pdsch->dataScramblingId = cell->cellCfg.phyCellId;
     pdsch->numLayers = 1;
     pdsch->transmissionScheme = 0;
     pdsch->refPoint = 0;
-    pdsch->dmrs.dlDmrsSymbPos = 2;
+    pdsch->dmrs.dlDmrsSymbPos = 4; /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */
     pdsch->dmrs.dmrsConfigType = 0; /* type-1 */
     pdsch->dmrs.dlDmrsScramblingId = cell->cellCfg.phyCellId;
     pdsch->dmrs.scid = 0;
     pdsch->dmrs.nrOfDmrsSymbols  = NUM_DMRS_SYMBOLS;
     pdsch->dmrs.dmrsAddPos       = DMRS_ADDITIONAL_POS;
     pdsch->pdschFreqAlloc.resourceAllocType = 1; /* RAT type-1 RIV format */
-    /* the RB numbering starts from coreset0, and PDSCH is always above SSB */
-    pdsch->pdschFreqAlloc.freqAlloc.startPrb = offset + SCH_SSB_NUM_PRB;
-    pdsch->pdschFreqAlloc.freqAlloc.numPrb = schCalcNumPrb(tbSize,mcs,numPdschSymbols);
+    /* The RB numbering starts from coreset0 */ 
+    pdsch->pdschFreqAlloc.freqAlloc.startPrb = PDSCH_START_RB;
+    if(ssbPresent)
+    {
+       /* PDSCH is always above SSB */
+       pdsch->pdschFreqAlloc.freqAlloc.startPrb = offsetPointA + SCH_SSB_NUM_PRB + 1;
+    }
+    if(sib1Present)
+    {
+       /* Must not overlap with SIB1 */
+       sib1PdschFreqAlloc = &cell->cellCfg.sib1SchCfg.sib1PdschCfg.pdschFreqAlloc.freqAlloc;
+       pdsch->pdschFreqAlloc.freqAlloc.startPrb = sib1PdschFreqAlloc->startPrb + sib1PdschFreqAlloc->numPrb + 1; 
+    }
+    pdsch->pdschFreqAlloc.freqAlloc.numPrb = schCalcNumPrb(tbSize, mcs, numPdschSymbols);
     pdsch->pdschFreqAlloc.vrbPrbMapping = 0; /* non-interleaved */
-    pdsch->pdschTimeAlloc.timeAlloc.startSymb = 2; /* spec-38.214, Table 5.1.2.1-1 */
-    pdsch->pdschTimeAlloc.timeAlloc.numSymb = 12;
+    pdsch->pdschTimeAlloc.timeAlloc.startSymb = 3; /* spec-38.214, Table 5.1.2.1-1 */
+    pdsch->pdschTimeAlloc.timeAlloc.numSymb = numPdschSymbols;
     pdsch->beamPdschInfo.numPrgs = 1;
     pdsch->beamPdschInfo.prgSize = 1;
     pdsch->beamPdschInfo.digBfInterfaces = 0;
@@@ -732,7 -741,6 +742,6 @@@ uint8_t schDlRsrcAllocDlMsg(DlMsgAlloc 
  {
     uint8_t ueIdx;
     uint16_t tbSize = 0;
-    uint8_t numPdschSymbols = 12; /* considering pdsch region from 2 to 13 */
     PdcchCfg *pdcch = NULLP;
     PdschCfg *pdsch = NULLP;
     BwpCfg *bwp = NULLP;
        pdsch->codeword[cwCount].mcsIndex = ueCb.ueCfg.dlModInfo.mcsIndex;
        pdsch->codeword[cwCount].mcsTable = ueCb.ueCfg.dlModInfo.mcsTable;
        pdsch->codeword[cwCount].rvIndex = 0;
-       tbSize = schCalcTbSize(*accumalatedSize);
+       tbSize = schCalcTbSize(*accumalatedSize + TX_PAYLOAD_HDR_LEN);
        if(tbSize < *accumalatedSize)
           *accumalatedSize = tbSize;
        pdsch->codeword[cwCount].tbSize = tbSize;
     pdsch->numLayers = 1;
     pdsch->transmissionScheme = 0;
     pdsch->refPoint = 0;
-    pdsch->dmrs.dlDmrsSymbPos = 2;
+    pdsch->dmrs.dlDmrsSymbPos = 4; /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */
     pdsch->dmrs.dmrsConfigType = 0; /* type-1 */
     pdsch->dmrs.dlDmrsScramblingId = cell->cellCfg.phyCellId;
     pdsch->dmrs.scid = 0;
     pdsch->dmrs.nrOfDmrsSymbols  = NUM_DMRS_SYMBOLS;
     pdsch->dmrs.dmrsAddPos       = pdschCfg.dmrsDlCfgForPdschMapTypeA.addPos;
     pdsch->pdschFreqAlloc.resourceAllocType = 1; /* RAT type-1 RIV format */
-    pdsch->pdschFreqAlloc.freqAlloc.startPrb = 1;
-    pdsch->pdschFreqAlloc.freqAlloc.numPrb = schCalcNumPrb(tbSize, ueCb.ueCfg.dlModInfo.mcsIndex, numPdschSymbols);
+    pdsch->pdschFreqAlloc.freqAlloc.startPrb = PDSCH_START_RB;
+    pdsch->pdschFreqAlloc.freqAlloc.numPrb = schCalcNumPrb(tbSize, ueCb.ueCfg.dlModInfo.mcsIndex, \
+                  pdschCfg.timeDomRsrcAllociList[0].symbolLength);
     pdsch->pdschFreqAlloc.vrbPrbMapping = 0; /* non-interleaved */
     pdsch->pdschTimeAlloc.timeAlloc.startSymb = pdschCfg.timeDomRsrcAllociList[0].startSymbol;
     pdsch->pdschTimeAlloc.timeAlloc.numSymb = pdschCfg.timeDomRsrcAllociList[0].symbolLength;
diff --combined src/du_app/du_ue_mgr.c
@@@ -177,6 -177,12 +177,6 @@@ uint8_t duBuildAndSendDlUserDataToRlc(u
        return RFAILED;
     }
     memset(dlDataMsgInfo, 0, sizeof(RlcDlUserDataInfo));
 -   if(ODU_GET_MSG_BUF(DU_APP_MEM_REGION, DU_POOL, &dlDataMsgInfo->dlMsg) != ROK)
 -   {
 -      DU_LOG("\nERROR  -->  DU_APP : Memory allocation failed for dlMsg in duHdlEgtpDlData()");
 -      DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlDataMsgInfo, sizeof(RlcDlUserDataInfo));
 -      return RFAILED;
 -   }
     dlDataMsgInfo->dlMsg = egtpMsg->msg;
     dlDataMsgInfo->msgLen = msgLen;
  
@@@ -722,14 -728,21 +722,21 @@@ void fillDefaultInitUlBwp(InitialUlBwp 
   *
   *    Functionality: Fills Sp Cell Group Info
   *
-  * @params[in]  SpCellCfg *spCell
+  * @params[in]  MacUeCfg *macUeCfg
   * @return void
   *
   *****************************************************************/
- void fillDefaultSpCellGrpInfo(SpCellCfg *spCell)
+ void fillDefaultSpCellGrpInfo(MacUeCfg *macUeCfg)
  {
+    SpCellCfg *spCell = NULL;
+    if(macUeCfg)
+       spCell = &macUeCfg->spCellCfg;
     if(spCell)
     {
+       macUeCfg->spCellCfgPres = true;
        spCell->servCellIdx = SERV_CELL_IDX;
        /* Filling Initial Dl Bwp */
        fillDefaultInitDlBwp(&spCell->servCellCfg.initDlBwp);
   *
   *    Functionality: Fills Physical Cell Group Info
   *
-  * @params[in]  PhyCellGrpCfg *cellGrp
+  * @params[in]  MacUeCfg *macUeCfg
   * @return void
   *
   *****************************************************************/
- void fillDefaultPhyCellGrpInfo(PhyCellGrpCfg *cellGrp)
+ void fillDefaultPhyCellGrpInfo(MacUeCfg *macUeCfg)
  {
+    PhyCellGrpCfg *cellGrp = NULL;
+    if(macUeCfg)
+       cellGrp = &macUeCfg->phyCellGrpCfg;
     if(cellGrp)
     {
+       macUeCfg->phyCellGrpCfgPres = true;
        cellGrp->pdschHarqAckCodebook = PDSCH_HARQ_ACK_CODEBOOK_DYNAMIC;
        cellGrp->pNrFr1 = P_NR_FR1;
     }
   *
   *    Functionality: Fills Mac Cell Group Info
   *
-  * @params[in]  MacCellGrpCfg *cellGrp
+  * @params[in]  MacUeCfg *macUeCfg
   * @return void
   *
   *****************************************************************/
- void fillDefaultMacCellGrpInfo(MacCellGrpCfg *cellGrp)
+ void fillDefaultMacCellGrpInfo(MacUeCfg *macUeCfg)
  {
     uint8_t idx;
+    MacCellGrpCfg *cellGrp = NULL;
+    if(macUeCfg)
+       cellGrp = &macUeCfg->macCellGrpCfg;
  
     if(cellGrp)
     {
+       macUeCfg->macCellGrpCfgPres = true;
        /* Filling Scheduling Request Config */
        cellGrp->schReqCfg.addModListCount = 1;
        if(cellGrp->schReqCfg.addModListCount <= MAX_NUM_SR_CFG_PER_CELL_GRP)
@@@ -1125,12 -1150,13 +1144,13 @@@ uint8_t fillMacUeCfg(uint16_t cellId, u
        macUeCfg->cellId       = cellId;
        macUeCfg->ueIdx        = ueIdx;
        macUeCfg->crnti        = crnti;
-       fillDefaultMacCellGrpInfo(&macUeCfg->macCellGrpCfg);
-       fillDefaultPhyCellGrpInfo(&macUeCfg->phyCellGrpCfg);
-       fillDefaultSpCellGrpInfo(&macUeCfg->spCellCfg);
+       fillDefaultMacCellGrpInfo(macUeCfg);
+       fillDefaultPhyCellGrpInfo(macUeCfg);
+       fillDefaultSpCellGrpInfo(macUeCfg);
        macUeCfg->ambrCfg = NULLP;
-       fillMacSrb1LcCfg(&macUeCfg->lcCfgList[0]);
        fillDefaultModulation(macUeCfg);
+       fillMacSrb1LcCfg(&macUeCfg->lcCfgList[0]);
        macUeCfg->numLcs++;
     }
     else