diag/tpr12: cpsw diag update to work with eth master branch
authorBadri S <badri@ti.com>
Mon, 7 Dec 2020 07:38:28 +0000 (13:08 +0530)
committerSivaraj R <sivaraj@ti.com>
Mon, 7 Dec 2020 09:22:06 +0000 (03:22 -0600)
cpsw diag update to work with enet master branch

Signed-off-by: Badri S <badri@ti.com>
packages/ti/board/diag/common/tpr12/linker_mcu1_0.lds
packages/ti/board/diag/cpsw/src/cpsw_eth_test.c
packages/ti/board/diag/cpsw/src/cpsw_eth_test.h
packages/ti/drv/canfd/test/src/main_canfd_test.c

index 1185d67eff462e929047e115ad45b7ec5bccea0b..be8fe02a401e4742cfbc9857e279de19f91777bd 100644 (file)
@@ -39,7 +39,8 @@ PAGE 0:
     TCMA_RAM (RX) : origin=0x00000100 length=0x00007F00
     TCMB_RAM (RW) : origin=0x00080000 length=0x00008000
     SBL_RESERVED_L2_RAM (RW)   : origin=0x10200000 length=0x00060000
-    L2_RAM (RW)   : origin=0x10260000 length=0x00090000
+    CPPI_DESC (RW): origin=0x10260000 length=0x00001000
+    L2_RAM (RW)   : origin=0x10261000 length=(0x00090000 - 0x00001000)
     L3_RAM (RW)   : origin=0x88000000 length=0x00300000
     L3_RAM_Ping (RW)   : origin=0x88300000 length=0x0040000
     L3_RAM_Pong (RW)   : origin=0x88340000 length=0x0040000
@@ -80,6 +81,7 @@ SECTIONS{
     .sysmem  : {} > SBL_RESERVED_L2_RAM | L2_RAM
     uartbuffer : {} palign(8) > L3_RAM
 
+    .bss:ENET_CPPI_DESC        (NOLOAD) {} ALIGN (128) > CPPI_DESC
     /* For Ethernet packet memory*/
     .bss:ENET_DMA_DESC_MEMPOOL (NOLOAD) {} ALIGN (128) > L3_RAM
     .bss:ENET_DMA_RING_MEMPOOL (NOLOAD) {} ALIGN (128) > L3_RAM
index 192bafda7f6632b2ed2098e9af31b6ddfe309e92..f4c4aa8d935fa47da75302260308249a8ff8d168 100644 (file)
-/******************************************************************************\r
-* Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com\r
-*\r
-* Redistribution and use in source and binary forms, with or without\r
-* modification, are permitted provided that the following conditions\r
-* are met:\r
-*\r
-* Redistributions of source code must retain the above copyright\r
-* notice, this list of conditions and the following disclaimer.\r
-*\r
-* Redistributions in binary form must reproduce the above copyright\r
-* notice, this list of conditions and the following disclaimer in the\r
-* documentation and/or other materials provided with the\r
-* distribution.\r
-*\r
-* Neither the name of Texas Instruments Incorporated nor the names of\r
-* its contributors may be used to endorse or promote products derived\r
-* from this software without specific prior written permission.\r
-*\r
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
-* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
-* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
-* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
-* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
-* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
-* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-*\r
-*****************************************************************************/\r
-\r
-/**\r
- *  \file   cpsw_eth_test.c\r
- *\r
- *  \brief  CPSW ethernet diagnostic test file\r
- *\r
- *  Targeted Functionality: Verification of basic functionality of\r
- *  CPSW Ethernet interface.\r
- *\r
- *  Operation: This is the Loopback test code for the Ethernet Interface.\r
- *  The test code showcases usage of the CPSW Driver exported API for\r
- *  sending/receiving Ethernet packets.\r
- *\r
- *  Supported SoCs: TPR12.\r
- *\r
- *  Supported Platforms:tpr12_evm.\r
- *\r
- */\r
-\r
-/* Test application local header file */\r
-#include "cpsw_eth_test.h"\r
-\r
-/* Trasnmitt and receive status variables */\r
-static volatile bool gTxSem = false;\r
-static volatile bool gRxSem = false;\r
-\r
-/* Enet loopback test object */\r
-static BoardDiag_EnetLpbkObj_t gEnetLpbk;\r
-\r
-/**\r
- * \brief   ENET receive ISR function\r
- *\r
- * \param   void *appData   application data\r
- *\r
- * \return  NULL\r
- */\r
-static void BoardDiag_enetLpbkRxIsrFxn(void *appData)\r
-{\r
-    gRxSem = true;\r
-}\r
-\r
-/**\r
- * \brief   ENET transmit ISR function\r
- *\r
- * \param   void *appData   application data\r
- *\r
- * \return  NULL\r
- */\r
-static void BoardDiag_enetLpbkTxIsrFxn(void *appData)\r
-{\r
-    gTxSem = true;\r
-}\r
-\r
-/**\r
- * \brief   This function is used for close the ENET module.\r
- *\r
- * \param   NULL\r
- *\r
- * \return  NULL\r
- */\r
-static void BoardDiag_enetLpbkCloseEnet(void)\r
-{\r
-    Enet_IoctlPrms prms;\r
-    int32_t status;\r
-\r
-    /* Close port link */\r
-    ENET_IOCTL_SET_IN_ARGS(&prms, &gEnetLpbk.macPort);\r
-\r
-    status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                        ENET_PER_IOCTL_CLOSE_PORT_LINK, &prms);\r
-    if (status != ENET_SOK)\r
-    {\r
-        UART_printf("Failed to close port link: %d\n", status);\r
-    }\r
-\r
-    /* Detach core */\r
-    if (status == ENET_SOK)\r
-    {\r
-        ENET_IOCTL_SET_IN_ARGS(&prms, &gEnetLpbk.coreKey);\r
-\r
-        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                            ENET_PER_IOCTL_DETACH_CORE, &prms);\r
-        if (status != ENET_SOK)\r
-        {\r
-            UART_printf("Failed to detach core key %u: %d\n", gEnetLpbk.coreKey, status);\r
-        }\r
-    }\r
-\r
-    /* Close Enet driver */\r
-    Enet_close(gEnetLpbk.hEnet);\r
-\r
-    gEnetLpbk.hEnet = NULL;\r
-}\r
-\r
-/**\r
- * \brief   This function is used for de-initialize the ENET DMA driver.\r
- *\r
- * \param   NULL\r
- *\r
- * \return  NULL\r
- */\r
-static void BoardDiag_enetLpbkCloseDma()\r
-{\r
-    EnetDma_PktQ fqPktInfoQ;\r
-    EnetDma_PktQ cqPktInfoQ;\r
-\r
-    EnetQueue_initQ(&fqPktInfoQ);\r
-    EnetQueue_initQ(&cqPktInfoQ);\r
-\r
-    UART_printf("Closing DMA\n");\r
-    /* There should not be any ready packet */\r
-    if(EnetQueue_getQCount(&gEnetLpbk.rxReadyQ) != 0)\r
-    {\r
-        UART_printf("EnetQueue_getQCount Failed\n");\r
-        return;\r
-    }\r
-\r
-    /* Close RX Flow */\r
-    EnetAppUtils_closeRxCh(gEnetLpbk.hEnet,\r
-                           gEnetLpbk.coreKey,\r
-                           gEnetLpbk.coreId,\r
-                           &fqPktInfoQ,\r
-                           &cqPktInfoQ,\r
-                           gEnetLpbk.hRxCh,\r
-                           gEnetLpbk.rxChNum);\r
-    EnetAppUtils_freePktInfoQ(&fqPktInfoQ);\r
-    EnetAppUtils_freePktInfoQ(&cqPktInfoQ);\r
-\r
-    /* Close TX channel */\r
-    EnetQueue_initQ(&fqPktInfoQ);\r
-    EnetQueue_initQ(&cqPktInfoQ);\r
-\r
-    EnetAppUtils_closeTxCh(gEnetLpbk.hEnet,\r
-                           gEnetLpbk.coreKey,\r
-                           gEnetLpbk.coreId,\r
-                           &fqPktInfoQ,\r
-                           &cqPktInfoQ,\r
-                           gEnetLpbk.hTxCh,\r
-                           gEnetLpbk.txChNum);\r
-    EnetAppUtils_freePktInfoQ(&fqPktInfoQ);\r
-    EnetAppUtils_freePktInfoQ(&cqPktInfoQ);\r
-\r
-    EnetAppUtils_freePktInfoQ(&gEnetLpbk.rxFreeQ);\r
-    EnetAppUtils_freePktInfoQ(&gEnetLpbk.txFreePktInfoQ);\r
-\r
-    CpswAppMemUtils_deInit();\r
-}\r
-\r
-/**\r
- * \brief   This function is used to Mac port statistics\r
- *\r
- * \param   CpswStats_HostPort_2g *st   Cpsw stats\r
- *\r
- * \return  NULL\r
- */\r
-static void BoardDiag_printMacPortStats2G(CpswStats_MacPort_2g *st)\r
-{\r
-    uint32_t i;\r
-\r
-    UART_printf("rxGoodFrames            = %d\n", (uint32_t)st->rxGoodFrames);\r
-    UART_printf("rxBcastFrames           = %d\n", (uint32_t)st->rxBcastFrames);\r
-    UART_printf("rxOctets                = %d\n", (uint32_t)st->rxOctets);\r
-    UART_printf("txGoodFrames            = %d\n", (uint32_t)st->txGoodFrames);\r
-    UART_printf("txBcastFrames           = %d\n", (uint32_t)st->txBcastFrames);\r
-    UART_printf("txOctets                = %d\n", (uint32_t)st->txOctets);\r
-    UART_printf("octetsFrames512to1023   = %d\n",\r
-                (uint32_t)st->octetsFrames512to1023);\r
-\r
-    for (i = 0U; i < ENET_ARRAYSIZE((uint32_t)st->txPri); i++)\r
-    {\r
-        UART_printf("txPri[%u]                = %d\n", i,\r
-                    (uint32_t)st->txPri[i]);\r
-    }\r
-\r
-    for (i = 0U; i < ENET_ARRAYSIZE((uint32_t)st->txPriBcnt); i++)\r
-    {\r
-        UART_printf("txPriBcnt[%u]            = %d\n", i,\r
-                    (uint32_t)st->txPriBcnt[i]);\r
-    }\r
-}\r
-\r
-/**\r
- * \brief   This function is used to Host port statistics\r
- *\r
- * \param   CpswStats_HostPort_2g *st   Cpsw stats\r
- *\r
- * \return  NULL\r
- */\r
-static void BoardDiag_printHostPortStats2G(CpswStats_HostPort_2g *st)\r
-{\r
-    UART_printf("rxGoodFrames            = %d\n", (uint32_t)st->rxGoodFrames);\r
-    UART_printf("rxBcastFrames           = %u\n", (uint32_t)st->rxBcastFrames);\r
-    UART_printf("rxOctets                = %d\n", (uint32_t)st->rxOctets);\r
-    UART_printf("txGoodFrames            = %d\n", (uint32_t)st->txGoodFrames);\r
-    UART_printf("txBcastFrames           = %d\n", (uint32_t)st->txBcastFrames);\r
-    UART_printf("txOctets                = %d\n", (uint32_t)st->txOctets);\r
-    UART_printf("octetsFrames512to1023   = %d\n",\r
-                (uint32_t)st->octetsFrames512to1023);\r
-}\r
-\r
-/**\r
- * \brief   This function is used to display Mac and Host port statistics\r
- *\r
- * \param   NULL\r
- *\r
- * \return  NULL\r
- *\r
- */\r
-static void BoardDiag_enetLpbkShowCpswStats(void)\r
-{\r
-    Enet_IoctlPrms prms;\r
-    CpswStats_PortStats portStats;\r
-    int32_t status;\r
-\r
-    /* Show host port statistics */\r
-    ENET_IOCTL_SET_OUT_ARGS(&prms, &portStats);\r
-    status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                        ENET_STATS_IOCTL_GET_HOSTPORT_STATS, &prms);\r
-    if (status == ENET_SOK)\r
-    {\r
-        UART_printf("\n Port 0 Statistics\n");\r
-        UART_printf("-----------------------------------------\n");\r
-        BoardDiag_printHostPortStats2G((CpswStats_HostPort_2g *)&portStats);\r
-        UART_printf("\n");\r
-    }\r
-    else\r
-    {\r
-        UART_printf("Failed to get host stats: %d\n", status);\r
-    }\r
-\r
-    /* Show MAC port statistics */\r
-    if (status == ENET_SOK)\r
-    {\r
-        ENET_IOCTL_SET_INOUT_ARGS(&prms, &gEnetLpbk.macPort, &portStats);\r
-        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                            ENET_STATS_IOCTL_GET_MACPORT_STATS, &prms);\r
-        if (status == ENET_SOK)\r
-        {\r
-            UART_printf("\n Port 1 Statistics\n");\r
-            UART_printf("-----------------------------------------\n");\r
-            BoardDiag_printMacPortStats2G((CpswStats_MacPort_2g *)&portStats);\r
-            UART_printf("\n");\r
-        }\r
-        else\r
-        {\r
-            UART_printf("Failed to get MAC stats: %d\n", status);\r
-        }\r
-    }\r
-}\r
-\r
-/**\r
- * \brief   This function is used to display Mac address\r
- *\r
- * \param   uint8_t macAddr[] MAC Address\r
- *\r
- * \return   NULL\r
- *\r
- */\r
-static void BoardDiag_printMacAddr(uint8_t macAddr[])\r
-{\r
-    UART_printf("%02x:%02x:%02x:%02x:%02x:%02x\n",\r
-                       macAddr[0] & 0xFF,\r
-                       macAddr[1] & 0xFF,\r
-                       macAddr[2] & 0xFF,\r
-                       macAddr[3] & 0xFF,\r
-                       macAddr[4] & 0xFF,\r
-                       macAddr[5] & 0xFF);\r
-}\r
-\r
-/**\r
- * \brief   This function is used to display Mac address\r
- *\r
- * \param   EthFrame EthFrame[] frame to be displayed\r
- *          uint32_t len        length of the frame\r
- * \return  NULL\r
- *\r
- */\r
-static void BoardDiag_printFrame(EthFrame *frame,\r
-                                uint32_t len)\r
-{\r
-    uint8_t *payload;\r
-    uint32_t i;\r
-\r
-    UART_printf("Dst addr : ");\r
-    BoardDiag_printMacAddr(&frame->hdr.dstMac[0]);\r
-\r
-    UART_printf("Src addr : ");\r
-    BoardDiag_printMacAddr(&frame->hdr.srcMac[0]);\r
-\r
-    if (frame->hdr.etherType == htons(ETHERTYPE_VLAN_TAG))\r
-    {\r
-        EthVlanFrame *vlanFrame = (EthVlanFrame *)frame;\r
-\r
-        UART_printf("TPID     : 0x%04x\n", \r
-                    ntohs(vlanFrame->hdr.tpid) & 0xFFFFU);\r
-        UART_printf("Priority : %d\n",\r
-                    (ntohs(vlanFrame->hdr.tci) & 0xFFFFU) >> 13);\r
-        UART_printf("VLAN Id  : %d\n",\r
-                    ntohs(vlanFrame->hdr.tci) & 0xFFFU);\r
-        UART_printf("EtherType: 0x%04x\n",\r
-                    ntohs(vlanFrame->hdr.etherType) & 0xFFFFU);\r
-        payload = vlanFrame->payload;\r
-        len    -= ETH_VLAN_TAG_LEN;\r
-    }\r
-    else\r
-    {\r
-        UART_printf("EtherType: 0x%04x\n", \r
-                    ntohs(frame->hdr.etherType) & 0xFFFFU);\r
-        payload = frame->payload;\r
-    }\r
-\r
-    UART_printf("Payload  : ");\r
-    for (i = 0; i < len; i++)\r
-    {\r
-        UART_printf("0x%02x ", payload[i]);\r
-        if (i && (((i + 1) % OCTETS_PER_ROW) == 0))\r
-        {\r
-            UART_printf("\n           ");\r
-        }\r
-    }\r
-\r
-    if (len && ((len % OCTETS_PER_ROW) != 0))\r
-    {\r
-        UART_printf("\n");\r
-    }\r
-\r
-    UART_printf("\n");\r
-}\r
-\r
-/**\r
- * \brief   This function is used to queue the received packets to rx ready queue\r
- *\r
- * \param   NULL\r
- *\r
- * \return  uint32_t - Receive ready queue count\r
- *\r
- */\r
-static uint32_t BoardDiag_enetLpbkReceivePkts(void)\r
-{\r
-    EnetDma_PktQ rxReadyQ;\r
-    EnetDma_Pkt *pktInfo;\r
-    int32_t status;\r
-    uint32_t rxReadyCnt = 0U;\r
-\r
-    EnetQueue_initQ(&rxReadyQ);\r
-\r
-    /* Retrieve any CPSW packets which are ready */\r
-    status = EnetDma_retrieveRxPktQ(gEnetLpbk.hRxCh, &rxReadyQ);\r
-\r
-    if (status == ENET_SOK)\r
-    {\r
-        rxReadyCnt = EnetQueue_getQCount(&rxReadyQ);\r
-\r
-        /* Queue the received packet to rxReadyQ and pass new ones from rxFreeQ\r
-        **/\r
-        pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);\r
-        while (pktInfo != NULL)\r
-        {\r
-            EnetDma_checkPktState(&pktInfo->pktState,\r
-                                    ENET_PKTSTATE_MODULE_APP,\r
-                                    ENET_PKTSTATE_APP_WITH_DRIVER,\r
-                                    ENET_PKTSTATE_APP_WITH_READYQ);\r
-\r
-            EnetQueue_enq(&gEnetLpbk.rxReadyQ, &pktInfo->node);\r
-            pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);\r
-        }\r
-    }\r
-    else\r
-    {\r
-        UART_printf("receivePkts() failed to retrieve pkts: %d\n",\r
-                           status);\r
-    }\r
-\r
-    return rxReadyCnt;\r
-}\r
-\r
-/**\r
- * \brief   This function is used to retrieve's any CPSW packets that may be free now\r
- *\r
- * \param   NULL\r
- *\r
- * \return  uint32_t - Transmit free queue count\r
- *\r
- */\r
-static uint32_t BoardDiag_enetLpbkRetrieveFreeTxPkts(void)\r
-{\r
-    EnetDma_PktQ txFreeQ;\r
-    EnetDma_Pkt *pktInfo;\r
-    int32_t status;\r
-    uint32_t txFreeQCnt = 0U;\r
-\r
-    EnetQueue_initQ(&txFreeQ);\r
-\r
-    /* Retrieve any CPSW packets that may be free now */\r
-    status = EnetDma_retrieveTxPktQ(gEnetLpbk.hTxCh, &txFreeQ);\r
-    if (status == ENET_SOK)\r
-    {\r
-        txFreeQCnt = EnetQueue_getQCount(&txFreeQ);\r
-\r
-        pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&txFreeQ);\r
-        while (NULL != pktInfo)\r
-        {\r
-            EnetDma_checkPktState(&pktInfo->pktState,\r
-                                    ENET_PKTSTATE_MODULE_APP,\r
-                                    ENET_PKTSTATE_APP_WITH_DRIVER,\r
-                                    ENET_PKTSTATE_APP_WITH_FREEQ);\r
-\r
-            EnetQueue_enq(&gEnetLpbk.txFreePktInfoQ, &pktInfo->node);\r
-            pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&txFreeQ);\r
-        }\r
-    }\r
-    else\r
-    {\r
-        UART_printf("retrieveFreeTxPkts() failed to retrieve pkts: %d\n",\r
-                           status);\r
-    }\r
-\r
-    return txFreeQCnt;\r
-}\r
-\r
-/**\r
- * \brief   This function is used for CPSW packet transmission\r
- *          and reception\r
- *\r
- * \param   NULL\r
- *\r
- * \return  int32_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int32_t BoardDiag_cpswPktRxTx(void)\r
-{\r
-    EnetDma_PktQ txSubmitQ;\r
-    EnetDma_Pkt *pktInfo;\r
-    EthFrame *frame;\r
-    uint32_t txRetrievePktCnt = 0;\r
-    uint32_t loopTxPktCnt = 0;\r
-    uint32_t loopRxPktCnt = 0;\r
-    uint32_t loopCnt = 0, pktCnt = 0;\r
-    uint32_t rxReadyCnt = 0;\r
-    int32_t status = ENET_SOK;\r
-    uint8_t bcastAddr[ENET_MAC_ADDR_LEN] = \r
-            {0xffU, 0xffU, 0xffU, 0xffU, 0xffU, 0xffU};\r
-\r
-    gEnetLpbk.totalTxCnt = 0U;\r
-    for (loopCnt = 0U; loopCnt < BOARD_DIAG_ENETLPBK_NUM_ITERATION; loopCnt++)\r
-    {\r
-        pktCnt = 0U;\r
-        while (pktCnt < BOARD_DIAG_ENETLPBK_TEST_PKT_NUM)\r
-        {\r
-            loopRxPktCnt = loopTxPktCnt = 0U;\r
-            /* Transmit a single packet */\r
-            EnetQueue_initQ(&txSubmitQ);\r
-\r
-            /* Dequeue one free TX Eth packet */\r
-            pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&gEnetLpbk.txFreePktInfoQ);\r
-\r
-            while (NULL != pktInfo)\r
-            {\r
-                pktCnt++;\r
-                /* Fill the TX Eth frame with test content */\r
-                frame = (EthFrame *)pktInfo->bufPtr;\r
-                memcpy(frame->hdr.dstMac, bcastAddr, ENET_MAC_ADDR_LEN);\r
-                memcpy(frame->hdr.srcMac, &gEnetLpbk.hostMacAddr[0U],\r
-                        ENET_MAC_ADDR_LEN);\r
-                frame->hdr.etherType = htons(ETHERTYPE_EXPERIMENTAL1);\r
-                memset(&frame->payload[0U], (uint8_t)(0xA5 + pktCnt),\r
-                        BOARD_DIAG_ENETLPBK_TEST_PKT_LEN);\r
-                pktInfo->userBufLen = BOARD_DIAG_ENETLPBK_TEST_PKT_LEN +\r
-                                      sizeof(EthFrameHeader);\r
-                pktInfo->appPriv    = &gEnetLpbk;\r
-                EnetDma_checkPktState(&pktInfo->pktState,\r
-                                        ENET_PKTSTATE_MODULE_APP,\r
-                                        ENET_PKTSTATE_APP_WITH_FREEQ,\r
-                                        ENET_PKTSTATE_APP_WITH_DRIVER);\r
-\r
-                /* Enqueue the packet for later transmission */\r
-                EnetQueue_enq(&txSubmitQ, &pktInfo->node);\r
-\r
-                if (pktCnt >= BOARD_DIAG_ENETLPBK_TEST_PKT_NUM)\r
-                {\r
-                    break;\r
-                }\r
-\r
-                /* Dequeue one free TX Eth packet */\r
-                pktInfo =\r
-                (EnetDma_Pkt *)EnetQueue_deq(&gEnetLpbk.txFreePktInfoQ);\r
-            }\r
-            loopTxPktCnt = EnetQueue_getQCount(&txSubmitQ);\r
-            while (0U != EnetQueue_getQCount(&txSubmitQ))\r
-            {\r
-                uint32_t txCnt = EnetQueue_getQCount(&txSubmitQ);\r
-                status = EnetDma_submitTxPktQ(gEnetLpbk.hTxCh,\r
-                                                   &txSubmitQ);\r
-                while (gTxSem != true);\r
-                gTxSem = false;\r
-\r
-                /* Retrieve TX free packets */\r
-                if (status == ENET_SOK)\r
-                {\r
-                    txCnt            = txCnt - EnetQueue_getQCount(&txSubmitQ);\r
-                    txRetrievePktCnt = 0U;\r
-                    while (txRetrievePktCnt != txCnt)\r
-                    {\r
-                        /* TODO this is not failure as HW is busy sending\r
-                         * packets, we need to wait and again call retrieve\r
-                         * packets */\r
-                        BOARD_delay(1);\r
-                        txRetrievePktCnt += BoardDiag_enetLpbkRetrieveFreeTxPkts();\r
-                    }\r
-                }\r
-                else\r
-                {\r
-                    break;\r
-                }\r
-            }\r
-            \r
-            /* wait to receive the packet */\r
-            do\r
-            {\r
-                while (gRxSem != true);\r
-                gRxSem = false;\r
-\r
-                /* Get the packets received so far */\r
-                rxReadyCnt = BoardDiag_enetLpbkReceivePkts();\r
-                if (rxReadyCnt > 0U)\r
-                {\r
-                    /* Consume the received packets and release them */\r
-                    pktInfo =\r
-                    (EnetDma_Pkt *)EnetQueue_deq(&gEnetLpbk.rxReadyQ);\r
-                    while (NULL != pktInfo)\r
-                    {\r
-                        EnetDma_checkPktState(&pktInfo->pktState,\r
-                                                ENET_PKTSTATE_MODULE_APP,\r
-                                                ENET_PKTSTATE_APP_WITH_READYQ,\r
-                                                ENET_PKTSTATE_APP_WITH_FREEQ);\r
-\r
-                        /* Consume the packet by just printing its content */\r
-                        if (gEnetLpbk.printFrame)\r
-                        {\r
-                            frame = (EthFrame *)pktInfo->bufPtr;\r
-\r
-                            BoardDiag_printFrame(frame, pktInfo->userBufLen -\r
-                                        sizeof(EthFrameHeader));\r
-                        }\r
-\r
-                        /* Release the received packet */\r
-                        EnetQueue_enq(&gEnetLpbk.rxFreeQ, &pktInfo->node);\r
-                        pktInfo =\r
-                        (EnetDma_Pkt *)EnetQueue_deq(&gEnetLpbk.rxReadyQ);\r
-                    }\r
-\r
-                    /*Submit now processed buffers */\r
-                    if (status == ENET_SOK)\r
-                    {\r
-                        EnetAppUtils_validatePacketState(\r
-                                                &gEnetLpbk.rxFreeQ,\r
-                                                ENET_PKTSTATE_APP_WITH_FREEQ,\r
-                                                ENET_PKTSTATE_APP_WITH_DRIVER);\r
-\r
-                        EnetDma_submitRxPktQ(gEnetLpbk.hRxCh,\r
-                                         &gEnetLpbk.rxFreeQ);\r
-                    }\r
-                }\r
-\r
-                loopRxPktCnt += rxReadyCnt;\r
-            }\r
-            while (loopRxPktCnt < loopTxPktCnt);\r
-\r
-            gEnetLpbk.totalRxCnt += loopTxPktCnt;\r
-        }\r
-\r
-        gEnetLpbk.totalTxCnt += pktCnt;\r
-    }\r
-    \r
-    if (status == ENET_SOK)\r
-    {\r
-        if(gEnetLpbk.totalTxCnt != gEnetLpbk.totalRxCnt)\r
-        {\r
-            UART_printf("Packet loss, Test Failed\n");\r
-            return -1;\r
-        }\r
-        UART_printf("\nTransmitted - %d packets\nReceived - %d packets\n",\r
-                        gEnetLpbk.totalTxCnt, gEnetLpbk.totalRxCnt);\r
-    }\r
-    else\r
-    {\r
-        UART_printf("Failed to transmit/receive packets: %d,transmitted: %d\n",\r
-                    BOARD_DIAG_ENETLPBK_TEST_PKT_NUM, gEnetLpbk.totalTxCnt);\r
-    }\r
-\r
-    return status;\r
-}\r
-\r
-/**\r
- * \brief   CPSW delay function\r
- *\r
- * \param   waitTime     [IN]   Wait time\r
- *\r
- */\r
-static void BoardDiag_enetWait(uint32_t waitTime)\r
-{\r
-    volatile uint32_t index;\r
-\r
-    /* we multiply waitTime by 10000 as 400MHz R5 takes 2.5ns for single cycle\r
-     * and we assume for loop takes 4 cycles */\r
-    for (index = 0; index < (waitTime*1000); index++);\r
-}\r
-\r
-/**\r
- * \brief   This function Waits till phy link is up.\r
- *\r
- * \param   NULL\r
- *\r
- * \return  int32_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int32_t BoardDiag_enetLpbkWaitForLinkUp(void)\r
-{\r
-    Enet_IoctlPrms prms;\r
-    bool linked = false;\r
-    int32_t status = ENET_SOK;\r
-\r
-    ENET_IOCTL_SET_INOUT_ARGS(&prms, &gEnetLpbk.macPort, &linked);\r
-\r
-    while (!linked)\r
-    {\r
-        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                            ENET_PER_IOCTL_IS_PORT_LINK_UP, &prms);\r
-        if (status != ENET_SOK)\r
-        {\r
-            UART_printf("Failed to get port %u's link status: %d\n",\r
-                            ENET_MACPORT_ID(gEnetLpbk.macPort), status);\r
-            linked = false;\r
-            break;\r
-        }\r
-\r
-        if (!linked)\r
-        {\r
-            Enet_periodicTick(gEnetLpbk.hEnet);\r
-            BoardDiag_enetWait(1000U);\r
-        }\r
-    }\r
-\r
-    return status;\r
-}\r
-\r
-/**\r
- * \brief   This function checks the live status of the phy\r
- *\r
- * \param   NULL\r
- *\r
- * \return  int32_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int32_t BoardDiag_enetLpbkShowAlivePhys(void)\r
-{\r
-    Enet_IoctlPrms prms;\r
-    bool alive = false;\r
-    int8_t phyCnt;\r
-    int32_t status;\r
-\r
-    for (phyCnt = 0U; phyCnt < ENET_MDIO_PHY_CNT_MAX; phyCnt++)\r
-    {\r
-        ENET_IOCTL_SET_INOUT_ARGS(&prms, &phyCnt, &alive);\r
-\r
-        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                            ENET_MDIO_IOCTL_IS_ALIVE, &prms);\r
-        if (status == ENET_SOK)\r
-        {\r
-            if (alive == true)\r
-            {\r
-                UART_printf("PHY %u is alive\n", phyCnt);\r
-            }\r
-        }\r
-        else\r
-        {\r
-            UART_printf("Failed to get PHY %u alive status: %d\n", phyCnt, status);\r
-            return -1;\r
-        }\r
-    }\r
-\r
-    return status;\r
-}\r
-\r
-/**\r
- * \brief   This function is used to set the ALE port state to forward.\r
- *\r
- * \param   NULL\r
- *\r
- * \return  int32_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int32_t BoardDiag_enetLpbkSetupCpswAle(void)\r
-{\r
-    Enet_IoctlPrms prms;\r
-    CpswAle_SetPortStateInArgs setPortStateInArgs;\r
-    CpswAle_SetUcastEntryInArgs setUcastInArgs;\r
-    uint32_t entryIdx;\r
-    int32_t status;\r
-\r
-    /* ALE entry with "secure" bit cleared is required for loopback */\r
-    setUcastInArgs.addr.vlanId  = 0U;\r
-    setUcastInArgs.info.portNum = CPSW_ALE_HOST_PORT_NUM;\r
-    setUcastInArgs.info.blocked = false;\r
-    setUcastInArgs.info.secure  = false;\r
-    setUcastInArgs.info.super   = false;\r
-    setUcastInArgs.info.ageable = false;\r
-    setUcastInArgs.info.trunk   = false;\r
-\r
-    EnetUtils_copyMacAddr(&setUcastInArgs.addr.addr[0U],\r
-                          gEnetLpbk.hostMacAddr);\r
-\r
-    ENET_IOCTL_SET_INOUT_ARGS(&prms, &setUcastInArgs, &entryIdx);\r
-\r
-    status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                        CPSW_ALE_IOCTL_ADD_UCAST, &prms);\r
-    if (status != ENET_SOK)\r
-    {\r
-        UART_printf("Failed to add ucast entry: %d\n", status);\r
-    }\r
-\r
-    /* Set host port to 'forwarding' state */\r
-    if (status == ENET_SOK)\r
-    {\r
-        setPortStateInArgs.portNum   = CPSW_ALE_HOST_PORT_NUM;\r
-        setPortStateInArgs.portState = CPSW_ALE_PORTSTATE_FORWARD;\r
-        ENET_IOCTL_SET_IN_ARGS(&prms, &setPortStateInArgs);\r
-\r
-        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                            CPSW_ALE_IOCTL_SET_PORT_STATE, &prms);\r
-        if (status != ENET_SOK)\r
-        {\r
-            UART_printf("Failed to set ALE port state: %d\n", status);\r
-        }\r
-    }\r
-\r
-    return status;\r
-}\r
-\r
-/**\r
- * \brief   This function is used to initialize the receive ready packet queue\r
- *\r
- * \param   NULL\r
- *\r
- * \return  int8_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int8_t BoardDiag_enetLpbkInitRxReadyPktQ(void)\r
-{\r
-    EnetDma_PktQ rxReadyQ;\r
-    EnetDma_Pkt *pPktInfo;\r
-    int32_t status;\r
-    uint32_t memUtilsRxPkts;\r
-\r
-    EnetQueue_initQ(&gEnetLpbk.rxFreeQ);\r
-    EnetQueue_initQ(&gEnetLpbk.rxReadyQ);\r
-    EnetQueue_initQ(&rxReadyQ);\r
-\r
-    for (memUtilsRxPkts = 0U; memUtilsRxPkts < CPSW_APPMEMUTILS_NUM_RX_PKTS; memUtilsRxPkts++)\r
-    {\r
-        pPktInfo =\r
-        CpswAppMemUtils_allocEthPktFxn(&gEnetLpbk,\r
-                                       CPSW_APPMEMUTILS_LARGE_POOL_PKT_SIZE,\r
-                                       UDMA_CACHELINE_ALIGNMENT);\r
-        if(pPktInfo == NULL)\r
-        {\r
-            UART_printf("CpswAppMemUtils_allocEthPktFxn failed\n");\r
-            return -1;\r
-        }\r
-        ENET_UTILS_SET_PKT_APP_STATE(&pPktInfo->pktState,\r
-                                     ENET_PKTSTATE_APP_WITH_FREEQ);\r
-        EnetQueue_enq(&gEnetLpbk.rxFreeQ, &pPktInfo->node);\r
-    }\r
-\r
-    /* Retrieve any CPSW packets which are ready */\r
-    status = EnetDma_retrieveRxPktQ(gEnetLpbk.hRxCh, &rxReadyQ);\r
-    if(status != ENET_SOK)\r
-    {\r
-        UART_printf("EnetDma_retrieveRxPktQ failed\n");\r
-        return -1;\r
-    }\r
-    /* There should not be any packet with DMA during init */\r
-    if(EnetQueue_getQCount(&rxReadyQ) != 0U)\r
-    {\r
-        UART_printf("EnetQueue_getQCount failed\n");\r
-        return -1;\r
-    }\r
-\r
-    EnetAppUtils_validatePacketState(&gEnetLpbk.rxFreeQ,\r
-                                     ENET_PKTSTATE_APP_WITH_FREEQ,\r
-                                     ENET_PKTSTATE_APP_WITH_DRIVER);\r
-\r
-    EnetDma_submitRxPktQ(gEnetLpbk.hRxCh,\r
-                         &gEnetLpbk.rxFreeQ);\r
-\r
-    /* Assert here as during init no. of DMA descriptors should be equal to\r
-     * no. of free Ethernet buffers available with app */\r
-    if(EnetQueue_getQCount(&gEnetLpbk.rxFreeQ) != 0U)\r
-    {\r
-        UART_printf("EnetQueue_getQCount failed\n");\r
-        return -1;\r
-    }\r
-    return 0;\r
-}\r
-\r
-/**\r
- * \brief   This function is used to initialize the free packet\r
- *          info queue with the Ethernet packets to be transmitted.\r
- *\r
- * \param   NULL\r
- *\r
- * \return  int8_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int8_t BoardDiag_enetLpbkInitTxFreePktQ(void)\r
-{\r
-    EnetDma_Pkt *pPktInfo;\r
-    uint32_t memUtilsTxPkts;\r
-\r
-    /* Initialize all queues */\r
-    EnetQueue_initQ(&gEnetLpbk.txFreePktInfoQ);\r
-\r
-    /* Initialize TX EthPkts and queue them to txFreePktInfoQ */\r
-    for (memUtilsTxPkts = 0U; memUtilsTxPkts < CPSW_APPMEMUTILS_NUM_TX_PKTS; memUtilsTxPkts++)\r
-    {\r
-        pPktInfo = \r
-        CpswAppMemUtils_allocEthPktFxn(&gEnetLpbk,\r
-                                       CPSW_APPMEMUTILS_LARGE_POOL_PKT_SIZE,\r
-                                       UDMA_CACHELINE_ALIGNMENT);\r
-        if(pPktInfo == NULL)\r
-        {\r
-            UART_printf("CpswAppMemUtils_allocEthPktFxn failed\n");\r
-            return -1;\r
-        }\r
-        ENET_UTILS_SET_PKT_APP_STATE(&pPktInfo->pktState,\r
-                                     ENET_PKTSTATE_APP_WITH_FREEQ);\r
-\r
-        EnetQueue_enq(&gEnetLpbk.txFreePktInfoQ, &pPktInfo->node);\r
-    }\r
-\r
-    UART_printf("initQs() txFreePktInfoQ initialized with %d pkts\n",\r
-                       EnetQueue_getQCount(&gEnetLpbk.txFreePktInfoQ));\r
-    return 0;\r
-}\r
-\r
-/**\r
- * \brief   This function is used to open the CPSW DMA module\r
- *\r
- * \param   NULL\r
- *\r
- * \return  int8_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int8_t BoardDiag_enetLpbkOpenDma()\r
-{\r
-    int32_t status = ENET_SOK;\r
-    EnetCpdma_OpenRxChPrms rxChCfg;\r
-    EnetCpdma_OpenTxChPrms txChCfg;\r
-\r
-    /* Open the CPSW TX channel  */\r
-    if (status == ENET_SOK)\r
-    {\r
-        EnetDma_initTxChParams(&txChCfg);\r
-\r
-        txChCfg.cbArg   = &gEnetLpbk;\r
-        txChCfg.notifyCb = BoardDiag_enetLpbkTxIsrFxn;\r
-\r
-        EnetAppUtils_setCommonTxChPrms(&txChCfg);\r
-\r
-        EnetAppUtils_openTxCh(gEnetLpbk.hEnet,\r
-                              gEnetLpbk.coreKey,\r
-                              gEnetLpbk.coreId,\r
-                              &gEnetLpbk.txChNum,\r
-                              &gEnetLpbk.hTxCh,\r
-                              &txChCfg);\r
-\r
-        if(BoardDiag_enetLpbkInitTxFreePktQ() != BOARD_DIAG_SUCCESS)\r
-        {\r
-            UART_printf("BoardDiag_enetLpbkInitTxFreePktQ Failed\n");\r
-            return -1;\r
-        }\r
-\r
-        if (NULL == gEnetLpbk.hTxCh)\r
-        {\r
-            /* Free the Ch Num if open Tx Ch failed */\r
-            EnetAppUtils_freeTxCh(gEnetLpbk.hEnet,\r
-                                  gEnetLpbk.coreKey,\r
-                                  gEnetLpbk.coreId,\r
-                                  gEnetLpbk.txChNum);\r
-            UART_printf("EnetDma_openTxCh() failed to open: %d\n",\r
-                               status);\r
-        }\r
-    }\r
-\r
-    /* Open the CPSW RX Channel  */\r
-    if (status == ENET_SOK)\r
-    {\r
-        EnetDma_initRxChParams(&rxChCfg);\r
-        rxChCfg.notifyCb = BoardDiag_enetLpbkRxIsrFxn;\r
-        rxChCfg.cbArg   = &gEnetLpbk;\r
-\r
-        EnetAppUtils_setCommonRxChPrms(&rxChCfg);\r
-\r
-        EnetAppUtils_openRxCh(gEnetLpbk.hEnet,\r
-                              gEnetLpbk.coreKey,\r
-                              gEnetLpbk.coreId,\r
-                              &gEnetLpbk.rxChNum,\r
-                              &gEnetLpbk.hRxCh,\r
-                              &rxChCfg);\r
-\r
-        if (NULL == gEnetLpbk.hRxCh)\r
-        {\r
-            EnetAppUtils_freeRxCh(gEnetLpbk.hEnet,\r
-                                  gEnetLpbk.coreKey,\r
-                                  gEnetLpbk.coreId,\r
-                                  gEnetLpbk.rxChNum);\r
-            UART_printf("EnetDma_openRxCh() failed to open: %d\n",\r
-                               status);\r
-\r
-           /* TODO: should we close TxCh here */\r
-        }\r
-        else\r
-        {\r
-            status = EnetAppUtils_allocMac(gEnetLpbk.hEnet,\r
-                                           gEnetLpbk.coreKey,\r
-                                           gEnetLpbk.coreId,\r
-                                           gEnetLpbk.hostMacAddr);\r
-            UART_printf("Host MAC address: ");\r
-            BoardDiag_printMacAddr(gEnetLpbk.hostMacAddr);\r
-            /* Submit all ready RX buffers to DMA.*/\r
-            if(BoardDiag_enetLpbkInitRxReadyPktQ() != BOARD_DIAG_SUCCESS)\r
-            {\r
-                UART_printf("BoardDiag_enetLpbkInitRxReadyPktQ failed\n");\r
-                return -1;\r
-            }\r
-        }\r
-    }\r
-    if(status != ENET_SOK)\r
-    {\r
-        return -1;\r
-    }\r
-    return 0;\r
-}\r
-\r
-/**\r
- * \brief   This function is used set MII mode.\r
- *\r
- * \param   emac_mode       macMode   mac mode\r
- *          EnetPhy_Mii     *mii      MII mode\r
- *\r
- * \return  int8_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int8_t BoardDiag_enetLpbkMacMode2PhyMii(emac_mode macMode,\r
-                                    EnetPhy_Mii *mii)\r
-{\r
-    switch (macMode)\r
-    {\r
-        case RMII:\r
-            *mii = ENETPHY_MAC_MII_RMII;\r
-            break;\r
-        case RGMII:\r
-            *mii = ENETPHY_MAC_MII_RGMII;\r
-            break;\r
-        default:\r
-            UART_printf("Invalid MAC mode: %u\n", macMode);\r
-            return -1;\r
-    }\r
-    return 0;\r
-}\r
-\r
-\r
-/**\r
- * \brief   This function is used set layerType,sublayerType and variantType.\r
- *\r
- * \param   emac_mode                   macMode   mac mode\r
- *          EnetMacPort_Interface       *mii      MII mode\r
- *\r
- * \return  int8_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int8_t BoardDiag_enetLpbkMacMode2MacMii(emac_mode macMode,\r
-                                    EnetMacPort_Interface *mii)\r
-{\r
-    switch (macMode)\r
-    {\r
-        case RMII:\r
-            mii->layerType    = ENET_MAC_LAYER_MII;\r
-            mii->sublayerType = ENET_MAC_SUBLAYER_REDUCED;\r
-            mii->variantType  = ENET_MAC_VARIANT_NONE;\r
-            break;\r
-        case RGMII:\r
-            mii->layerType    = ENET_MAC_LAYER_GMII;\r
-            mii->sublayerType = ENET_MAC_SUBLAYER_REDUCED;\r
-            mii->variantType  = ENET_MAC_VARIANT_FORCED;\r
-            break;\r
-        default:\r
-            UART_printf("Invalid MAC mode: %u\n", macMode);\r
-            return -1;\r
-    }\r
-    return 0;\r
-}\r
-\r
-/**\r
- * \brief   This function is used init cpsw configurations.\r
- *\r
- * \param   Cpsw_Cfg *cpswCfg           cpsw configurations\r
- *\r
- * \return  NULL\r
- *\r
- */\r
-static void BoardDiag_enetLpbkInitCpswCfg(Cpsw_Cfg *cpswCfg)\r
-{\r
-    CpswHostPort_Cfg *hostPortCfg = &cpswCfg->hostPortCfg;\r
-    CpswAle_Cfg *aleCfg = &cpswCfg->aleCfg;\r
-    CpswCpts_Cfg *cptsCfg = &cpswCfg->cptsCfg;\r
-\r
-    /* Set initial config */\r
-    Enet_initCfg(gEnetLpbk.enetType, gEnetLpbk.instId, cpswCfg,\r
-                sizeof(*cpswCfg));\r
-\r
-    /* Peripheral config */\r
-    cpswCfg->vlanCfg.vlanAware = false;\r
-\r
-    /* Host port config */\r
-    hostPortCfg->removeCrc      = true;\r
-    hostPortCfg->padShortPacket = true;\r
-    hostPortCfg->passCrcErrors  = true;\r
-\r
-    /* ALE config */\r
-    aleCfg->modeFlags                          = CPSW_ALE_CFG_MODULE_EN;\r
-    aleCfg->agingCfg.enableAutoAging           = true;\r
-    aleCfg->agingCfg.agingPeriodInMs           = 1000;\r
-    aleCfg->nwSecCfg.enableVid0Mode            = true;\r
-    aleCfg->vlanCfg.aleVlanAwareMode           = false;\r
-    aleCfg->vlanCfg.cpswVlanAwareMode          = false;\r
-    aleCfg->vlanCfg.unknownUnregMcastFloodMask = CPSW_ALE_ALL_PORTS_MASK;\r
-    aleCfg->vlanCfg.unknownRegMcastFloodMask   = CPSW_ALE_ALL_PORTS_MASK;\r
-    aleCfg->vlanCfg.unknownVlanMemberListMask  = CPSW_ALE_ALL_PORTS_MASK;\r
-\r
-    /* CPTS config */\r
-    /* Note: Timestamping and MAC loopback are not supported together because\r
-     * of IP limitation, so disabling timestamping for this application */\r
-    cptsCfg->hostRxTsEn = false;\r
-\r
-    EnetAppUtils_initResourceConfig(gEnetLpbk.enetType, gEnetLpbk.coreId,\r
-                                    &cpswCfg->resCfg);\r
-}\r
-\r
-/**\r
- * \brief   This function is used to open the ENET driver\r
- *\r
- * \param   NULL\r
- *\r
- * \return  int8_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int8_t BoardDiag_enetLpbkOpenEnet(void)\r
-{\r
-    Cpsw_Cfg cpswCfg;\r
-\r
-    Enet_IoctlPrms prms;\r
-    EnetPer_PortLinkCfg portLinkCfg;\r
-    CpswMacPort_Cfg macCfg;\r
-    int32_t status = ENET_SOK;\r
-\r
-    /* Initialize peripheral config */\r
-    BoardDiag_enetLpbkInitCpswCfg(&cpswCfg);\r
-\r
-    UART_printf("CPSW_2G Test on MCU NAVSS\n");\r
\r
-    /* Set Enet global runtime log level */\r
-    Enet_setTraceLevel(ENET_TRACE_DEBUG);\r
-\r
-    /* Open the Enet driver */\r
-    gEnetLpbk.hEnet = Enet_open(gEnetLpbk.enetType, gEnetLpbk.instId, &cpswCfg,\r
-                                sizeof(cpswCfg));\r
-\r
-    if (gEnetLpbk.hEnet == NULL)\r
-    {\r
-        UART_printf("Failed to open Enet driver\n");\r
-        return -1;\r
-    }\r
-\r
-    /* Setup port link open parameters */\r
-    if (status == ENET_SOK)\r
-    {\r
-        EnetBoard_EthPort ethPort;\r
-        EnetMacPort_LinkCfg *linkCfg = &portLinkCfg.linkCfg;\r
-        EnetMacPort_Interface *mii = &portLinkCfg.mii;\r
-        EnetPhy_Cfg *phyCfg = &portLinkCfg.phyCfg;\r
-        EnetPhy_Mii phyMii;\r
-\r
-        /* Setup board for requested Ethernet port */\r
-        ethPort.enetType = gEnetLpbk.enetType;\r
-        ethPort.instId   = gEnetLpbk.instId;\r
-        ethPort.macPort  = gEnetLpbk.macPort;\r
-        ethPort.boardId  = gEnetLpbk.boardId;\r
-        if(BoardDiag_enetLpbkMacMode2MacMii(gEnetLpbk.macMode, &ethPort.mii) != \r
-                                            BOARD_DIAG_SUCCESS)\r
-        {\r
-            UART_printf("BoardDiag_enetLpbkMacMode2MacMii failed\n");\r
-            return -1;\r
-        }\r
-\r
-        status = EnetBoard_setupPorts(&ethPort, 1U);\r
-        if(status != ENET_SOK)\r
-        {\r
-            UART_printf("EnetBoard_setupPorts failed\n");\r
-            return -1;\r
-        }\r
-\r
-        /* Set port link params */\r
-        portLinkCfg.macPort = gEnetLpbk.macPort;\r
-        portLinkCfg.macCfg = &macCfg;\r
-\r
-        CpswMacPort_initCfg(&macCfg);\r
-\r
-        if(BoardDiag_enetLpbkMacMode2MacMii(gEnetLpbk.macMode, mii) \r
-                                            != BOARD_DIAG_SUCCESS)\r
-        {\r
-            UART_printf("BoardDiag_enetLpbkMacMode2MacMii failed\n");\r
-            return -1;\r
-        }\r
-\r
-        if (gEnetLpbk.testPhyLoopback)\r
-        {\r
-            const EnetBoard_PhyCfg *boardPhyCfg = NULL;\r
-\r
-            /* Set PHY configuration params */\r
-            EnetPhy_initCfg(phyCfg);\r
-\r
-            if (BoardDiag_enetLpbkMacMode2PhyMii(gEnetLpbk.macMode, &phyMii) \r
-                                                == BOARD_DIAG_SUCCESS)\r
-            {\r
-                boardPhyCfg = EnetBoard_getPhyCfg(&ethPort);\r
-                if (boardPhyCfg != NULL)\r
-                {\r
-                    phyCfg->phyAddr     = boardPhyCfg->phyAddr;\r
-                    phyCfg->isStrapped  = boardPhyCfg->isStrapped;\r
-                    phyCfg->skipExtendedCfg = boardPhyCfg->skipExtendedCfg;\r
-                    phyCfg->extendedCfgSize = boardPhyCfg->extendedCfgSize;\r
-                    memcpy(phyCfg->extendedCfg, boardPhyCfg->extendedCfg,\r
-                            phyCfg->extendedCfgSize);\r
-                }\r
-                else\r
-                {\r
-                    UART_printf("PHY info not found\n");\r
-                    return -1;\r
-                }\r
-\r
-                if ((phyMii == ENETPHY_MAC_MII_MII) ||\r
-                    (phyMii == ENETPHY_MAC_MII_RMII))\r
-                {\r
-                    linkCfg->speed = ENET_SPEED_100MBIT;\r
-                }\r
-                else\r
-                {\r
-                    /* TODO: TPR12 always 100 Mbits */\r
-                    linkCfg->speed = ENET_SPEED_100MBIT;\r
-                }\r
-\r
-                linkCfg->duplexity = ENET_DUPLEX_FULL;\r
-            }\r
-            else\r
-            {\r
-                UART_printf("BoardDiag_enetLpbkMacMode2PhyMii failed\n");\r
-                return -1;\r
-            }\r
-        }\r
-        else\r
-        {\r
-            phyCfg->phyAddr = ENETPHY_INVALID_PHYADDR;\r
-\r
-            if (mii->layerType == ENET_MAC_LAYER_MII)\r
-            {\r
-                linkCfg->speed = ENET_SPEED_100MBIT;\r
-            }\r
-            else\r
-            {\r
-                linkCfg->speed = ENET_SPEED_1GBIT;\r
-            }\r
-\r
-            linkCfg->duplexity = ENET_DUPLEX_FULL;\r
-\r
-        }\r
-\r
-        /* MAC and PHY loopbacks are mutually exclusive */\r
-        phyCfg->enableLoopback = gEnetLpbk.testPhyLoopback &&\r
-                                 !gEnetLpbk.testExtLoopback;\r
-\r
-        macCfg.loopbackEn = !gEnetLpbk.testPhyLoopback;\r
-    }\r
-\r
-    /* Open port link */\r
-    if (status == ENET_SOK)\r
-    {\r
-        ENET_IOCTL_SET_IN_ARGS(&prms, &portLinkCfg);\r
-\r
-        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                            ENET_PER_IOCTL_OPEN_PORT_LINK, &prms);\r
-        if (status != ENET_SOK)\r
-        {\r
-            UART_printf("Failed to open port link: %d\n", status);\r
-            return -1;\r
-        }\r
-    }\r
-\r
-    return 0;\r
-}\r
-\r
-/**\r
- * \brief   This function is used to initialiaze the enet\r
-            parameters(gEnetLpbk) Ethernet external loopback test.\r
- *\r
- * \param   NULL\r
- *\r
- * \return  NULL\r
- *\r
- */\r
-static void BoardDiag_enetIniParams()\r
-{\r
-     /* Initialize loopback test config */\r
-    memset(&gEnetLpbk, 0, sizeof(gEnetLpbk));\r
-    \r
-    gEnetLpbk.enetType        = ENET_CPSW_9G;\r
-    gEnetLpbk.instId          = 0U;\r
-    gEnetLpbk.testPhyLoopback = true;\r
-    gEnetLpbk.testExtLoopback = true;\r
-    gEnetLpbk.macPort         = ENET_MAC_PORT_1;\r
-    gEnetLpbk.macMode         = RGMII;\r
-    gEnetLpbk.enetType        = ENET_CPSW_2G;\r
-    gEnetLpbk.boardId         = ENETBOARD_CPB_ID;\r
-\r
-}\r
-\r
-/**\r
- * \brief   This function is used to perform the CPSW\r
- *          Ethernet external loopback test\r
- *\r
- * \param   NULL\r
- *\r
- * \return  int8_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-static int8_t BoardDiag_cpswLoopbackTest()\r
-{\r
-    EnetOsal_Cfg osalCfg;\r
-    EnetUtils_Cfg utilsCfg;\r
-    Enet_IoctlPrms prms;\r
-    int32_t status;\r
-\r
-    /* Initialize the phy configurations */\r
-    EnetBoard_init();\r
-\r
-    /* Initialize the enet parameters */\r
-    BoardDiag_enetIniParams();\r
-\r
-    EnetAppUtils_enableClocks(gEnetLpbk.enetType);\r
-\r
-    /* Local core id */\r
-    gEnetLpbk.coreId = EnetSoc_getCoreId();\r
-\r
-    /* Initialize Enet driver (use default OSAL and utils) */\r
-    Enet_initOsalCfg(&osalCfg);\r
-    Enet_initUtilsCfg(&utilsCfg);\r
-    utilsCfg.print = EnetAppUtils_print;\r
-    Enet_init(&osalCfg, &utilsCfg);\r
-\r
-    /* Open Enet driver */\r
-    status = BoardDiag_enetLpbkOpenEnet();\r
-    if (status != 0)\r
-    {\r
-        UART_printf("Failed to open Enet driver: %d\n", status);\r
-        return -1;\r
-    }\r
-\r
-    if (status == ENET_SOK)\r
-    {\r
-        /* Attach the core with RM */\r
-        uint32_t coreId;\r
-        EnetPer_AttachCoreOutArgs attachCoreOutArgs;\r
-        coreId = gEnetLpbk.coreId;\r
-\r
-        ENET_IOCTL_SET_INOUT_ARGS(&prms, &coreId, &attachCoreOutArgs);\r
-        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                            ENET_PER_IOCTL_ATTACH_CORE, &prms);\r
-        if (status != ENET_SOK)\r
-        {\r
-            UART_printf("EnetLpbk_loopbackTest failed"\r
-                         "ENET_PER_IOCTL_ATTACH_CORE: %d\n", status);\r
-            return -1;\r
-        }\r
-        else\r
-        {\r
-            gEnetLpbk.coreKey = attachCoreOutArgs.coreKey;\r
-        }\r
-    }\r
-\r
-    if (status == ENET_SOK)\r
-    {\r
-        /* memutils open should happen after Cpsw is opened as it uses \r
-         * CpswUtils_Q functions */\r
-        status = CpswAppMemUtils_init();\r
-        if (status != ENET_SOK)\r
-        {\r
-            UART_printf("CpswAppMemUtils_init failed: "\r
-                        "%d\n", status);\r
-            return -1;\r
-        }\r
-    }\r
-\r
-    /* Open DMA driver */\r
-    if (status == ENET_SOK)\r
-    {\r
-        status = BoardDiag_enetLpbkOpenDma();\r
-        if (status != ENET_SOK)\r
-        {\r
-            UART_printf("Failed to open DMA: %d\n", status);\r
-            return -1;\r
-        }\r
-    }\r
-\r
-    /* Enable host port */\r
-    if (status == ENET_SOK)\r
-    {\r
-        if (Enet_isCpswFamily(gEnetLpbk.enetType))\r
-        {\r
-            status = BoardDiag_enetLpbkSetupCpswAle();\r
-            if (status != ENET_SOK)\r
-            {\r
-                UART_printf("Failed to setup CPSW ALE: %d\n", status);\r
-                return -1;\r
-            }\r
-        }\r
-\r
-        if (status == ENET_SOK)\r
-        {\r
-            ENET_IOCTL_SET_NO_ARGS(&prms);\r
-            status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                                ENET_HOSTPORT_IOCTL_ENABLE, &prms);\r
-            if (status != ENET_SOK)\r
-            {\r
-                UART_printf("Failed to enable host port: %d\n", status);\r
-                return -1;\r
-            }\r
-        }\r
-    }\r
-\r
-    /* Show alive PHYs */\r
-    if (status == ENET_SOK)\r
-    {\r
-        status = BoardDiag_enetLpbkShowAlivePhys();\r
-    }\r
-\r
-    /* Wait for link up */\r
-    if ((status == ENET_SOK) && gEnetLpbk.testPhyLoopback)\r
-    {\r
-        status = BoardDiag_enetLpbkWaitForLinkUp();\r
-    }\r
-\r
-    /* Do packet transmission and reception */\r
-    if (status == ENET_SOK)\r
-    {\r
-       status = BoardDiag_cpswPktRxTx();\r
-    }\r
-\r
-    /* Print network statistics */\r
-    if (status == ENET_SOK)\r
-    {\r
-        if (Enet_isCpswFamily(gEnetLpbk.enetType))\r
-        {\r
-            BoardDiag_enetLpbkShowCpswStats();\r
-        }\r
-    }\r
-\r
-    /* Disable host port */\r
-    if (status == ENET_SOK)\r
-    {\r
-        ENET_IOCTL_SET_NO_ARGS(&prms);\r
-        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,\r
-                            ENET_HOSTPORT_IOCTL_DISABLE, &prms);\r
-        if (status != ENET_SOK)\r
-        {\r
-            UART_printf("Failed to disable host port: %d\n", status);\r
-            return -1;\r
-        }\r
-    }\r
-\r
-    /* Print DMA statistics */\r
-    if (status == ENET_SOK)\r
-    {\r
-        EnetAppUtils_showRxChStats(gEnetLpbk.hRxCh);\r
-        EnetAppUtils_showTxChStats(gEnetLpbk.hTxCh);\r
-    }\r
-\r
-    /* Close Enet DMA driver */\r
-    BoardDiag_enetLpbkCloseDma();\r
-\r
-    /* Close Enet driver */\r
-    BoardDiag_enetLpbkCloseEnet();\r
-\r
-    /* Disable peripheral clocks */\r
-    EnetAppUtils_disableClocks(gEnetLpbk.enetType);\r
-\r
-    /* Deinit Enet driver */\r
-    Enet_deinit();\r
-    UART_printf("Deinitializing of Enet driver done\n");\r
-\r
-    if(status == ENET_SOK)\r
-    {\r
-        UART_printf("Test Passed\n");\r
-    }\r
-    else\r
-    {\r
-        UART_printf("Test Failed\n");\r
-        return -1;\r
-    }\r
-\r
-    return 0;\r
-}\r
-\r
-/**\r
- *  \brief    This function runs CPSW ethernet test\r
- *\r
- *  \return   int8_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-int8_t BoardDiag_cpswEthRunTest(void)\r
-{\r
-    int8_t ret;\r
-\r
-    UART_printf("\n*********************************************\n");\r
-    UART_printf  ("*            ENET Ethernet Test             *\n");\r
-    UART_printf  ("*********************************************\n");\r
-\r
-    /* Run the loopback test */\r
-    ret = BoardDiag_cpswLoopbackTest();\r
-\r
-    return ret;\r
-}\r
-\r
-/**\r
- * \brief  CPSW diagnostic test main function\r
- *\r
- *  This function performs board initializations and calls cpsw ethernet test\r
- *\r
- * \return  int\r
- *              0  - in case of success\r
- *             -1  - in case of failure\r
- *\r
- */\r
-#ifndef SPI_BOOT_FRAMEWORK\r
-int main(void)\r
-{\r
-    Board_initCfg boardCfg;\r
-    Board_STATUS status;\r
-    int8_t ret = 0;\r
-\r
-#ifdef PDK_RAW_BOOT\r
-    boardCfg = BOARD_INIT_MODULE_CLOCK |\r
-               BOARD_INIT_PINMUX_CONFIG |\r
-               BOARD_INIT_UART_STDIO;\r
-#else\r
-    boardCfg = BOARD_INIT_UART_STDIO | BOARD_INIT_PINMUX_CONFIG;\r
-#endif\r
-\r
-    status = Board_init(boardCfg);\r
-    if(status != BOARD_SOK)\r
-    {\r
-        return -1;\r
-    }\r
-\r
-    ret = BoardDiag_cpswEthRunTest();\r
-    if(ret == 0)\r
-    {\r
-        UART_printf("CPSW Loopback Test Passed\n\r");\r
-        UART_printf("All tests have passed\n\r");\r
-    }\r
-    else\r
-    {\r
-        UART_printf("CPSW Loopback Test failed\n\r");\r
-    }\r
-\r
-    return ret;\r
-\r
-}\r
-#endif\r
-\r
+/******************************************************************************
+* Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of Texas Instruments Incorporated nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*****************************************************************************/
+
+/**
+ *  \file   cpsw_eth_test.c
+ *
+ *  \brief  CPSW ethernet diagnostic test file
+ *
+ *  Targeted Functionality: Verification of basic functionality of
+ *  CPSW Ethernet interface.
+ *
+ *  Operation: This is the Loopback test code for the Ethernet Interface.
+ *  The test code showcases usage of the CPSW Driver exported API for
+ *  sending/receiving Ethernet packets.
+ *
+ *  Supported SoCs: TPR12.
+ *
+ *  Supported Platforms:tpr12_evm.
+ *
+ */
+
+/* Test application local header file */
+#include "cpsw_eth_test.h"
+
+/* Trasnmitt and receive status variables */
+static volatile bool gTxSem = false;
+static volatile bool gRxSem = false;
+
+/* Enet loopback test object */
+static BoardDiag_EnetLpbkObj_t gEnetLpbk;
+
+/**
+ * \brief   ENET receive ISR function
+ *
+ * \param   void *appData   application data
+ *
+ * \return  NULL
+ */
+static void BoardDiag_enetLpbkRxIsrFxn(void *appData)
+{
+    gRxSem = true;
+}
+
+/**
+ * \brief   ENET transmit ISR function
+ *
+ * \param   void *appData   application data
+ *
+ * \return  NULL
+ */
+static void BoardDiag_enetLpbkTxIsrFxn(void *appData)
+{
+    gTxSem = true;
+}
+
+/**
+ * \brief   This function is used for close the ENET module.
+ *
+ * \param   NULL
+ *
+ * \return  NULL
+ */
+static void BoardDiag_enetLpbkCloseEnet(void)
+{
+    Enet_IoctlPrms prms;
+    int32_t status;
+
+    /* Close port link */
+    ENET_IOCTL_SET_IN_ARGS(&prms, &gEnetLpbk.macPort);
+
+    status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                        ENET_PER_IOCTL_CLOSE_PORT_LINK, &prms);
+    if (status != ENET_SOK)
+    {
+        UART_printf("Failed to close port link: %d\n", status);
+    }
+
+#if !defined(SOC_TPR12)
+    /* Detach core */
+    if (status == ENET_SOK)
+    {
+        ENET_IOCTL_SET_IN_ARGS(&prms, &gEnetLpbk.coreKey);
+
+        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                            ENET_PER_IOCTL_DETACH_CORE, &prms);
+        if (status != ENET_SOK)
+        {
+            UART_printf("Failed to detach core key %u: %d\n", gEnetLpbk.coreKey, status);
+        }
+    }
+#endif
+    /* Close Enet driver */
+    Enet_close(gEnetLpbk.hEnet);
+
+    gEnetLpbk.hEnet = NULL;
+}
+
+/**
+ * \brief   This function is used for de-initialize the ENET DMA driver.
+ *
+ * \param   NULL
+ *
+ * \return  NULL
+ */
+static void BoardDiag_enetLpbkCloseDma()
+{
+    EnetDma_PktQ fqPktInfoQ;
+    EnetDma_PktQ cqPktInfoQ;
+
+    EnetQueue_initQ(&fqPktInfoQ);
+    EnetQueue_initQ(&cqPktInfoQ);
+
+    UART_printf("Closing DMA\n");
+    /* There should not be any ready packet */
+    if(EnetQueue_getQCount(&gEnetLpbk.rxReadyQ) != 0)
+    {
+        UART_printf("EnetQueue_getQCount Failed\n");
+        return;
+    }
+
+    /* Close RX Flow */
+    EnetAppUtils_closeRxCh(gEnetLpbk.hEnet,
+                           gEnetLpbk.coreKey,
+                           gEnetLpbk.coreId,
+                           &fqPktInfoQ,
+                           &cqPktInfoQ,
+                           gEnetLpbk.hRxCh,
+                           gEnetLpbk.rxChNum);
+    EnetAppUtils_freePktInfoQ(&fqPktInfoQ);
+    EnetAppUtils_freePktInfoQ(&cqPktInfoQ);
+
+    /* Close TX channel */
+    EnetQueue_initQ(&fqPktInfoQ);
+    EnetQueue_initQ(&cqPktInfoQ);
+
+    EnetAppUtils_closeTxCh(gEnetLpbk.hEnet,
+                           gEnetLpbk.coreKey,
+                           gEnetLpbk.coreId,
+                           &fqPktInfoQ,
+                           &cqPktInfoQ,
+                           gEnetLpbk.hTxCh,
+                           gEnetLpbk.txChNum);
+    EnetAppUtils_freePktInfoQ(&fqPktInfoQ);
+    EnetAppUtils_freePktInfoQ(&cqPktInfoQ);
+
+    EnetAppUtils_freePktInfoQ(&gEnetLpbk.rxFreeQ);
+    EnetAppUtils_freePktInfoQ(&gEnetLpbk.txFreePktInfoQ);
+
+    EnetMem_deInit();
+}
+
+/**
+ * \brief   This function is used to Mac port statistics
+ *
+ * \param   CpswStats_HostPort_2g *st   Cpsw stats
+ *
+ * \return  NULL
+ */
+static void BoardDiag_printMacPortStats2G(CpswStats_MacPort_2g *st)
+{
+    uint32_t i;
+
+    UART_printf("rxGoodFrames            = %d\n", (uint32_t)st->rxGoodFrames);
+    UART_printf("rxBcastFrames           = %d\n", (uint32_t)st->rxBcastFrames);
+    UART_printf("rxOctets                = %d\n", (uint32_t)st->rxOctets);
+    UART_printf("txGoodFrames            = %d\n", (uint32_t)st->txGoodFrames);
+    UART_printf("txBcastFrames           = %d\n", (uint32_t)st->txBcastFrames);
+    UART_printf("txOctets                = %d\n", (uint32_t)st->txOctets);
+    UART_printf("octetsFrames512to1023   = %d\n",
+                (uint32_t)st->octetsFrames512to1023);
+
+    for (i = 0U; i < ENET_ARRAYSIZE((uint32_t)st->txPri); i++)
+    {
+        UART_printf("txPri[%u]                = %d\n", i,
+                    (uint32_t)st->txPri[i]);
+    }
+
+    for (i = 0U; i < ENET_ARRAYSIZE((uint32_t)st->txPriBcnt); i++)
+    {
+        UART_printf("txPriBcnt[%u]            = %d\n", i,
+                    (uint32_t)st->txPriBcnt[i]);
+    }
+}
+
+/**
+ * \brief   This function is used to Host port statistics
+ *
+ * \param   CpswStats_HostPort_2g *st   Cpsw stats
+ *
+ * \return  NULL
+ */
+static void BoardDiag_printHostPortStats2G(CpswStats_HostPort_2g *st)
+{
+    UART_printf("rxGoodFrames            = %d\n", (uint32_t)st->rxGoodFrames);
+    UART_printf("rxBcastFrames           = %u\n", (uint32_t)st->rxBcastFrames);
+    UART_printf("rxOctets                = %d\n", (uint32_t)st->rxOctets);
+    UART_printf("txGoodFrames            = %d\n", (uint32_t)st->txGoodFrames);
+    UART_printf("txBcastFrames           = %d\n", (uint32_t)st->txBcastFrames);
+    UART_printf("txOctets                = %d\n", (uint32_t)st->txOctets);
+    UART_printf("octetsFrames512to1023   = %d\n",
+                (uint32_t)st->octetsFrames512to1023);
+}
+
+/**
+ * \brief   This function is used to display Mac and Host port statistics
+ *
+ * \param   NULL
+ *
+ * \return  NULL
+ *
+ */
+static void BoardDiag_enetLpbkShowCpswStats(void)
+{
+    Enet_IoctlPrms prms;
+    CpswStats_PortStats portStats;
+    int32_t status;
+
+    /* Show host port statistics */
+    ENET_IOCTL_SET_OUT_ARGS(&prms, &portStats);
+    status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                        ENET_STATS_IOCTL_GET_HOSTPORT_STATS, &prms);
+    if (status == ENET_SOK)
+    {
+        UART_printf("\n Port 0 Statistics\n");
+        UART_printf("-----------------------------------------\n");
+        BoardDiag_printHostPortStats2G((CpswStats_HostPort_2g *)&portStats);
+        UART_printf("\n");
+    }
+    else
+    {
+        UART_printf("Failed to get host stats: %d\n", status);
+    }
+
+    /* Show MAC port statistics */
+    if (status == ENET_SOK)
+    {
+        ENET_IOCTL_SET_INOUT_ARGS(&prms, &gEnetLpbk.macPort, &portStats);
+        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                            ENET_STATS_IOCTL_GET_MACPORT_STATS, &prms);
+        if (status == ENET_SOK)
+        {
+            UART_printf("\n Port 1 Statistics\n");
+            UART_printf("-----------------------------------------\n");
+            BoardDiag_printMacPortStats2G((CpswStats_MacPort_2g *)&portStats);
+            UART_printf("\n");
+        }
+        else
+        {
+            UART_printf("Failed to get MAC stats: %d\n", status);
+        }
+    }
+}
+
+/**
+ * \brief   This function is used to display Mac address
+ *
+ * \param   uint8_t macAddr[] MAC Address
+ *
+ * \return   NULL
+ *
+ */
+static void BoardDiag_printMacAddr(uint8_t macAddr[])
+{
+    UART_printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
+                       macAddr[0] & 0xFF,
+                       macAddr[1] & 0xFF,
+                       macAddr[2] & 0xFF,
+                       macAddr[3] & 0xFF,
+                       macAddr[4] & 0xFF,
+                       macAddr[5] & 0xFF);
+}
+
+/**
+ * \brief   This function is used to display Mac address
+ *
+ * \param   EthFrame EthFrame[] frame to be displayed
+ *          uint32_t len        length of the frame
+ * \return  NULL
+ *
+ */
+static void BoardDiag_printFrame(EthFrame *frame,
+                                uint32_t len)
+{
+    uint8_t *payload;
+    uint32_t i;
+
+    UART_printf("Dst addr : ");
+    BoardDiag_printMacAddr(&frame->hdr.dstMac[0]);
+
+    UART_printf("Src addr : ");
+    BoardDiag_printMacAddr(&frame->hdr.srcMac[0]);
+
+    if (frame->hdr.etherType == htons(ETHERTYPE_VLAN_TAG))
+    {
+        EthVlanFrame *vlanFrame = (EthVlanFrame *)frame;
+
+        UART_printf("TPID     : 0x%04x\n", 
+                    ntohs(vlanFrame->hdr.tpid) & 0xFFFFU);
+        UART_printf("Priority : %d\n",
+                    (ntohs(vlanFrame->hdr.tci) & 0xFFFFU) >> 13);
+        UART_printf("VLAN Id  : %d\n",
+                    ntohs(vlanFrame->hdr.tci) & 0xFFFU);
+        UART_printf("EtherType: 0x%04x\n",
+                    ntohs(vlanFrame->hdr.etherType) & 0xFFFFU);
+        payload = vlanFrame->payload;
+        len    -= ETH_VLAN_TAG_LEN;
+    }
+    else
+    {
+        UART_printf("EtherType: 0x%04x\n", 
+                    ntohs(frame->hdr.etherType) & 0xFFFFU);
+        payload = frame->payload;
+    }
+
+    UART_printf("Payload  : ");
+    for (i = 0; i < len; i++)
+    {
+        UART_printf("0x%02x ", payload[i]);
+        if (i && (((i + 1) % OCTETS_PER_ROW) == 0))
+        {
+            UART_printf("\n           ");
+        }
+    }
+
+    if (len && ((len % OCTETS_PER_ROW) != 0))
+    {
+        UART_printf("\n");
+    }
+
+    UART_printf("\n");
+}
+
+/**
+ * \brief   This function is used to queue the received packets to rx ready queue
+ *
+ * \param   NULL
+ *
+ * \return  uint32_t - Receive ready queue count
+ *
+ */
+static uint32_t BoardDiag_enetLpbkReceivePkts(void)
+{
+    EnetDma_PktQ rxReadyQ;
+    EnetDma_Pkt *pktInfo;
+    int32_t status;
+    uint32_t rxReadyCnt = 0U;
+
+    EnetQueue_initQ(&rxReadyQ);
+
+    /* Retrieve any CPSW packets which are ready */
+    status = EnetDma_retrieveRxPktQ(gEnetLpbk.hRxCh, &rxReadyQ);
+
+    if (status == ENET_SOK)
+    {
+        rxReadyCnt = EnetQueue_getQCount(&rxReadyQ);
+
+        /* Queue the received packet to rxReadyQ and pass new ones from rxFreeQ
+        **/
+        pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
+        while (pktInfo != NULL)
+        {
+            EnetDma_checkPktState(&pktInfo->pktState,
+                                    ENET_PKTSTATE_MODULE_APP,
+                                    ENET_PKTSTATE_APP_WITH_DRIVER,
+                                    ENET_PKTSTATE_APP_WITH_READYQ);
+
+            EnetQueue_enq(&gEnetLpbk.rxReadyQ, &pktInfo->node);
+            pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
+        }
+    }
+    else
+    {
+        UART_printf("receivePkts() failed to retrieve pkts: %d\n",
+                           status);
+    }
+
+    return rxReadyCnt;
+}
+
+/**
+ * \brief   This function is used to retrieve's any CPSW packets that may be free now
+ *
+ * \param   NULL
+ *
+ * \return  uint32_t - Transmit free queue count
+ *
+ */
+static uint32_t BoardDiag_enetLpbkRetrieveFreeTxPkts(void)
+{
+    EnetDma_PktQ txFreeQ;
+    EnetDma_Pkt *pktInfo;
+    int32_t status;
+    uint32_t txFreeQCnt = 0U;
+
+    EnetQueue_initQ(&txFreeQ);
+
+    /* Retrieve any CPSW packets that may be free now */
+    status = EnetDma_retrieveTxPktQ(gEnetLpbk.hTxCh, &txFreeQ);
+    if (status == ENET_SOK)
+    {
+        txFreeQCnt = EnetQueue_getQCount(&txFreeQ);
+
+        pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&txFreeQ);
+        while (NULL != pktInfo)
+        {
+            EnetDma_checkPktState(&pktInfo->pktState,
+                                    ENET_PKTSTATE_MODULE_APP,
+                                    ENET_PKTSTATE_APP_WITH_DRIVER,
+                                    ENET_PKTSTATE_APP_WITH_FREEQ);
+
+            EnetQueue_enq(&gEnetLpbk.txFreePktInfoQ, &pktInfo->node);
+            pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&txFreeQ);
+        }
+    }
+    else
+    {
+        UART_printf("retrieveFreeTxPkts() failed to retrieve pkts: %d\n",
+                           status);
+    }
+
+    return txFreeQCnt;
+}
+
+/**
+ * \brief   This function is used for CPSW packet transmission
+ *          and reception
+ *
+ * \param   NULL
+ *
+ * \return  int32_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int32_t BoardDiag_cpswPktRxTx(void)
+{
+    EnetDma_PktQ txSubmitQ;
+    EnetDma_Pkt *pktInfo;
+    EthFrame *frame;
+    uint32_t txRetrievePktCnt = 0;
+    uint32_t loopTxPktCnt = 0;
+    uint32_t loopRxPktCnt = 0;
+    uint32_t loopCnt = 0, pktCnt = 0;
+    uint32_t rxReadyCnt = 0;
+    int32_t status = ENET_SOK;
+    uint8_t bcastAddr[ENET_MAC_ADDR_LEN] = 
+            {0xffU, 0xffU, 0xffU, 0xffU, 0xffU, 0xffU};
+
+    gEnetLpbk.totalTxCnt = 0U;
+    for (loopCnt = 0U; loopCnt < BOARD_DIAG_ENETLPBK_NUM_ITERATION; loopCnt++)
+    {
+        pktCnt = 0U;
+        while (pktCnt < BOARD_DIAG_ENETLPBK_TEST_PKT_NUM)
+        {
+            loopRxPktCnt = loopTxPktCnt = 0U;
+            /* Transmit a single packet */
+            EnetQueue_initQ(&txSubmitQ);
+
+            /* Dequeue one free TX Eth packet */
+            pktInfo = (EnetDma_Pkt *)EnetQueue_deq(&gEnetLpbk.txFreePktInfoQ);
+
+            while (NULL != pktInfo)
+            {
+                pktCnt++;
+                /* Fill the TX Eth frame with test content */
+                frame = (EthFrame *)pktInfo->bufPtr;
+                memcpy(frame->hdr.dstMac, bcastAddr, ENET_MAC_ADDR_LEN);
+                memcpy(frame->hdr.srcMac, &gEnetLpbk.hostMacAddr[0U],
+                        ENET_MAC_ADDR_LEN);
+                frame->hdr.etherType = htons(ETHERTYPE_EXPERIMENTAL1);
+                memset(&frame->payload[0U], (uint8_t)(0xA5 + pktCnt),
+                        BOARD_DIAG_ENETLPBK_TEST_PKT_LEN);
+                pktInfo->userBufLen = BOARD_DIAG_ENETLPBK_TEST_PKT_LEN +
+                                      sizeof(EthFrameHeader);
+                pktInfo->appPriv    = &gEnetLpbk;
+                EnetDma_checkPktState(&pktInfo->pktState,
+                                        ENET_PKTSTATE_MODULE_APP,
+                                        ENET_PKTSTATE_APP_WITH_FREEQ,
+                                        ENET_PKTSTATE_APP_WITH_DRIVER);
+
+                /* Enqueue the packet for later transmission */
+                EnetQueue_enq(&txSubmitQ, &pktInfo->node);
+
+                if (pktCnt >= BOARD_DIAG_ENETLPBK_TEST_PKT_NUM)
+                {
+                    break;
+                }
+
+                /* Dequeue one free TX Eth packet */
+                pktInfo =
+                (EnetDma_Pkt *)EnetQueue_deq(&gEnetLpbk.txFreePktInfoQ);
+            }
+            loopTxPktCnt = EnetQueue_getQCount(&txSubmitQ);
+            while (0U != EnetQueue_getQCount(&txSubmitQ))
+            {
+                uint32_t txCnt = EnetQueue_getQCount(&txSubmitQ);
+                status = EnetDma_submitTxPktQ(gEnetLpbk.hTxCh,
+                                                   &txSubmitQ);
+                while (gTxSem != true);
+                gTxSem = false;
+
+                /* Retrieve TX free packets */
+                if (status == ENET_SOK)
+                {
+                    txCnt            = txCnt - EnetQueue_getQCount(&txSubmitQ);
+                    txRetrievePktCnt = 0U;
+                    while (txRetrievePktCnt != txCnt)
+                    {
+                        /* TODO this is not failure as HW is busy sending
+                         * packets, we need to wait and again call retrieve
+                         * packets */
+                        BOARD_delay(1);
+                        txRetrievePktCnt += BoardDiag_enetLpbkRetrieveFreeTxPkts();
+                    }
+                }
+                else
+                {
+                    break;
+                }
+            }
+            
+            /* wait to receive the packet */
+            do
+            {
+                while (gRxSem != true);
+                gRxSem = false;
+
+                /* Get the packets received so far */
+                rxReadyCnt = BoardDiag_enetLpbkReceivePkts();
+                if (rxReadyCnt > 0U)
+                {
+                    /* Consume the received packets and release them */
+                    pktInfo =
+                    (EnetDma_Pkt *)EnetQueue_deq(&gEnetLpbk.rxReadyQ);
+                    while (NULL != pktInfo)
+                    {
+                        EnetDma_checkPktState(&pktInfo->pktState,
+                                                ENET_PKTSTATE_MODULE_APP,
+                                                ENET_PKTSTATE_APP_WITH_READYQ,
+                                                ENET_PKTSTATE_APP_WITH_FREEQ);
+
+                        /* Consume the packet by just printing its content */
+                        if (gEnetLpbk.printFrame)
+                        {
+                            frame = (EthFrame *)pktInfo->bufPtr;
+
+                            BoardDiag_printFrame(frame, pktInfo->userBufLen -
+                                        sizeof(EthFrameHeader));
+                        }
+
+                        /* Release the received packet */
+                        EnetQueue_enq(&gEnetLpbk.rxFreeQ, &pktInfo->node);
+                        pktInfo =
+                        (EnetDma_Pkt *)EnetQueue_deq(&gEnetLpbk.rxReadyQ);
+                    }
+
+                    /*Submit now processed buffers */
+                    if (status == ENET_SOK)
+                    {
+                        EnetAppUtils_validatePacketState(
+                                                &gEnetLpbk.rxFreeQ,
+                                                ENET_PKTSTATE_APP_WITH_FREEQ,
+                                                ENET_PKTSTATE_APP_WITH_DRIVER);
+
+                        EnetDma_submitRxPktQ(gEnetLpbk.hRxCh,
+                                         &gEnetLpbk.rxFreeQ);
+                    }
+                }
+
+                loopRxPktCnt += rxReadyCnt;
+            }
+            while (loopRxPktCnt < loopTxPktCnt);
+
+            gEnetLpbk.totalRxCnt += loopTxPktCnt;
+        }
+
+        gEnetLpbk.totalTxCnt += pktCnt;
+    }
+    
+    if (status == ENET_SOK)
+    {
+        if(gEnetLpbk.totalTxCnt != gEnetLpbk.totalRxCnt)
+        {
+            UART_printf("Packet loss, Test Failed\n");
+            return -1;
+        }
+        UART_printf("\nTransmitted - %d packets\nReceived - %d packets\n",
+                        gEnetLpbk.totalTxCnt, gEnetLpbk.totalRxCnt);
+    }
+    else
+    {
+        UART_printf("Failed to transmit/receive packets: %d,transmitted: %d\n",
+                    BOARD_DIAG_ENETLPBK_TEST_PKT_NUM, gEnetLpbk.totalTxCnt);
+    }
+
+    return status;
+}
+
+/**
+ * \brief   CPSW delay function
+ *
+ * \param   waitTime     [IN]   Wait time
+ *
+ */
+static void BoardDiag_enetWait(uint32_t waitTime)
+{
+    volatile uint32_t index;
+
+    /* we multiply waitTime by 10000 as 400MHz R5 takes 2.5ns for single cycle
+     * and we assume for loop takes 4 cycles */
+    for (index = 0; index < (waitTime*1000); index++);
+}
+
+/**
+ * \brief   This function Waits till phy link is up.
+ *
+ * \param   NULL
+ *
+ * \return  int32_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int32_t BoardDiag_enetLpbkWaitForLinkUp(void)
+{
+    Enet_IoctlPrms prms;
+    bool linked = false;
+    int32_t status = ENET_SOK;
+
+    ENET_IOCTL_SET_INOUT_ARGS(&prms, &gEnetLpbk.macPort, &linked);
+
+    while (!linked)
+    {
+        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                            ENET_PER_IOCTL_IS_PORT_LINK_UP, &prms);
+        if (status != ENET_SOK)
+        {
+            UART_printf("Failed to get port %u's link status: %d\n",
+                            ENET_MACPORT_ID(gEnetLpbk.macPort), status);
+            linked = false;
+            break;
+        }
+
+        if (!linked)
+        {
+            Enet_periodicTick(gEnetLpbk.hEnet);
+            BoardDiag_enetWait(1000U);
+        }
+    }
+
+    return status;
+}
+
+/**
+ * \brief   This function checks the live status of the phy
+ *
+ * \param   NULL
+ *
+ * \return  int32_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int32_t BoardDiag_enetLpbkShowAlivePhys(void)
+{
+    Enet_IoctlPrms prms;
+    bool alive = false;
+    int8_t phyCnt;
+    int32_t status;
+
+    for (phyCnt = 0U; phyCnt < ENET_MDIO_PHY_CNT_MAX; phyCnt++)
+    {
+        ENET_IOCTL_SET_INOUT_ARGS(&prms, &phyCnt, &alive);
+
+        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                            ENET_MDIO_IOCTL_IS_ALIVE, &prms);
+        if (status == ENET_SOK)
+        {
+            if (alive == true)
+            {
+                UART_printf("PHY %u is alive\n", phyCnt);
+            }
+        }
+        else
+        {
+            UART_printf("Failed to get PHY %u alive status: %d\n", phyCnt, status);
+            return -1;
+        }
+    }
+
+    return status;
+}
+
+/**
+ * \brief   This function is used to set the ALE port state to forward.
+ *
+ * \param   NULL
+ *
+ * \return  int32_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int32_t BoardDiag_enetLpbkSetupCpswAle(void)
+{
+    Enet_IoctlPrms prms;
+    CpswAle_SetPortStateInArgs setPortStateInArgs;
+    CpswAle_SetUcastEntryInArgs setUcastInArgs;
+    uint32_t entryIdx;
+    int32_t status;
+
+    /* ALE entry with "secure" bit cleared is required for loopback */
+    setUcastInArgs.addr.vlanId  = 0U;
+    setUcastInArgs.info.portNum = CPSW_ALE_HOST_PORT_NUM;
+    setUcastInArgs.info.blocked = false;
+    setUcastInArgs.info.secure  = false;
+    setUcastInArgs.info.super   = false;
+    setUcastInArgs.info.ageable = false;
+    setUcastInArgs.info.trunk   = false;
+
+    EnetUtils_copyMacAddr(&setUcastInArgs.addr.addr[0U],
+                          gEnetLpbk.hostMacAddr);
+
+    ENET_IOCTL_SET_INOUT_ARGS(&prms, &setUcastInArgs, &entryIdx);
+
+    status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                        CPSW_ALE_IOCTL_ADD_UCAST, &prms);
+    if (status != ENET_SOK)
+    {
+        UART_printf("Failed to add ucast entry: %d\n", status);
+    }
+
+    /* Set host port to 'forwarding' state */
+    if (status == ENET_SOK)
+    {
+        setPortStateInArgs.portNum   = CPSW_ALE_HOST_PORT_NUM;
+        setPortStateInArgs.portState = CPSW_ALE_PORTSTATE_FORWARD;
+        ENET_IOCTL_SET_IN_ARGS(&prms, &setPortStateInArgs);
+
+        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                            CPSW_ALE_IOCTL_SET_PORT_STATE, &prms);
+        if (status != ENET_SOK)
+        {
+            UART_printf("Failed to set ALE port state: %d\n", status);
+        }
+    }
+
+    return status;
+}
+
+/**
+ * \brief   This function is used to initialize the receive ready packet queue
+ *
+ * \param   NULL
+ *
+ * \return  int8_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int8_t BoardDiag_enetLpbkInitRxReadyPktQ(void)
+{
+    EnetDma_PktQ rxReadyQ;
+    EnetDma_Pkt *pPktInfo;
+    int32_t status;
+    uint32_t memUtilsRxPkts;
+
+    EnetQueue_initQ(&gEnetLpbk.rxFreeQ);
+    EnetQueue_initQ(&gEnetLpbk.rxReadyQ);
+    EnetQueue_initQ(&rxReadyQ);
+
+    for (memUtilsRxPkts = 0U; memUtilsRxPkts < ENET_MEM_NUM_RX_PKTS; memUtilsRxPkts++)
+    {
+        pPktInfo =
+        EnetMem_allocEthPkt(&gEnetLpbk,
+                            ENET_MEM_LARGE_POOL_PKT_SIZE,
+                            ENETDMA_CACHELINE_ALIGNMENT);
+        if(pPktInfo == NULL)
+        {
+            UART_printf("EnetMem_allocEthPkt failed\n");
+            return -1;
+        }
+        ENET_UTILS_SET_PKT_APP_STATE(&pPktInfo->pktState,
+                                     ENET_PKTSTATE_APP_WITH_FREEQ);
+        EnetQueue_enq(&gEnetLpbk.rxFreeQ, &pPktInfo->node);
+    }
+
+    /* Retrieve any CPSW packets which are ready */
+    status = EnetDma_retrieveRxPktQ(gEnetLpbk.hRxCh, &rxReadyQ);
+    if(status != ENET_SOK)
+    {
+        UART_printf("EnetDma_retrieveRxPktQ failed\n");
+        return -1;
+    }
+    /* There should not be any packet with DMA during init */
+    if(EnetQueue_getQCount(&rxReadyQ) != 0U)
+    {
+        UART_printf("EnetQueue_getQCount failed\n");
+        return -1;
+    }
+
+    EnetAppUtils_validatePacketState(&gEnetLpbk.rxFreeQ,
+                                     ENET_PKTSTATE_APP_WITH_FREEQ,
+                                     ENET_PKTSTATE_APP_WITH_DRIVER);
+
+    EnetDma_submitRxPktQ(gEnetLpbk.hRxCh,
+                         &gEnetLpbk.rxFreeQ);
+
+    /* Assert here as during init no. of DMA descriptors should be equal to
+     * no. of free Ethernet buffers available with app */
+    if(EnetQueue_getQCount(&gEnetLpbk.rxFreeQ) != 0U)
+    {
+        UART_printf("EnetQueue_getQCount failed\n");
+        return -1;
+    }
+    return 0;
+}
+
+/**
+ * \brief   This function is used to initialize the free packet
+ *          info queue with the Ethernet packets to be transmitted.
+ *
+ * \param   NULL
+ *
+ * \return  int8_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int8_t BoardDiag_enetLpbkInitTxFreePktQ(void)
+{
+    EnetDma_Pkt *pPktInfo;
+    uint32_t memUtilsTxPkts;
+
+    /* Initialize all queues */
+    EnetQueue_initQ(&gEnetLpbk.txFreePktInfoQ);
+
+    /* Initialize TX EthPkts and queue them to txFreePktInfoQ */
+    for (memUtilsTxPkts = 0U; memUtilsTxPkts < ENET_MEM_NUM_TX_PKTS; memUtilsTxPkts++)
+    {
+        pPktInfo = 
+        EnetMem_allocEthPkt(&gEnetLpbk,
+                                       ENET_MEM_LARGE_POOL_PKT_SIZE,
+                                       ENETDMA_CACHELINE_ALIGNMENT);
+        if(pPktInfo == NULL)
+        {
+            UART_printf("EnetMem_allocEthPkt failed\n");
+            return -1;
+        }
+        ENET_UTILS_SET_PKT_APP_STATE(&pPktInfo->pktState,
+                                     ENET_PKTSTATE_APP_WITH_FREEQ);
+
+        EnetQueue_enq(&gEnetLpbk.txFreePktInfoQ, &pPktInfo->node);
+    }
+
+    UART_printf("initQs() txFreePktInfoQ initialized with %d pkts\n",
+                       EnetQueue_getQCount(&gEnetLpbk.txFreePktInfoQ));
+    return 0;
+}
+
+/**
+ * \brief   This function is used to open the CPSW DMA module
+ *
+ * \param   NULL
+ *
+ * \return  int8_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int8_t BoardDiag_enetLpbkOpenDma()
+{
+    int32_t status = ENET_SOK;
+    EnetCpdma_OpenRxChPrms rxChCfg;
+    EnetCpdma_OpenTxChPrms txChCfg;
+
+    /* Open the CPSW TX channel  */
+    if (status == ENET_SOK)
+    {
+        EnetDma_initTxChParams(&txChCfg);
+
+        txChCfg.cbArg   = &gEnetLpbk;
+        txChCfg.notifyCb = BoardDiag_enetLpbkTxIsrFxn;
+
+        EnetAppUtils_setCommonTxChPrms(&txChCfg);
+
+        EnetAppUtils_openTxCh(gEnetLpbk.hEnet,
+                              gEnetLpbk.coreKey,
+                              gEnetLpbk.coreId,
+                              &gEnetLpbk.txChNum,
+                              &gEnetLpbk.hTxCh,
+                              &txChCfg);
+
+        if(BoardDiag_enetLpbkInitTxFreePktQ() != BOARD_DIAG_SUCCESS)
+        {
+            UART_printf("BoardDiag_enetLpbkInitTxFreePktQ Failed\n");
+            return -1;
+        }
+
+        if (NULL == gEnetLpbk.hTxCh)
+        {
+            /* Free the Ch Num if open Tx Ch failed */
+            EnetAppUtils_freeTxCh(gEnetLpbk.hEnet,
+                                  gEnetLpbk.coreKey,
+                                  gEnetLpbk.coreId,
+                                  gEnetLpbk.txChNum);
+            UART_printf("EnetDma_openTxCh() failed to open: %d\n",
+                               status);
+        }
+    }
+
+    /* Open the CPSW RX Channel  */
+    if (status == ENET_SOK)
+    {
+        EnetDma_initRxChParams(&rxChCfg);
+        rxChCfg.notifyCb = BoardDiag_enetLpbkRxIsrFxn;
+        rxChCfg.cbArg   = &gEnetLpbk;
+
+        EnetAppUtils_setCommonRxChPrms(&rxChCfg);
+
+        EnetAppUtils_openRxCh(gEnetLpbk.hEnet,
+                              gEnetLpbk.coreKey,
+                              gEnetLpbk.coreId,
+                              &gEnetLpbk.rxChNum,
+                              &gEnetLpbk.hRxCh,
+                              &rxChCfg);
+
+        if (NULL == gEnetLpbk.hRxCh)
+        {
+            UART_printf("EnetDma_openRxCh() failed to open: %d\n",
+                               status);
+
+           /* TODO: should we close TxCh here */
+        }
+        else
+        {
+            status = EnetAppUtils_allocMac(gEnetLpbk.hEnet,
+                                           gEnetLpbk.coreKey,
+                                           gEnetLpbk.coreId,
+                                           gEnetLpbk.hostMacAddr);
+            UART_printf("Host MAC address: ");
+            BoardDiag_printMacAddr(gEnetLpbk.hostMacAddr);
+            /* Submit all ready RX buffers to DMA.*/
+            if(BoardDiag_enetLpbkInitRxReadyPktQ() != BOARD_DIAG_SUCCESS)
+            {
+                UART_printf("BoardDiag_enetLpbkInitRxReadyPktQ failed\n");
+                return -1;
+            }
+        }
+    }
+    if(status != ENET_SOK)
+    {
+        return -1;
+    }
+    return 0;
+}
+
+/**
+ * \brief   This function is used set MII mode.
+ *
+ * \param   emac_mode       macMode   mac mode
+ *          EnetPhy_Mii     *mii      MII mode
+ *
+ * \return  int8_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int8_t BoardDiag_enetLpbkMacMode2PhyMii(emac_mode macMode,
+                                    EnetPhy_Mii *mii)
+{
+    switch (macMode)
+    {
+        case RMII:
+            *mii = ENETPHY_MAC_MII_RMII;
+            break;
+        case RGMII:
+            *mii = ENETPHY_MAC_MII_RGMII;
+            break;
+        default:
+            UART_printf("Invalid MAC mode: %u\n", macMode);
+            return -1;
+    }
+    return 0;
+}
+
+
+/**
+ * \brief   This function is used set layerType,sublayerType and variantType.
+ *
+ * \param   emac_mode                   macMode   mac mode
+ *          EnetMacPort_Interface       *mii      MII mode
+ *
+ * \return  int8_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int8_t BoardDiag_enetLpbkMacMode2MacMii(emac_mode macMode,
+                                    EnetMacPort_Interface *mii)
+{
+    switch (macMode)
+    {
+        case RMII:
+            mii->layerType    = ENET_MAC_LAYER_MII;
+            mii->sublayerType = ENET_MAC_SUBLAYER_REDUCED;
+            mii->variantType  = ENET_MAC_VARIANT_NONE;
+            break;
+        case RGMII:
+            mii->layerType    = ENET_MAC_LAYER_GMII;
+            mii->sublayerType = ENET_MAC_SUBLAYER_REDUCED;
+            mii->variantType  = ENET_MAC_VARIANT_FORCED;
+            break;
+        default:
+            UART_printf("Invalid MAC mode: %u\n", macMode);
+            return -1;
+    }
+    return 0;
+}
+
+/**
+ * \brief   This function is used init cpsw configurations.
+ *
+ * \param   Cpsw_Cfg *cpswCfg           cpsw configurations
+ *
+ * \return  NULL
+ *
+ */
+static void BoardDiag_enetLpbkInitCpswCfg(Cpsw_Cfg *cpswCfg)
+{
+    CpswHostPort_Cfg *hostPortCfg = &cpswCfg->hostPortCfg;
+    CpswAle_Cfg *aleCfg = &cpswCfg->aleCfg;
+    CpswCpts_Cfg *cptsCfg = &cpswCfg->cptsCfg;
+
+    /* Set initial config */
+    Enet_initCfg(gEnetLpbk.enetType, gEnetLpbk.instId, cpswCfg,
+                sizeof(*cpswCfg));
+
+    /* Peripheral config */
+    cpswCfg->vlanCfg.vlanAware = false;
+
+    /* Host port config */
+    hostPortCfg->removeCrc      = true;
+    hostPortCfg->padShortPacket = true;
+    hostPortCfg->passCrcErrors  = true;
+
+    /* ALE config */
+    aleCfg->modeFlags                          = CPSW_ALE_CFG_MODULE_EN;
+    aleCfg->agingCfg.autoAgingEn           = true;
+    aleCfg->agingCfg.agingPeriodInMs           = 1000;
+    aleCfg->nwSecCfg.vid0ModeEn            = true;
+    aleCfg->vlanCfg.aleVlanAwareMode           = false;
+    aleCfg->vlanCfg.cpswVlanAwareMode          = false;
+    aleCfg->vlanCfg.unknownUnregMcastFloodMask = CPSW_ALE_ALL_PORTS_MASK;
+    aleCfg->vlanCfg.unknownRegMcastFloodMask   = CPSW_ALE_ALL_PORTS_MASK;
+    aleCfg->vlanCfg.unknownVlanMemberListMask  = CPSW_ALE_ALL_PORTS_MASK;
+
+    /* CPTS config */
+    /* Note: Timestamping and MAC loopback are not supported together because
+     * of IP limitation, so disabling timestamping for this application */
+    cptsCfg->hostRxTsEn = false;
+
+    EnetAppUtils_initResourceConfig(gEnetLpbk.enetType, gEnetLpbk.coreId,
+                                    &cpswCfg->resCfg);
+}
+
+/**
+ * \brief   This function is used to open the ENET driver
+ *
+ * \param   NULL
+ *
+ * \return  int8_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int8_t BoardDiag_enetLpbkOpenEnet(void)
+{
+    Cpsw_Cfg cpswCfg;
+    EnetCpdma_Cfg dmaCfg;
+    Enet_IoctlPrms prms;
+    EnetPer_PortLinkCfg portLinkCfg;
+    CpswMacPort_Cfg macCfg;
+    int32_t status = ENET_SOK;
+
+    cpswCfg.dmaCfg = &dmaCfg;
+    /* Initialize peripheral config */
+    BoardDiag_enetLpbkInitCpswCfg(&cpswCfg);
+
+    UART_printf("CPSW_2G Test on MCU NAVSS\n");
+    /* Set Enet global runtime log level */
+    Enet_setTraceLevel(ENET_TRACE_DEBUG);
+
+    /* Open the Enet driver */
+    gEnetLpbk.hEnet = Enet_open(gEnetLpbk.enetType, gEnetLpbk.instId, &cpswCfg,
+                                sizeof(cpswCfg));
+
+    if (gEnetLpbk.hEnet == NULL)
+    {
+        UART_printf("Failed to open Enet driver\n");
+        return -1;
+    }
+
+    /* Setup port link open parameters */
+    if (status == ENET_SOK)
+    {
+        EnetBoard_EthPort ethPort;
+        EnetMacPort_LinkCfg *linkCfg = &portLinkCfg.linkCfg;
+        EnetMacPort_Interface *mii = &portLinkCfg.mii;
+        EnetPhy_Cfg *phyCfg = &portLinkCfg.phyCfg;
+        EnetPhy_Mii phyMii;
+
+        /* Setup board for requested Ethernet port */
+        ethPort.enetType = gEnetLpbk.enetType;
+        ethPort.instId   = gEnetLpbk.instId;
+        ethPort.macPort  = gEnetLpbk.macPort;
+        ethPort.boardId  = gEnetLpbk.boardId;
+        if(BoardDiag_enetLpbkMacMode2MacMii(gEnetLpbk.macMode, &ethPort.mii) != 
+                                            BOARD_DIAG_SUCCESS)
+        {
+            UART_printf("BoardDiag_enetLpbkMacMode2MacMii failed\n");
+            return -1;
+        }
+
+        status = EnetBoard_setupPorts(&ethPort, 1U);
+        if(status != ENET_SOK)
+        {
+            UART_printf("EnetBoard_setupPorts failed\n");
+            return -1;
+        }
+
+        /* Set port link params */
+        portLinkCfg.macPort = gEnetLpbk.macPort;
+        portLinkCfg.macCfg = &macCfg;
+
+        CpswMacPort_initCfg(&macCfg);
+
+        if(BoardDiag_enetLpbkMacMode2MacMii(gEnetLpbk.macMode, mii) 
+                                            != BOARD_DIAG_SUCCESS)
+        {
+            UART_printf("BoardDiag_enetLpbkMacMode2MacMii failed\n");
+            return -1;
+        }
+
+        if (gEnetLpbk.testPhyLoopback)
+        {
+            const EnetBoard_PhyCfg *boardPhyCfg = NULL;
+
+            /* Set PHY configuration params */
+            EnetPhy_initCfg(phyCfg);
+
+            if (BoardDiag_enetLpbkMacMode2PhyMii(gEnetLpbk.macMode, &phyMii) 
+                                                == BOARD_DIAG_SUCCESS)
+            {
+                boardPhyCfg = EnetBoard_getPhyCfg(&ethPort);
+                if (boardPhyCfg != NULL)
+                {
+                    phyCfg->phyAddr     = boardPhyCfg->phyAddr;
+                    phyCfg->isStrapped  = boardPhyCfg->isStrapped;
+                    phyCfg->skipExtendedCfg = boardPhyCfg->skipExtendedCfg;
+                    phyCfg->extendedCfgSize = boardPhyCfg->extendedCfgSize;
+                    memcpy(phyCfg->extendedCfg, boardPhyCfg->extendedCfg,
+                            phyCfg->extendedCfgSize);
+                }
+                else
+                {
+                    UART_printf("PHY info not found\n");
+                    return -1;
+                }
+
+                if ((phyMii == ENETPHY_MAC_MII_MII) ||
+                    (phyMii == ENETPHY_MAC_MII_RMII))
+                {
+                    linkCfg->speed = ENET_SPEED_100MBIT;
+                }
+                else
+                {
+                    /* TODO: TPR12 always 100 Mbits */
+                    linkCfg->speed = ENET_SPEED_100MBIT;
+                }
+
+                linkCfg->duplexity = ENET_DUPLEX_FULL;
+            }
+            else
+            {
+                UART_printf("BoardDiag_enetLpbkMacMode2PhyMii failed\n");
+                return -1;
+            }
+        }
+        else
+        {
+            phyCfg->phyAddr = ENETPHY_INVALID_PHYADDR;
+
+            if (mii->layerType == ENET_MAC_LAYER_MII)
+            {
+                linkCfg->speed = ENET_SPEED_100MBIT;
+            }
+            else
+            {
+                linkCfg->speed = ENET_SPEED_1GBIT;
+            }
+
+            linkCfg->duplexity = ENET_DUPLEX_FULL;
+
+        }
+
+        /* MAC and PHY loopbacks are mutually exclusive */
+        phyCfg->loopbackEn = gEnetLpbk.testPhyLoopback &&
+                                 !gEnetLpbk.testExtLoopback;
+
+        macCfg.loopbackEn = !gEnetLpbk.testPhyLoopback;
+    }
+
+    /* Open port link */
+    if (status == ENET_SOK)
+    {
+        ENET_IOCTL_SET_IN_ARGS(&prms, &portLinkCfg);
+
+        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                            ENET_PER_IOCTL_OPEN_PORT_LINK, &prms);
+        if (status != ENET_SOK)
+        {
+            UART_printf("Failed to open port link: %d\n", status);
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+/**
+ * \brief   This function is used to initialiaze the enet
+            parameters(gEnetLpbk) Ethernet external loopback test.
+ *
+ * \param   NULL
+ *
+ * \return  NULL
+ *
+ */
+static void BoardDiag_enetIniParams()
+{
+     /* Initialize loopback test config */
+    memset(&gEnetLpbk, 0, sizeof(gEnetLpbk));
+    
+    gEnetLpbk.enetType        = ENET_CPSW_9G;
+    gEnetLpbk.instId          = 0U;
+    gEnetLpbk.testPhyLoopback = true;
+    gEnetLpbk.testExtLoopback = true;
+    gEnetLpbk.macPort         = ENET_MAC_PORT_1;
+    gEnetLpbk.macMode         = RGMII;
+    gEnetLpbk.enetType        = ENET_CPSW_2G;
+    gEnetLpbk.boardId         = ENETBOARD_CPB_ID;
+
+}
+
+/**
+ * \brief   This function is used to perform the CPSW
+ *          Ethernet external loopback test
+ *
+ * \param   NULL
+ *
+ * \return  int8_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+static int8_t BoardDiag_cpswLoopbackTest()
+{
+    EnetOsal_Cfg osalCfg;
+    EnetUtils_Cfg utilsCfg;
+    Enet_IoctlPrms prms;
+    int32_t status;
+
+    /* Initialize the phy configurations */
+    EnetBoard_init();
+
+    /* Initialize the enet parameters */
+    BoardDiag_enetIniParams();
+
+    EnetAppUtils_enableClocks(gEnetLpbk.enetType, gEnetLpbk.instId);
+
+    /* Local core id */
+    gEnetLpbk.coreId = EnetSoc_getCoreId();
+
+    /* Initialize Enet driver (use default OSAL and utils) */
+    Enet_initOsalCfg(&osalCfg);
+    Enet_initUtilsCfg(&utilsCfg);
+    utilsCfg.print = EnetAppUtils_print;
+    Enet_init(&osalCfg, &utilsCfg);
+
+    /* Open Enet driver */
+    status = BoardDiag_enetLpbkOpenEnet();
+    if (status != 0)
+    {
+        UART_printf("Failed to open Enet driver: %d\n", status);
+        return -1;
+    }
+#if !defined(SOC_TPR12)
+    if (status == ENET_SOK)
+    {
+        /* Attach the core with RM */
+        uint32_t coreId;
+        EnetPer_AttachCoreOutArgs attachCoreOutArgs;
+        coreId = gEnetLpbk.coreId;
+
+        ENET_IOCTL_SET_INOUT_ARGS(&prms, &coreId, &attachCoreOutArgs);
+        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                            ENET_PER_IOCTL_ATTACH_CORE, &prms);
+        if (status != ENET_SOK)
+        {
+            UART_printf("EnetLpbk_loopbackTest failed"
+                         "ENET_PER_IOCTL_ATTACH_CORE: %d\n", status);
+            return -1;
+        }
+        else
+        {
+            gEnetLpbk.coreKey = attachCoreOutArgs.coreKey;
+        }
+    }
+#endif
+    if (status == ENET_SOK)
+    {
+        /* memutils open should happen after Cpsw is opened as it uses 
+         * CpswUtils_Q functions */
+        status = EnetMem_init();
+        if (status != ENET_SOK)
+        {
+            UART_printf("EnetMem_init failed: "
+                        "%d\n", status);
+            return -1;
+        }
+    }
+
+    /* Open DMA driver */
+    if (status == ENET_SOK)
+    {
+        status = BoardDiag_enetLpbkOpenDma();
+        if (status != ENET_SOK)
+        {
+            UART_printf("Failed to open DMA: %d\n", status);
+            return -1;
+        }
+    }
+
+    /* Enable host port */
+    if (status == ENET_SOK)
+    {
+        if (Enet_isCpswFamily(gEnetLpbk.enetType))
+        {
+            status = BoardDiag_enetLpbkSetupCpswAle();
+            if (status != ENET_SOK)
+            {
+                UART_printf("Failed to setup CPSW ALE: %d\n", status);
+                return -1;
+            }
+        }
+
+        if (status == ENET_SOK)
+        {
+            ENET_IOCTL_SET_NO_ARGS(&prms);
+            status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                                ENET_HOSTPORT_IOCTL_ENABLE, &prms);
+            if (status != ENET_SOK)
+            {
+                UART_printf("Failed to enable host port: %d\n", status);
+                return -1;
+            }
+        }
+    }
+
+    /* Show alive PHYs */
+    if (status == ENET_SOK)
+    {
+        status = BoardDiag_enetLpbkShowAlivePhys();
+    }
+
+    /* Wait for link up */
+    if ((status == ENET_SOK) && gEnetLpbk.testPhyLoopback)
+    {
+        status = BoardDiag_enetLpbkWaitForLinkUp();
+    }
+
+    /* Do packet transmission and reception */
+    if (status == ENET_SOK)
+    {
+       status = BoardDiag_cpswPktRxTx();
+    }
+
+    /* Print network statistics */
+    if (status == ENET_SOK)
+    {
+        if (Enet_isCpswFamily(gEnetLpbk.enetType))
+        {
+            BoardDiag_enetLpbkShowCpswStats();
+        }
+    }
+
+    /* Disable host port */
+    if (status == ENET_SOK)
+    {
+        ENET_IOCTL_SET_NO_ARGS(&prms);
+        status = Enet_ioctl(gEnetLpbk.hEnet, gEnetLpbk.coreId,
+                            ENET_HOSTPORT_IOCTL_DISABLE, &prms);
+        if (status != ENET_SOK)
+        {
+            UART_printf("Failed to disable host port: %d\n", status);
+            return -1;
+        }
+    }
+
+    /* Print DMA statistics */
+    if (status == ENET_SOK)
+    {
+        EnetAppUtils_showRxChStats(gEnetLpbk.hRxCh);
+        EnetAppUtils_showTxChStats(gEnetLpbk.hTxCh);
+    }
+
+    /* Close Enet DMA driver */
+    BoardDiag_enetLpbkCloseDma();
+
+    /* Close Enet driver */
+    BoardDiag_enetLpbkCloseEnet();
+
+    /* Disable peripheral clocks */
+    EnetAppUtils_disableClocks(gEnetLpbk.enetType, gEnetLpbk.instId);
+
+    /* Deinit Enet driver */
+    Enet_deinit();
+    UART_printf("Deinitializing of Enet driver done\n");
+
+    if(status == ENET_SOK)
+    {
+        UART_printf("Test Passed\n");
+    }
+    else
+    {
+        UART_printf("Test Failed\n");
+        return -1;
+    }
+
+    return 0;
+}
+
+/**
+ *  \brief    This function runs CPSW ethernet test
+ *
+ *  \return   int8_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+int8_t BoardDiag_cpswEthRunTest(void)
+{
+    int8_t ret;
+
+    UART_printf("\n*********************************************\n");
+    UART_printf  ("*            ENET Ethernet Test             *\n");
+    UART_printf  ("*********************************************\n");
+
+    /* Run the loopback test */
+    ret = BoardDiag_cpswLoopbackTest();
+
+    return ret;
+}
+
+/**
+ * \brief  CPSW diagnostic test main function
+ *
+ *  This function performs board initializations and calls cpsw ethernet test
+ *
+ * \return  int
+ *              0  - in case of success
+ *             -1  - in case of failure
+ *
+ */
+#ifndef SPI_BOOT_FRAMEWORK
+int main(void)
+{
+    Board_initCfg boardCfg;
+    Board_STATUS status;
+    int8_t ret = 0;
+
+#ifdef PDK_RAW_BOOT
+    boardCfg = BOARD_INIT_MODULE_CLOCK |
+               BOARD_INIT_PINMUX_CONFIG |
+               BOARD_INIT_UART_STDIO;
+#else
+    boardCfg = BOARD_INIT_UART_STDIO | BOARD_INIT_PINMUX_CONFIG;
+#endif
+
+    status = Board_init(boardCfg);
+    if(status != BOARD_SOK)
+    {
+        return -1;
+    }
+
+    ret = BoardDiag_cpswEthRunTest();
+    if(ret == 0)
+    {
+        UART_printf("CPSW Loopback Test Passed\n\r");
+        UART_printf("All tests have passed\n\r");
+    }
+    else
+    {
+        UART_printf("CPSW Loopback Test failed\n\r");
+    }
+
+    return ret;
+
+}
+#endif
+
index 019b3e4ccfcb8999c0ef2e8f0aa6fa278511d0ab..ebb263b8a40eaed648b9561b7044cb42282d8883 100644 (file)
-/******************************************************************************\r
-* Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com\r
-*\r
-* Redistribution and use in source and binary forms, with or without\r
-* modification, are permitted provided that the following conditions\r
-* are met:\r
-*\r
-* Redistributions of source code must retain the above copyright\r
-* notice, this list of conditions and the following disclaimer.\r
-*\r
-* Redistributions in binary form must reproduce the above copyright\r
-* notice, this list of conditions and the following disclaimer in the\r
-* documentation and/or other materials provided with the\r
-* distribution.\r
-*\r
-* Neither the name of Texas Instruments Incorporated nor the names of\r
-* its contributors may be used to endorse or promote products derived\r
-* from this software without specific prior written permission.\r
-*\r
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
-* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
-* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
-* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
-* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
-* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
-* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-*\r
-*****************************************************************************/\r
-\r
-/**\r
- *  \file   cpsw_eth_test.h\r
- *\r
- *  \brief  This file contains all Local definitions for CPSW Ethernet test\r
- *          application.\r
- *\r
- */\r
-\r
-#ifndef __CPSW_ETH_TEST_H__\r
-#define __CPSW_ETH_TEST_H__\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-#include <stdint.h>\r
-#include <string.h>\r
-#include <assert.h>\r
-\r
-#include <ti/drv/uart/UART.h>\r
-#include <ti/drv/uart/UART_stdio.h>\r
-\r
-#include <ti/board/board.h>\r
-#include <ti/board/src/tpr12_evm/include/board_ethernet_config.h>\r
-#include <ti/board/src/tpr12_evm/include/board_utils.h>\r
-\r
-#include <ti/drv/enet/enet.h>\r
-#include <ti/drv/enet/include/core/enet_dma.h>\r
-#include <ti/drv/enet/include/per/cpsw.h>\r
-\r
-#include <ti/drv/enet/examples/utils/include/enet_apputils.h>\r
-#include <ti/drv/enet/examples/utils/include/enet_appmemutils.h>\r
-#include <ti/drv/enet/examples/utils/include/enet_appmemutils_cfg.h>\r
-#include <ti/drv/enet/examples/utils/include/enet_appboardutils.h>\r
-#include <ti/drv/enet/examples/utils/include/enet_apputils_rtos.h>\r
-#include <ti/drv/enet/examples/utils/include/enet_board_tpr12evm.h>\r
-\r
-/* Loopback test iteration count */\r
-#define BOARD_DIAG_ENETLPBK_NUM_ITERATION          (1U)\r
-/* Loopback test Number of packets count */\r
-#define BOARD_DIAG_ENETLPBK_TEST_PKT_NUM           (20U)\r
-/* Loopback test packet length */\r
-#define BOARD_DIAG_ENETLPBK_TEST_PKT_LEN           (500U)\r
-/* Status check */\r
-#define BOARD_DIAG_SUCCESS                          (0U)\r
-\r
-extern void EnetAppUtils_timerInit(void);\r
-/** \r
-  * @brief Enet device object structure \r
-  *\r
-  */\r
-typedef struct BoardDiag_EnetLpbkObj_s\r
-{\r
-    /* Enet handle */\r
-    Enet_Handle hEnet;\r
-    /* CPSW instance type */\r
-    Enet_Type enetType;\r
-    /* Instant Id */\r
-    uint32_t instId;\r
-    /* Core Id */\r
-    uint32_t coreId;\r
-    /* Core Key */\r
-    uint32_t coreKey;\r
-    /* Board Id */\r
-    uint32_t boardId;\r
-    /* MAC port number */\r
-    Enet_MacPort macPort;\r
-    /* MAC mode (defined in board library) */\r
-    emac_mode macMode;\r
-    /* CPSW driver handle */\r
-    EnetDma_RxChHandle hRxCh;\r
-\r
-    EnetDma_PktQ rxFreeQ;\r
-    EnetDma_PktQ rxReadyQ;\r
-    EnetDma_TxChHandle hTxCh;\r
-    /* TX DMA packet info memory */\r
-    EnetDma_PktQ txFreePktInfoQ;\r
-\r
-    /* Rx channel number */\r
-    uint32_t rxChNum;\r
-    /* Tx channel number */\r
-    uint32_t txChNum;\r
-    /* Host mac address */\r
-    uint8_t hostMacAddr[ENET_MAC_ADDR_LEN];\r
-\r
-    /* Test config params */\r
-    /* external LoopBack enable */\r
-    bool testExtLoopback;\r
-    /* PHY loopback */\r
-    bool testPhyLoopback;\r
-    /* Print received Ethernet frames */\r
-    bool printFrame;\r
-\r
-    /* Packet transmission */\r
-    uint32_t totalTxCnt;\r
-\r
-    /* Packet reception */\r
-    uint32_t totalRxCnt;\r
-\r
-} BoardDiag_EnetLpbkObj_t;\r
-\r
-/**\r
- *  \brief    This function runs CPSW2G ethernet test\r
- *\r
- *  \return   int8_t\r
- *               0 - in case of success\r
- *              -1 - in case of failure.\r
- *\r
- */\r
-int8_t BoardDiag_cpswEthRunTest(void);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-#endif /* __CPSW_ETH_TEST_H__ */\r
+/******************************************************************************
+* Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of Texas Instruments Incorporated nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*****************************************************************************/
+
+/**
+ *  \file   cpsw_eth_test.h
+ *
+ *  \brief  This file contains all Local definitions for CPSW Ethernet test
+ *          application.
+ *
+ */
+
+#ifndef __CPSW_ETH_TEST_H__
+#define __CPSW_ETH_TEST_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+
+#include <ti/drv/uart/UART.h>
+#include <ti/drv/uart/UART_stdio.h>
+
+#include <ti/board/board.h>
+#include <ti/board/src/tpr12_evm/include/board_ethernet_config.h>
+#include <ti/board/src/tpr12_evm/include/board_utils.h>
+
+#include <ti/drv/enet/enet.h>
+#include <ti/drv/enet/include/core/enet_dma.h>
+#include <ti/drv/enet/include/per/cpsw.h>
+
+#include <ti/drv/enet/examples/utils/include/enet_apputils.h>
+#include <ti/drv/enet/examples/utils/include/enet_appmemutils.h>
+#include <ti/drv/enet/examples/utils/include/enet_appmemutils_cfg.h>
+#include <ti/drv/enet/examples/utils/include/enet_appboardutils.h>
+#include <ti/drv/enet/examples/utils/include/enet_apputils_rtos.h>
+#include <ti/drv/enet/examples/utils/include/enet_board_tpr12evm.h>
+
+/* Loopback test iteration count */
+#define BOARD_DIAG_ENETLPBK_NUM_ITERATION          (1U)
+/* Loopback test Number of packets count */
+#define BOARD_DIAG_ENETLPBK_TEST_PKT_NUM           (20U)
+/* Loopback test packet length */
+#define BOARD_DIAG_ENETLPBK_TEST_PKT_LEN           (500U)
+/* Status check */
+#define BOARD_DIAG_SUCCESS                          (0U)
+
+extern void EnetAppUtils_timerInit(void);
+/** 
+  * @brief Enet device object structure 
+  *
+  */
+typedef struct BoardDiag_EnetLpbkObj_s
+{
+    /* Enet handle */
+    Enet_Handle hEnet;
+    /* CPSW instance type */
+    Enet_Type enetType;
+    /* Instant Id */
+    uint32_t instId;
+    /* Core Id */
+    uint32_t coreId;
+    /* Core Key */
+    uint32_t coreKey;
+    /* Board Id */
+    uint32_t boardId;
+    /* MAC port number */
+    Enet_MacPort macPort;
+    /* MAC mode (defined in board library) */
+    emac_mode macMode;
+    /* CPSW driver handle */
+    EnetDma_RxChHandle hRxCh;
+
+    EnetDma_PktQ rxFreeQ;
+    EnetDma_PktQ rxReadyQ;
+    EnetDma_TxChHandle hTxCh;
+    /* TX DMA packet info memory */
+    EnetDma_PktQ txFreePktInfoQ;
+
+    /* Rx channel number */
+    uint32_t rxChNum;
+    /* Tx channel number */
+    uint32_t txChNum;
+    /* Host mac address */
+    uint8_t hostMacAddr[ENET_MAC_ADDR_LEN];
+
+    /* Test config params */
+    /* external LoopBack enable */
+    bool testExtLoopback;
+    /* PHY loopback */
+    bool testPhyLoopback;
+    /* Print received Ethernet frames */
+    bool printFrame;
+
+    /* Packet transmission */
+    uint32_t totalTxCnt;
+
+    /* Packet reception */
+    uint32_t totalRxCnt;
+
+} BoardDiag_EnetLpbkObj_t;
+
+/**
+ *  \brief    This function runs CPSW2G ethernet test
+ *
+ *  \return   int8_t
+ *               0 - in case of success
+ *              -1 - in case of failure.
+ *
+ */
+int8_t BoardDiag_cpswEthRunTest(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __CPSW_ETH_TEST_H__ */
index 99f47043e3b83283ad9e4e887048123451665a83..ee263562654808ef83312696d2cb242d5091d67d 100644 (file)
@@ -70,6 +70,7 @@
 #include <ti/board/board.h>
 #include <ti/drv/esm/esm.h>
 #include <ti/drv/canfd/canfd.h>
+#include <ti/drv/uart/UART_stdio.h>
 
 /**************************************************************************
  *************************** Global Definitions ***************************
@@ -140,7 +141,7 @@ uint8_t                 txData[128U] =
 
 uint32_t                gDisplayStats = 0;
 uint32_t                gTerminate = 0;
-uint32_t                gMCANMode = 1U;
+uint32_t                gMCANMode = 2U;
 CANFD_MCANFrameType     testFrameType = CANFD_MCANFrameType_FD;
 
 /**
@@ -328,7 +329,8 @@ static int32_t PlatformInit(void)
     Board_STATUS boardStatus;
     Board_initCfg boardCfg;
 
-    boardCfg = (BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_MODULE_CLOCK);
+    boardCfg = (BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_MODULE_CLOCK | 
+                BOARD_INIT_UART_STDIO);
     boardStatus = Board_init(boardCfg);
 
     DebugP_assert(boardStatus == BOARD_SOK);
@@ -414,7 +416,7 @@ static int32_t mcanLoopbackTest()
     canHandle = CANFD_init(0U, &mcanCfgParams, &errCode);
     if (canHandle == NULL)
     {
-        System_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -425,7 +427,7 @@ static int32_t mcanLoopbackTest()
         Sync jump: 1
         BRP(Baud rate Prescaler): 2
 
-        Nominal Bit rate = (40)/(((8+6+5)+1)*BRP) = 1Mhz
+        Nominal Bit rate = (80)/(((8+6+5)+1)*BRP) = 1Mhz
 
         Timing Params for Data Bit rate:
         Prop seg: 2
@@ -434,7 +436,7 @@ static int32_t mcanLoopbackTest()
         Sync jump: 1
         BRP(Baud rate Prescaler): 1
 
-        Nominal Bit rate = (40)/(((2+2+3)+1)*BRP) = 5Mhz
+        Nominal Bit rate = (80)/(((2+2+3)+1)*BRP) = 5Mhz
     */
 
     mcanBitTimingParams.nomBrp      = 0x4U;
@@ -443,7 +445,7 @@ static int32_t mcanLoopbackTest()
     mcanBitTimingParams.nomPseg2    = 0x5U;
     mcanBitTimingParams.nomSjw      = 0x1U;
 
-    mcanBitTimingParams.dataBrp     = 0x1U;
+    mcanBitTimingParams.dataBrp     = 0x2U;
     mcanBitTimingParams.dataPropSeg = 0x2U;
     mcanBitTimingParams.dataPseg1   = 0x2U;
     mcanBitTimingParams.dataPseg2   = 0x3U;
@@ -453,7 +455,7 @@ static int32_t mcanLoopbackTest()
     retVal = CANFD_configBitTime (canHandle, &mcanBitTimingParams, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -470,7 +472,7 @@ static int32_t mcanLoopbackTest()
     retVal =  CANFD_setOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD set option Loopback failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD set option Loopback failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -482,7 +484,7 @@ static int32_t mcanLoopbackTest()
     txMsgObjHandle = CANFD_createMsgObject (canHandle, &txMsgObjectParams, &errCode);
     if (txMsgObjHandle == NULL)
     {
-        System_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -494,7 +496,7 @@ static int32_t mcanLoopbackTest()
     rxMsgObjHandle = CANFD_createMsgObject (canHandle, &rxMsgObjectParams, &errCode);
     if (rxMsgObjHandle == NULL)
     {
-        System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -520,7 +522,7 @@ static int32_t mcanLoopbackTest()
 
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD transmit data for iteration %d failed [Error code %d]\n", iterationCount, errCode);
+                UART_printf ("Error: CANFD transmit data for iteration %d failed [Error code %d]\n", iterationCount, errCode);
                 return -1;
             }
         }
@@ -541,15 +543,15 @@ static int32_t mcanLoopbackTest()
         iterationCount++;
     }
 
-    System_printf("Debug: Number of iterations              : %d\n", iterationCount);
-    System_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
-    System_printf("Debug: Number of messages received       : %d\n", gRxPkts);
-    System_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
-    System_printf("Debug: Number of data mismatch           : %d\n", gErrDataMissMatchCnt);
-    System_printf("Debug: Number of Frame mismatch          : %d\n", gErrFrameType);
-    System_printf("Debug: Number of Get_Data errors         : %d\n", gErrGetData);
-    System_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
-    System_printf("\n\n");
+    UART_printf("Debug: Number of iterations              : %d\n", iterationCount);
+    UART_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
+    UART_printf("Debug: Number of messages received       : %d\n", gRxPkts);
+    UART_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
+    UART_printf("Debug: Number of data mismatch           : %d\n", gErrDataMissMatchCnt);
+    UART_printf("Debug: Number of Frame mismatch          : %d\n", gErrFrameType);
+    UART_printf("Debug: Number of Get_Data errors         : %d\n", gErrGetData);
+    UART_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
+    UART_printf("\n\n");
 
     msgObjStats.handle = txMsgObjHandle;
     optionTLV.type = CANFD_Option_MCAN_MSG_OBJECT_STATS;
@@ -559,34 +561,34 @@ static int32_t mcanLoopbackTest()
     retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-    System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-    System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-    System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
-    System_printf("\n\n");
+    UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+    UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+    UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+    UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+    UART_printf("\n\n");
 
     msgObjStats.handle = rxMsgObjHandle;
     retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-    System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-    System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-    System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+    UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+    UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+    UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+    UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
 
-    System_printf("Debug: Receive & Transmit Measurements\n");
-    System_printf("Debug: Rx Min:%d Max: %d Average:%d ticks\n", minRxTicks, maxRxTicks, totalRxTicks/gRxPkts);
-    System_printf("Debug: Tx Min:%d Max: %d Average:%d ticks\n", minTxTicks, maxTxTicks, totalTxTicks/gTxPkts);
+    UART_printf("Debug: Receive & Transmit Measurements\n");
+    UART_printf("Debug: Rx Min:%d Max: %d Average:%d ticks\n", minRxTicks, maxRxTicks, totalRxTicks/gRxPkts);
+    UART_printf("Debug: Tx Min:%d Max: %d Average:%d ticks\n", minTxTicks, maxTxTicks, totalTxTicks/gTxPkts);
 
-    System_printf("\n\n");
+    UART_printf("\n\n");
 
     /* Reset the driver */
     optionTLV.type = CANFD_Option_MCAN_MODE;
@@ -597,7 +599,7 @@ static int32_t mcanLoopbackTest()
     retVal =  CANFD_setOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD set option Mode - SW INIT failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD set option Mode - SW INIT failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -609,28 +611,28 @@ static int32_t mcanLoopbackTest()
     retVal =  CANFD_setOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD set option Mode - NORMAL failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD set option Mode - NORMAL failed [Error code %d]\n", errCode);
         return -1;
     }
 
     retVal = CANFD_deleteMsgObject(txMsgObjHandle, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD delete Tx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD delete Tx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
     retVal = CANFD_deleteMsgObject(rxMsgObjHandle, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD delete Rx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD delete Rx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
     retVal = CANFD_deinit(canHandle, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD deinit failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD deinit failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -638,23 +640,23 @@ static int32_t mcanLoopbackTest()
     {
         if (testSelection == MCAN_APP_TEST_INTERNAL_LOOPBACK)
         {
-            System_printf("Debug: Internal loopback testing for %d iterations Passed\n", iterationCount);
+            UART_printf("Debug: Internal loopback testing for %d iterations Passed\n", iterationCount);
         }
         else
         {
-            System_printf("Debug: External loopback testing for %d iterations Passed\n", iterationCount);
+            UART_printf("Debug: External loopback testing for %d iterations Passed\n", iterationCount);
         }
     }
     else
     {
         if (testSelection == MCAN_APP_TEST_INTERNAL_LOOPBACK)
         {
-            System_printf("Debug: Internal loopback testing for %d iterations Failed\n", iterationCount);
+            UART_printf("Debug: Internal loopback testing for %d iterations Failed\n", iterationCount);
             retVal = -1;
         }
         else
         {
-            System_printf("Debug: External loopback testing for %d iterations Failed\n", iterationCount);
+            UART_printf("Debug: External loopback testing for %d iterations Failed\n", iterationCount);
             retVal = -1;
         }
     }
@@ -684,7 +686,7 @@ static int32_t mcanTestTxCancel()
     canHandle = CANFD_init(0U, &mcanCfgParams, &errCode);
     if (canHandle == NULL)
     {
-        System_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -695,7 +697,7 @@ static int32_t mcanTestTxCancel()
         Sync jump: 1
         BRP(Baud rate Prescaler): 2
 
-        Nominal Bit rate = (40)/(((8+6+5)+1)*BRP) = 1Mhz
+        Nominal Bit rate = (80)/(((8+6+5)+1)*BRP) = 1Mhz
 
         Timing Params for Data Bit rate:
         Prop seg: 2
@@ -704,7 +706,7 @@ static int32_t mcanTestTxCancel()
         Sync jump: 1
         BRP(Baud rate Prescaler): 1
 
-        Nominal Bit rate = (40)/(((2+2+3)+1)*BRP) = 5Mhz
+        Nominal Bit rate = (80)/(((2+2+3)+1)*BRP) = 5Mhz
     */
 
     mcanBitTimingParams.nomBrp      = 0x4U;
@@ -713,7 +715,7 @@ static int32_t mcanTestTxCancel()
     mcanBitTimingParams.nomPseg2    = 0x5U;
     mcanBitTimingParams.nomSjw      = 0x1U;
 
-    mcanBitTimingParams.dataBrp     = 0x1U;
+    mcanBitTimingParams.dataBrp     = 0x2U;
     mcanBitTimingParams.dataPropSeg = 0x2U;
     mcanBitTimingParams.dataPseg1   = 0x2U;
     mcanBitTimingParams.dataPseg2   = 0x3U;
@@ -723,7 +725,7 @@ static int32_t mcanTestTxCancel()
     retVal = CANFD_configBitTime (canHandle, &mcanBitTimingParams, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -737,7 +739,7 @@ static int32_t mcanTestTxCancel()
     retVal =  CANFD_setOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD set option Loopback failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD set option Loopback failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -749,7 +751,7 @@ static int32_t mcanTestTxCancel()
     txMsgObjHandle = CANFD_createMsgObject (canHandle, &txMsgObjectParams, &errCode);
     if (txMsgObjHandle == NULL)
     {
-        System_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -763,7 +765,7 @@ static int32_t mcanTestTxCancel()
 
         if (retVal < 0)
         {
-            System_printf ("Error: CANFD transmit data for iteration %d failed [Error code %d]\n", iterationCount, errCode);
+            UART_printf ("Error: CANFD transmit data for iteration %d failed [Error code %d]\n", iterationCount, errCode);
             return -1;
         }
 
@@ -771,7 +773,7 @@ static int32_t mcanTestTxCancel()
         retVal = CANFD_transmitDataCancel (txMsgObjHandle, &errCode);
         if (retVal < 0)
         {
-            System_printf ("Error: CANFD transmit data cancel for iteration %d failed [Error code %d]\n", iterationCount, errCode);
+            UART_printf ("Error: CANFD transmit data cancel for iteration %d failed [Error code %d]\n", iterationCount, errCode);
             return -1;
         }
 
@@ -781,14 +783,14 @@ static int32_t mcanTestTxCancel()
         iterationCount++;
     }
 
-    System_printf("Debug: Number of iterations              : %d\n", iterationCount);
-    System_printf("Debug: Number of messages Cancelled      : %d\n", gTxCancelPkts);
-    System_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
-    System_printf("Debug: Number of data mismatch           : %d\n", gErrDataMissMatchCnt);
-    System_printf("Debug: Number of Frame mismatch          : %d\n", gErrFrameType);
-    System_printf("Debug: Number of Get_Data errors         : %d\n", gErrGetData);
-    System_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
-    System_printf("\n\n");
+    UART_printf("Debug: Number of iterations              : %d\n", iterationCount);
+    UART_printf("Debug: Number of messages Cancelled      : %d\n", gTxCancelPkts);
+    UART_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
+    UART_printf("Debug: Number of data mismatch           : %d\n", gErrDataMissMatchCnt);
+    UART_printf("Debug: Number of Frame mismatch          : %d\n", gErrFrameType);
+    UART_printf("Debug: Number of Get_Data errors         : %d\n", gErrGetData);
+    UART_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
+    UART_printf("\n\n");
 
     msgObjStats.handle = txMsgObjHandle;
     optionTLV.type = CANFD_Option_MCAN_MSG_OBJECT_STATS;
@@ -798,15 +800,15 @@ static int32_t mcanTestTxCancel()
     retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-    System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-    System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-    System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
-    System_printf("\n\n");
+    UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+    UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+    UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+    UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+    UART_printf("\n\n");
 
     /* Reset the driver */
     optionTLV.type = CANFD_Option_MCAN_MODE;
@@ -817,7 +819,7 @@ static int32_t mcanTestTxCancel()
     retVal =  CANFD_setOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD set option Mode - SW INIT failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD set option Mode - SW INIT failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -829,25 +831,25 @@ static int32_t mcanTestTxCancel()
     retVal =  CANFD_setOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD set option Mode - NORMAL failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD set option Mode - NORMAL failed [Error code %d]\n", errCode);
         return -1;
     }
 
     retVal = CANFD_deleteMsgObject(txMsgObjHandle, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD delete Tx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD delete Tx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
     retVal = CANFD_deinit(canHandle, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD deinit failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD deinit failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    System_printf("Debug: Tx transmit cancel testing for %d iterations Passed\n", iterationCount);
+    UART_printf("Debug: Tx transmit cancel testing for %d iterations Passed\n", iterationCount);
     return retVal;
 }
 
@@ -875,7 +877,7 @@ static int32_t mcanPowerDownTest()
     canHandle = CANFD_init(0U, &mcanCfgParams, &errCode);
     if (canHandle == NULL)
     {
-        System_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -886,7 +888,7 @@ static int32_t mcanPowerDownTest()
         Sync jump: 1
         BRP(Baud rate Prescaler): 2
 
-        Nominal Bit rate = (40)/(((8+6+5)+1)*BRP) = 1Mhz
+        Nominal Bit rate = (80)/(((8+6+5)+1)*BRP) = 1Mhz
 
         Timing Params for Data Bit rate:
         Prop seg: 2
@@ -895,7 +897,7 @@ static int32_t mcanPowerDownTest()
         Sync jump: 1
         BRP(Baud rate Prescaler): 1
 
-        Nominal Bit rate = (40)/(((2+2+3)+1)*BRP) = 5Mhz
+        Nominal Bit rate = (80)/(((2+2+3)+1)*BRP) = 5Mhz
     */
 
     mcanBitTimingParams.nomBrp      = 0x4U;
@@ -904,7 +906,7 @@ static int32_t mcanPowerDownTest()
     mcanBitTimingParams.nomPseg2    = 0x5U;
     mcanBitTimingParams.nomSjw      = 0x1U;
 
-    mcanBitTimingParams.dataBrp     = 0x1U;
+    mcanBitTimingParams.dataBrp     = 0x2U;
     mcanBitTimingParams.dataPropSeg = 0x2U;
     mcanBitTimingParams.dataPseg1   = 0x2U;
     mcanBitTimingParams.dataPseg2   = 0x3U;
@@ -914,7 +916,7 @@ static int32_t mcanPowerDownTest()
     retVal = CANFD_configBitTime (canHandle, &mcanBitTimingParams, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -928,7 +930,7 @@ static int32_t mcanPowerDownTest()
     retVal =  CANFD_setOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD set option Loopback failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD set option Loopback failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -940,7 +942,7 @@ static int32_t mcanPowerDownTest()
     txMsgObjHandle = CANFD_createMsgObject (canHandle, &txMsgObjectParams, &errCode);
     if (txMsgObjHandle == NULL)
     {
-        System_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -952,7 +954,7 @@ static int32_t mcanPowerDownTest()
     rxMsgObjHandle = CANFD_createMsgObject (canHandle, &rxMsgObjectParams, &errCode);
     if (rxMsgObjHandle == NULL)
     {
-        System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -978,7 +980,7 @@ static int32_t mcanPowerDownTest()
 
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD transmit data for iteration %d failed [Error code %d]\n", iterationCount, errCode);
+                UART_printf ("Error: CANFD transmit data for iteration %d failed [Error code %d]\n", iterationCount, errCode);
                 return -1;
             }
         }
@@ -999,15 +1001,15 @@ static int32_t mcanPowerDownTest()
         iterationCount++;
     }
 
-    System_printf("Debug: Number of iterations              : %d\n", iterationCount);
-    System_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
-    System_printf("Debug: Number of messages received       : %d\n", gRxPkts);
-    System_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
-    System_printf("Debug: Number of data mismatch           : %d\n", gErrDataMissMatchCnt);
-    System_printf("Debug: Number of Frame mismatch          : %d\n", gErrFrameType);
-    System_printf("Debug: Number of Get_Data errors         : %d\n", gErrGetData);
-    System_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
-    System_printf("\n\n");
+    UART_printf("Debug: Number of iterations              : %d\n", iterationCount);
+    UART_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
+    UART_printf("Debug: Number of messages received       : %d\n", gRxPkts);
+    UART_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
+    UART_printf("Debug: Number of data mismatch           : %d\n", gErrDataMissMatchCnt);
+    UART_printf("Debug: Number of Frame mismatch          : %d\n", gErrFrameType);
+    UART_printf("Debug: Number of Get_Data errors         : %d\n", gErrGetData);
+    UART_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
+    UART_printf("\n\n");
 
     msgObjStats.handle = txMsgObjHandle;
     optionTLV.type = CANFD_Option_MCAN_MSG_OBJECT_STATS;
@@ -1017,30 +1019,30 @@ static int32_t mcanPowerDownTest()
     retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-    System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-    System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-    System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
-    System_printf("\n\n");
+    UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+    UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+    UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+    UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+    UART_printf("\n\n");
 
     msgObjStats.handle = rxMsgObjHandle;
     retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-    System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-    System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-    System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+    UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+    UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+    UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+    UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
 
-    System_printf("\n\n");
+    UART_printf("\n\n");
 
     /* Power Down the module */
     optionTLV.type = CANFD_Option_MCAN_POWER_DOWN;
@@ -1051,11 +1053,11 @@ static int32_t mcanPowerDownTest()
     retVal =  CANFD_setOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD set option Power Down failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD set option Power Down failed [Error code %d]\n", errCode);
         return -1;
     }
     else
-        System_printf ("Debug: CANFD Module Power Down sucessful\n");
+        UART_printf ("Debug: CANFD Module Power Down sucessful\n");
 
     optionTLV.type = CANFD_Option_MCAN_POWER_DOWN;
     optionTLV.length = sizeof(uint8_t);
@@ -1065,13 +1067,13 @@ static int32_t mcanPowerDownTest()
     retVal =  CANFD_setOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD set option Wake Up failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD set option Wake Up failed [Error code %d]\n", errCode);
         return -1;
     }
     else
-        System_printf ("Debug: CANFD Module is Wake Up sucessful\n");
+        UART_printf ("Debug: CANFD Module is Wake Up sucessful\n");
 
-    System_printf("\n\n");
+    UART_printf("\n\n");
 
     iterationCount = 0;
     while (iterationCount != MCAN_APP_TEST_MESSAGE_COUNT)
@@ -1088,7 +1090,7 @@ static int32_t mcanPowerDownTest()
 
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD transmit data for iteration %d failed [Error code %d]\n", iterationCount, errCode);
+                UART_printf ("Error: CANFD transmit data for iteration %d failed [Error code %d]\n", iterationCount, errCode);
                 return -1;
             }
         }
@@ -1109,16 +1111,16 @@ static int32_t mcanPowerDownTest()
         iterationCount++;
     }
 
-    System_printf("\n\n");
-    System_printf("Debug: Number of iterations              : %d\n", iterationCount);
-    System_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
-    System_printf("Debug: Number of messages received       : %d\n", gRxPkts);
-    System_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
-    System_printf("Debug: Number of data mismatch           : %d\n", gErrDataMissMatchCnt);
-    System_printf("Debug: Number of Frame mismatch          : %d\n", gErrFrameType);
-    System_printf("Debug: Number of Get_Data errors         : %d\n", gErrGetData);
-    System_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
-    System_printf("\n\n");
+    UART_printf("\n\n");
+    UART_printf("Debug: Number of iterations              : %d\n", iterationCount);
+    UART_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
+    UART_printf("Debug: Number of messages received       : %d\n", gRxPkts);
+    UART_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
+    UART_printf("Debug: Number of data mismatch           : %d\n", gErrDataMissMatchCnt);
+    UART_printf("Debug: Number of Frame mismatch          : %d\n", gErrFrameType);
+    UART_printf("Debug: Number of Get_Data errors         : %d\n", gErrGetData);
+    UART_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
+    UART_printf("\n\n");
 
     msgObjStats.handle = txMsgObjHandle;
     optionTLV.type = CANFD_Option_MCAN_MSG_OBJECT_STATS;
@@ -1128,55 +1130,55 @@ static int32_t mcanPowerDownTest()
     retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-    System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-    System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-    System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
-    System_printf("\n\n");
+    UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+    UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+    UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+    UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+    UART_printf("\n\n");
 
     msgObjStats.handle = rxMsgObjHandle;
     retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-    System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-    System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-    System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+    UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+    UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+    UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+    UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
 
-    System_printf("\n\n");
+    UART_printf("\n\n");
 
     retVal = CANFD_deleteMsgObject(txMsgObjHandle, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD delete Tx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD delete Tx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
     retVal = CANFD_deleteMsgObject(rxMsgObjHandle, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD delete Rx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD delete Rx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
     retVal = CANFD_deinit(canHandle, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD deinit failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD deinit failed [Error code %d]\n", errCode);
         return -1;
     }
 
     if ((gErrMsgLstCnt != 0) || (gErrDataMissMatchCnt != 0) && (gErrFrameType == 0) && (gErrGetData == 0))
     {
-        System_printf("Debug: Power down testing with data failed\n");
+        UART_printf("Debug: Power down testing with data failed\n");
         retVal = -1;
     }
     return retVal;
@@ -1201,6 +1203,7 @@ static int32_t mcanTransmitTest()
     uint32_t                    index = 0U;
     uint32_t                    msgId ;
     uint32_t                    idIndex = 0;
+    uint32_t                    numIterations;
 
     gTxDoneFlag = 0;
     gRxDoneFlag = 0;
@@ -1211,7 +1214,7 @@ static int32_t mcanTransmitTest()
     canHandle = CANFD_init(0U, &mcanCfgParams, &errCode);
     if (canHandle == NULL)
     {
-        System_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1222,7 +1225,7 @@ static int32_t mcanTransmitTest()
         Sync jump: 1
         BRP(Baud rate Prescaler): 2
 
-        Nominal Bit rate = (40)/(((8+6+5)+1)*BRP) = 1Mhz
+        Nominal Bit rate = (80)/(((8+6+5)+1)*BRP) = 1Mhz
 
         Timing Params for Data Bit rate:
         Prop seg: 2
@@ -1231,41 +1234,25 @@ static int32_t mcanTransmitTest()
         Sync jump: 1
         BRP(Baud rate Prescaler): 1
 
-        Nominal Bit rate = (40)/(((2+2+3)+1)*BRP) = 5Mhz
+        Nominal Bit rate = (80)/(((2+2+3)+1)*BRP) = 5Mhz
     */
-#if 1
-    mcanBitTimingParams.nomBrp      = 0x2U;
+    mcanBitTimingParams.nomBrp      = 0x4U;
     mcanBitTimingParams.nomPropSeg  = 0x8U;
     mcanBitTimingParams.nomPseg1    = 0x6U;
     mcanBitTimingParams.nomPseg2    = 0x5U;
     mcanBitTimingParams.nomSjw      = 0x1U;
 
-    /*5MHz*/
-    mcanBitTimingParams.dataBrp     = 0x1U;
+    mcanBitTimingParams.dataBrp     = 0x2U;
     mcanBitTimingParams.dataPropSeg = 0x2U;
     mcanBitTimingParams.dataPseg1   = 0x2U;
     mcanBitTimingParams.dataPseg2   = 0x3U;
     mcanBitTimingParams.dataSjw     = 0x1U;
-#else
-    mcanBitTimingParams.nomBrp      = 0x2U;
-    mcanBitTimingParams.nomPropSeg  = 0x8U;
-    mcanBitTimingParams.nomPseg1    = 0x6U;
-    mcanBitTimingParams.nomPseg2    = 0x5U;
-    mcanBitTimingParams.nomSjw      = 0x1U;
-
-    /*8MHz*/
-    mcanBitTimingParams.dataBrp     = 0x1U;
-    mcanBitTimingParams.dataPropSeg = 0x2U;
-    mcanBitTimingParams.dataPseg1   = 0x1U;
-    mcanBitTimingParams.dataPseg2   = 0x1U;
-    mcanBitTimingParams.dataSjw     = 0x1U;
-#endif
 
     /* Configure the CAN driver */
     retVal = CANFD_configBitTime (canHandle, &mcanBitTimingParams, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1277,7 +1264,7 @@ static int32_t mcanTransmitTest()
     txMsgObjHandle = CANFD_createMsgObject (canHandle, &txMsgObjectParams, &errCode);
     if (txMsgObjHandle == NULL)
     {
-        System_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1289,11 +1276,12 @@ static int32_t mcanTransmitTest()
     rxMsgObjHandle = CANFD_createMsgObject (canHandle, &rxMsgObjectParams, &errCode);
     if (rxMsgObjHandle == NULL)
     {
-        System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    while (1)
+    numIterations = 0;
+    while (numIterations < 5)
     {
         /* Send data over Tx message object */
         if (testFrameType == CANFD_MCANFrameType_FD)
@@ -1305,13 +1293,13 @@ static int32_t mcanTransmitTest()
                 idIndex = 0;
             }
             msgId = txMsgObjectParams.msgIdentifier + idIndex;
-            Task_sleep(1U);
+            Task_sleep(100U);
             while(length > MCAN_APP_TEST_DATA_SIZE)
             {
 
                 retVal = CANFD_transmitData (txMsgObjHandle, msgId, CANFD_MCANFrameType_FD, MCAN_APP_TEST_DATA_SIZE, &txData[0], &errCode);
                 length = length - MCAN_APP_TEST_DATA_SIZE;
-                Task_sleep(1);
+                Task_sleep(100);
             }
             idIndex++;
         }
@@ -1321,7 +1309,7 @@ static int32_t mcanTransmitTest()
             length = 128U;
             index = 0;
             msgId = txMsgObjectParams.msgIdentifier;
-            Task_sleep(1);
+            Task_sleep(100);
             while(length > 8U)
             {
 
@@ -1329,12 +1317,12 @@ static int32_t mcanTransmitTest()
                 length = length - 8U;
                 index = index + 8U;
                 msgId = msgId + 1U;
-                Task_sleep(1U);
+                Task_sleep(100U);
             }
             retVal = CANFD_transmitData (txMsgObjHandle, msgId, CANFD_MCANFrameType_CLASSIC, length, &txData[index], &errCode);
 
         }
-        Task_sleep(2U);
+        Task_sleep(200U);
         if (retVal < 0)
         {
             gErrMsgLstCnt++;
@@ -1347,13 +1335,13 @@ static int32_t mcanTransmitTest()
         {
             gDisplayStats = 0;
 
-            System_printf("Debug: Number of iterations              : %d\n", iterationCount);
-            System_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
-            System_printf("Debug: Number of messages received       : %d\n", gRxPkts);
-            System_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
-            System_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
-            System_printf("Debug: Error Reason                      : %d\n", gErrorReason);
-            System_printf("\n\n");
+            UART_printf("Debug: Number of iterations              : %d\n", iterationCount);
+            UART_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
+            UART_printf("Debug: Number of messages received       : %d\n", gRxPkts);
+            UART_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
+            UART_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
+            UART_printf("Debug: Error Reason                      : %d\n", gErrorReason);
+            UART_printf("\n\n");
 
             msgObjStats.handle = txMsgObjHandle;
             optionTLV.type = CANFD_Option_MCAN_MSG_OBJECT_STATS;
@@ -1363,27 +1351,27 @@ static int32_t mcanTransmitTest()
             retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
             }
 
-            System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-            System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-            System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-            System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
-            System_printf("\n\n");
+            UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+            UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+            UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+            UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+            UART_printf("\n\n");
 
             msgObjStats.handle = rxMsgObjHandle;
             retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
             }
 
-            System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-            System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-            System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-            System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
-            System_printf("\n\n");
+            UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+            UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+            UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+            UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+            UART_printf("\n\n");
 
             optionTLV.type = CANFD_Option_MCAN_ERROR_COUNTER;
             optionTLV.length = sizeof(CANFD_MCANErrCntStatus);
@@ -1392,14 +1380,14 @@ static int32_t mcanTransmitTest()
             retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD get error counter failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD get error counter failed [Error code %d]\n", errCode);
             }
 
-            System_printf("Debug: Receive passive status            : %d\n", errCounter.rpStatus);
-            System_printf("Debug: Transmit Error Counter            : %d\n", errCounter.transErrLogCnt);
-            System_printf("Debug: Receive Error Counter             : %d\n", errCounter.recErrCnt);
-            System_printf("Debug: Error Logging Counter             : %d\n", errCounter.canErrLogCnt);
-            System_printf("\n\n");
+            UART_printf("Debug: Receive passive status            : %d\n", errCounter.rpStatus);
+            UART_printf("Debug: Transmit Error Counter            : %d\n", errCounter.transErrLogCnt);
+            UART_printf("Debug: Receive Error Counter             : %d\n", errCounter.recErrCnt);
+            UART_printf("Debug: Error Logging Counter             : %d\n", errCounter.canErrLogCnt);
+            UART_printf("\n\n");
 
             optionTLV.type = CANFD_Option_MCAN_PROTOCOL_STATUS;
             optionTLV.length = sizeof(CANFD_MCANProtocolStatus);
@@ -1408,23 +1396,25 @@ static int32_t mcanTransmitTest()
             retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD get protocol status failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD get protocol status failed [Error code %d]\n", errCode);
             }
 
-            System_printf("Debug: LEC                               : %d\n", protoStatus.lastErrCode);
-            System_printf("Debug: Activity                          : %d\n", protoStatus.act);
-            System_printf("Debug: Error Passive                     : %d\n", protoStatus.errPassive);
-            System_printf("Debug: Warning Status                    : %d\n", protoStatus.warningStatus);
-            System_printf("Debug: Bus Off Status                    : %d\n", protoStatus.busOffStatus);
-            System_printf("Debug: Data Phase LEC                    : %d\n", protoStatus.dlec);
-            System_printf("Debug: Rx ESI flag                       : %d\n", protoStatus.resi);
-            System_printf("Debug: Rx BRS flag                       : %d\n", protoStatus.rbrs);
-            System_printf("Debug: Rx CAN FD                         : %d\n", protoStatus.rfdf);
-            System_printf("Debug: Protocol Exception Event          : %d\n", protoStatus.pxe);
-            System_printf("Debug: TDC value                         : %d\n", protoStatus.tdcv);
-            System_printf("\n\n");
+            UART_printf("Debug: LEC                               : %d\n", protoStatus.lastErrCode);
+            UART_printf("Debug: Activity                          : %d\n", protoStatus.act);
+            UART_printf("Debug: Error Passive                     : %d\n", protoStatus.errPassive);
+            UART_printf("Debug: Warning Status                    : %d\n", protoStatus.warningStatus);
+            UART_printf("Debug: Bus Off Status                    : %d\n", protoStatus.busOffStatus);
+            UART_printf("Debug: Data Phase LEC                    : %d\n", protoStatus.dlec);
+            UART_printf("Debug: Rx ESI flag                       : %d\n", protoStatus.resi);
+            UART_printf("Debug: Rx BRS flag                       : %d\n", protoStatus.rbrs);
+            UART_printf("Debug: Rx CAN FD                         : %d\n", protoStatus.rfdf);
+            UART_printf("Debug: Protocol Exception Event          : %d\n", protoStatus.pxe);
+            UART_printf("Debug: TDC value                         : %d\n", protoStatus.tdcv);
+            UART_printf("\n\n");
         }
+        numIterations++;
     }
+    return 0;
 }
 
 static int32_t mcanEVM_EVMTest()
@@ -1456,7 +1446,7 @@ static int32_t mcanEVM_EVMTest()
     canHandle = CANFD_init(0U, &mcanCfgParams, &errCode);
     if (canHandle == NULL)
     {
-        System_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1479,13 +1469,13 @@ static int32_t mcanEVM_EVMTest()
         Nominal Bit rate = (40)/(((2+2+3)+1)*BRP) = 5Mhz
     */
 
-    mcanBitTimingParams.nomBrp      = 0x2U;
+    mcanBitTimingParams.nomBrp      = 0x4U;
     mcanBitTimingParams.nomPropSeg  = 0x8U;
     mcanBitTimingParams.nomPseg1    = 0x6U;
     mcanBitTimingParams.nomPseg2    = 0x5U;
     mcanBitTimingParams.nomSjw      = 0x1U;
 
-    mcanBitTimingParams.dataBrp     = 0x1U;
+    mcanBitTimingParams.dataBrp     = 0x2U;
     mcanBitTimingParams.dataPropSeg = 0x2U;
     mcanBitTimingParams.dataPseg1   = 0x2U;
     mcanBitTimingParams.dataPseg2   = 0x3U;
@@ -1495,7 +1485,7 @@ static int32_t mcanEVM_EVMTest()
     retVal = CANFD_configBitTime (canHandle, &mcanBitTimingParams, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1518,13 +1508,13 @@ static int32_t mcanEVM_EVMTest()
         txMsgObjHandle = CANFD_createMsgObject (canHandle, &txMsgObjectParams, &errCode);
         if (txMsgObjHandle == NULL)
         {
-            System_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
+            UART_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
             return -1;
         }
         else
         {
-            System_printf ("Debug: EVM in transmit mode...\n");
-            System_printf("\n\n");
+            UART_printf ("Debug: EVM in transmit mode...\n");
+            UART_printf("\n\n");
         }
 
         for (i = 0; i < MCAN_APP_TEST_MESSAGE_COUNT; i++)
@@ -1554,11 +1544,11 @@ static int32_t mcanEVM_EVMTest()
             gTxDoneFlag = 0;
         }
 
-        System_printf("Debug: Number of iterations              : %d\n", iterationCount);
-        System_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
-        System_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
-        System_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
-        System_printf("\n\n");
+        UART_printf("Debug: Number of iterations              : %d\n", iterationCount);
+        UART_printf("Debug: Number of messages transmitted    : %d\n", gTxPkts);
+        UART_printf("Debug: Number of messages lost           : %d\n", gErrMsgLstCnt);
+        UART_printf("Debug: Error Status Interrupt            : %d\n", gErrStatusInt);
+        UART_printf("\n\n");
 
         msgObjStats.handle = txMsgObjHandle;
         optionTLV.type = CANFD_Option_MCAN_MSG_OBJECT_STATS;
@@ -1568,14 +1558,14 @@ static int32_t mcanEVM_EVMTest()
         retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
         if (retVal < 0)
         {
-            System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+            UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
         }
 
-        System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-        System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-        System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-        System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
-        System_printf("\n\n");
+        UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+        UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+        UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+        UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+        UART_printf("\n\n");
     }
 
     /* Set the EVM in recieve mode*/
@@ -1591,12 +1581,12 @@ static int32_t mcanEVM_EVMTest()
             rxMsgObjHandle = CANFD_createMsgObject (canHandle, &rxMsgObjectParams, &errCode);
             if (rxMsgObjHandle == NULL)
             {
-                System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
                 return -1;
             }
             else
             {
-                System_printf ("Debug: EVM in Rx buffer mode...\n");
+                UART_printf ("Debug: EVM in Rx buffer mode...\n");
             }
 
         }
@@ -1609,12 +1599,12 @@ static int32_t mcanEVM_EVMTest()
             rxRangeMsgObjHandle = CANFD_createRxRangeMsgObject (canHandle, &rxRangeMsgObjectParams, &errCode);
             if (rxRangeMsgObjHandle == NULL)
             {
-                System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
                 return -1;
             }
             else
             {
-                System_printf ("Debug: EVM in Rx FIFO mode...\n");
+                UART_printf ("Debug: EVM in Rx FIFO mode...\n");
             }
         }
 
@@ -1635,25 +1625,25 @@ static int32_t mcanEVM_EVMTest()
         retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
         if (retVal < 0)
         {
-            System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+            UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
         }
 
-        System_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
-        System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-        System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-        System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
-        System_printf("Debug: Number of messages received       : %d\n", gRxPkts);
-        System_printf("\n\n");
+        UART_printf("Debug: Message Identifier                : 0x%x\n", msgObjStats.startMsgIdentifier);
+        UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+        UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+        UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+        UART_printf("Debug: Number of messages received       : %d\n", gRxPkts);
+        UART_printf("\n\n");
 
 
-        System_printf("Debug: Receive & Transmit Measurements\n");
-        System_printf("Debug: Rx Min:%d Max:%d Total:%d ticks, Total packets: %d\n", minRxTicks, maxRxTicks, totalRxTicks, gRxPkts);
+        UART_printf("Debug: Receive & Transmit Measurements\n");
+        UART_printf("Debug: Rx Min:%d Max:%d Total:%d ticks, Total packets: %d\n", minRxTicks, maxRxTicks, totalRxTicks, gRxPkts);
 
         /* 8 bits per byte * (data size + header) * Number of packet * VBUS frequency / total ticks */
         throughput = 8.0 * (MCAN_APP_TEST_DATA_SIZE + 16U) * gRxPkts * VBUSP_FREQ / totalRxTicks;
         printf("Debug: Rx Throughput: %.2f Mbps\n", throughput);
 
-        System_printf("\n\n");
+        UART_printf("\n\n");
 
         optionTLV.type = CANFD_Option_MCAN_ERROR_COUNTER;
         optionTLV.length = sizeof(CANFD_MCANErrCntStatus);
@@ -1662,14 +1652,14 @@ static int32_t mcanEVM_EVMTest()
         retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
         if (retVal < 0)
         {
-            System_printf ("Error: CANFD get error counter failed [Error code %d]\n", errCode);
+            UART_printf ("Error: CANFD get error counter failed [Error code %d]\n", errCode);
         }
 
-        System_printf("Debug: Receive passive status            : %d\n", errCounter.rpStatus);
-        System_printf("Debug: Transmit Error Counter            : %d\n", errCounter.transErrLogCnt);
-        System_printf("Debug: Receive Error Counter             : %d\n", errCounter.recErrCnt);
-        System_printf("Debug: Error Logging Counter             : %d\n", errCounter.canErrLogCnt);
-        System_printf("\n\n");
+        UART_printf("Debug: Receive passive status            : %d\n", errCounter.rpStatus);
+        UART_printf("Debug: Transmit Error Counter            : %d\n", errCounter.transErrLogCnt);
+        UART_printf("Debug: Receive Error Counter             : %d\n", errCounter.recErrCnt);
+        UART_printf("Debug: Error Logging Counter             : %d\n", errCounter.canErrLogCnt);
+        UART_printf("\n\n");
 
         optionTLV.type = CANFD_Option_MCAN_PROTOCOL_STATUS;
         optionTLV.length = sizeof(CANFD_MCANProtocolStatus);
@@ -1678,21 +1668,21 @@ static int32_t mcanEVM_EVMTest()
         retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
         if (retVal < 0)
         {
-            System_printf ("Error: CANFD get protocol status failed [Error code %d]\n", errCode);
+            UART_printf ("Error: CANFD get protocol status failed [Error code %d]\n", errCode);
         }
 
-        System_printf("Debug: LEC                               : %d\n", protoStatus.lastErrCode);
-        System_printf("Debug: Activity                          : %d\n", protoStatus.act);
-        System_printf("Debug: Error Passive                     : %d\n", protoStatus.errPassive);
-        System_printf("Debug: Warning Status                    : %d\n", protoStatus.warningStatus);
-        System_printf("Debug: Bus Off Status                    : %d\n", protoStatus.busOffStatus);
-        System_printf("Debug: Data Phase LEC                    : %d\n", protoStatus.dlec);
-        System_printf("Debug: Rx ESI flag                       : %d\n", protoStatus.resi);
-        System_printf("Debug: Rx BRS flag                       : %d\n", protoStatus.rbrs);
-        System_printf("Debug: Rx CAN FD                         : %d\n", protoStatus.rfdf);
-        System_printf("Debug: Protocol Exception Event          : %d\n", protoStatus.pxe);
-        System_printf("Debug: TDC value                         : %d\n", protoStatus.tdcv);
-        System_printf("\n\n");
+        UART_printf("Debug: LEC                               : %d\n", protoStatus.lastErrCode);
+        UART_printf("Debug: Activity                          : %d\n", protoStatus.act);
+        UART_printf("Debug: Error Passive                     : %d\n", protoStatus.errPassive);
+        UART_printf("Debug: Warning Status                    : %d\n", protoStatus.warningStatus);
+        UART_printf("Debug: Bus Off Status                    : %d\n", protoStatus.busOffStatus);
+        UART_printf("Debug: Data Phase LEC                    : %d\n", protoStatus.dlec);
+        UART_printf("Debug: Rx ESI flag                       : %d\n", protoStatus.resi);
+        UART_printf("Debug: Rx BRS flag                       : %d\n", protoStatus.rbrs);
+        UART_printf("Debug: Rx CAN FD                         : %d\n", protoStatus.rfdf);
+        UART_printf("Debug: Protocol Exception Event          : %d\n", protoStatus.pxe);
+        UART_printf("Debug: TDC value                         : %d\n", protoStatus.tdcv);
+        UART_printf("\n\n");
     }
 
     return 0;
@@ -1708,6 +1698,7 @@ static int32_t mcanMultiTransmission()
     CANFD_MCANBitTimingParams   mcanBitTimingParams;
     CANFD_MCANMsgObjCfgParams   txMsgObjectParams[5U];
     int32_t                     index;
+    uint32_t                    numIterations;
 
     gTxDoneFlag = 0;
     gRxDoneFlag = 0;
@@ -1718,7 +1709,7 @@ static int32_t mcanMultiTransmission()
     canHandle = CANFD_init(0U, &mcanCfgParams, &errCode);
     if (canHandle == NULL)
     {
-        System_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1729,7 +1720,7 @@ static int32_t mcanMultiTransmission()
         Sync jump: 1
         BRP(Baud rate Prescaler): 2
 
-        Nominal Bit rate = (40)/(((8+6+5)+1)*BRP) = 1Mhz
+        Nominal Bit rate = (80)/(((8+6+5)+1)*BRP) = 1Mhz
 
         Timing Params for Data Bit rate:
         Prop seg: 2
@@ -1738,16 +1729,16 @@ static int32_t mcanMultiTransmission()
         Sync jump: 1
         BRP(Baud rate Prescaler): 1
 
-        Nominal Bit rate = (40)/(((2+8+6)+5)*2) = 1Mhz
+        Nominal Bit rate = (80)/(((2+8+6)+5)*2) = 1Mhz
     */
 
-    mcanBitTimingParams.nomBrp      = 0x2U;
+    mcanBitTimingParams.nomBrp      = 0x4U;
     mcanBitTimingParams.nomPropSeg  = 0x8U;
     mcanBitTimingParams.nomPseg1    = 0x6U;
     mcanBitTimingParams.nomPseg2    = 0x5U;
     mcanBitTimingParams.nomSjw      = 0x1U;
 
-    mcanBitTimingParams.dataBrp     = 0x2U;
+    mcanBitTimingParams.dataBrp     = 0x4U;
     mcanBitTimingParams.dataPropSeg = 0x8U;
     mcanBitTimingParams.dataPseg1   = 0x6U;
     mcanBitTimingParams.dataPseg2   = 0x5U;
@@ -1757,11 +1748,12 @@ static int32_t mcanMultiTransmission()
     retVal = CANFD_configBitTime (canHandle, &mcanBitTimingParams, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
         return -1;
     }
 
-    while (1)
+    numIterations = 0;
+    while (numIterations < 5)
     {
         /* Setup the transmit message object */
         for(index = 0; index < 5U ; index++)
@@ -1773,7 +1765,7 @@ static int32_t mcanMultiTransmission()
             txMsgObjHandle[index] = CANFD_createMsgObject (canHandle, &txMsgObjectParams[index], &errCode);
             if (txMsgObjHandle[index] == NULL)
             {
-                System_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
                 return -1;
             }
         }
@@ -1783,9 +1775,9 @@ static int32_t mcanMultiTransmission()
             retVal = CANFD_transmitData (txMsgObjHandle[index], txMsgObjectParams[index].msgIdentifier, CANFD_MCANFrameType_CLASSIC, 8U, &txData[0], &errCode);
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD transmit data retry failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD transmit data retry failed [Error code %d]\n", errCode);
             }
-            Task_sleep(1);
+            Task_sleep(100);
         }
 
         /* Delete the transmit message object */
@@ -1794,11 +1786,13 @@ static int32_t mcanMultiTransmission()
             retVal = CANFD_deleteMsgObject(txMsgObjHandle[index], &errCode);
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD delete Tx message object failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD delete Tx message object failed [Error code %d]\n", errCode);
                 return -1;
             }
         }
+        numIterations++;
     }
+    return 0;
 }
 
 static int32_t mcanMsgIdRangeTest()
@@ -1825,7 +1819,7 @@ static int32_t mcanMsgIdRangeTest()
     canHandle = CANFD_init(0U, &mcanCfgParams, &errCode);
     if (canHandle == NULL)
     {
-        System_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1836,7 +1830,7 @@ static int32_t mcanMsgIdRangeTest()
         Sync jump: 1
         BRP(Baud rate Prescaler): 2
 
-        Nominal Bit rate = (40)/(((8+6+5)+1)*BRP) = 1Mhz
+        Nominal Bit rate = (80)/(((8+6+5)+1)*BRP) = 1Mhz
 
         Timing Params for Data Bit rate:
         Prop seg: 2
@@ -1845,16 +1839,16 @@ static int32_t mcanMsgIdRangeTest()
         Sync jump: 1
         BRP(Baud rate Prescaler): 1
 
-        Data Bit rate = (40)/(((1+2+1)+1)*1) = 8Mhz
+        Data Bit rate = (80)/(((1+2+1)+1)*BRP) = 4Mhz
     */
 
-    mcanBitTimingParams.nomBrp      = 0x2U;
+    mcanBitTimingParams.nomBrp      = 0x4U;
     mcanBitTimingParams.nomPropSeg  = 0x8U;
     mcanBitTimingParams.nomPseg1    = 0x6U;
     mcanBitTimingParams.nomPseg2    = 0x5U;
     mcanBitTimingParams.nomSjw      = 0x1U;
 
-    mcanBitTimingParams.dataBrp     = 0x1U;
+    mcanBitTimingParams.dataBrp     = 0x4U;
     mcanBitTimingParams.dataPropSeg = 0x2U;
     mcanBitTimingParams.dataPseg1   = 0x1U;
     mcanBitTimingParams.dataPseg2   = 0x1U;
@@ -1864,7 +1858,7 @@ static int32_t mcanMsgIdRangeTest()
     retVal = CANFD_configBitTime (canHandle, &mcanBitTimingParams, &errCode);
     if (retVal < 0)
     {
-        System_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1877,7 +1871,7 @@ static int32_t mcanMsgIdRangeTest()
 
     if (rxMsgObjHandle == NULL)
     {
-        System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1891,7 +1885,7 @@ static int32_t mcanMsgIdRangeTest()
 
     if (rxMsgEndObjHandle == NULL)
     {
-        System_printf ("Error: CANFD create Terminate Rx message object failed [Error code %d]\n", errCode);
+        UART_printf ("Error: CANFD create Terminate Rx message object failed [Error code %d]\n", errCode);
         return -1;
     }
 
@@ -1905,7 +1899,7 @@ static int32_t mcanMsgIdRangeTest()
         rxRangeMsgObjHandle[index] = CANFD_createRxRangeMsgObject (canHandle, &rxRangeMsgObjectParams, &errCode);
         if (rxRangeMsgObjHandle[index] == NULL)
         {
-            System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
+            UART_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
             return -1;
         }
     }
@@ -1918,7 +1912,7 @@ static int32_t mcanMsgIdRangeTest()
         while (gRxDoneFlag == 0);
         gRxDoneFlag = 0;
 
-        Task_sleep(1);
+        Task_sleep(100);
 
         if (gTerminate == 1)
         {
@@ -1937,16 +1931,16 @@ static int32_t mcanMsgIdRangeTest()
             retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
             if (retVal < 0)
             {
-                System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+                UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
             }
 
-            System_printf("Debug: Single Message Identifier\n");
-            System_printf("Debug: Start Message Identifier          : 0x%x\n", msgObjStats.startMsgIdentifier);
-            System_printf("Debug: End Message Identifier            : 0x%x\n", msgObjStats.endMsgIdentifier);
-            System_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-            System_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
-            System_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
-            System_printf("\n\n");
+            UART_printf("Debug: Single Message Identifier\n");
+            UART_printf("Debug: Start Message Identifier          : 0x%x\n", msgObjStats.startMsgIdentifier);
+            UART_printf("Debug: End Message Identifier            : 0x%x\n", msgObjStats.endMsgIdentifier);
+            UART_printf("Debug: Direction                         : %s\n", (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+            UART_printf("Debug: Number of interrupts received     : %d\n", msgObjStats.interruptsRxed);
+            UART_printf("Debug: Number of messages processed      : %d\n", msgObjStats.messageProcessed);
+            UART_printf("\n\n");
 
             for(index = 0; index < 3U ; index++)
             {
@@ -1955,20 +1949,20 @@ static int32_t mcanMsgIdRangeTest()
                 retVal =  CANFD_getOptions(canHandle, &optionTLV, &errCode);
                 if (retVal < 0)
                 {
-                    System_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
+                    UART_printf ("Error: CANFD get stats failed [Error code %d]\n", errCode);
                 }
 
-                System_printf("Debug: Range Message Identifier\n");
-                System_printf("Debug: %d Start Message Identifier          : 0x%x\n", index, msgObjStats.startMsgIdentifier);
-                System_printf("Debug: %d End Message Identifier            : 0x%x\n", index, msgObjStats.endMsgIdentifier);
-                System_printf("Debug: %d Direction                         : %s\n", index, (msgObjStats.direction == 0) ? "Receive" : "Transmit");
-                System_printf("Debug: %d Number of interrupts received     : %d\n", index, msgObjStats.interruptsRxed);
-                System_printf("Debug: %d Number of messages processed      : %d\n", index, msgObjStats.messageProcessed);
-                System_printf("\n\n");
+                UART_printf("Debug: Range Message Identifier\n");
+                UART_printf("Debug: %d Start Message Identifier          : 0x%x\n", index, msgObjStats.startMsgIdentifier);
+                UART_printf("Debug: %d End Message Identifier            : 0x%x\n", index, msgObjStats.endMsgIdentifier);
+                UART_printf("Debug: %d Direction                         : %s\n", index, (msgObjStats.direction == 0) ? "Receive" : "Transmit");
+                UART_printf("Debug: %d Number of interrupts received     : %d\n", index, msgObjStats.interruptsRxed);
+                UART_printf("Debug: %d Number of messages processed      : %d\n", index, msgObjStats.messageProcessed);
+                UART_printf("\n\n");
             }
-            System_printf("Debug: Number of Frame mismatch            : %d\n", gErrFrameType);
-            System_printf("Debug: Number of Get_Data errors           : %d\n", gErrGetData);
-            System_printf("Debug: Error Status Interrupt              : %d\n", gErrStatusInt);
+            UART_printf("Debug: Number of Frame mismatch            : %d\n", gErrFrameType);
+            UART_printf("Debug: Number of Get_Data errors           : %d\n", gErrGetData);
+            UART_printf("Debug: Error Status Interrupt              : %d\n", gErrStatusInt);
         }
 
         /* Terminate the test */
@@ -2002,21 +1996,21 @@ static void Test_initTask(UArg arg0, UArg arg1)
 
     while (1)
     {
-        System_printf ("*******************************************************\n");
-        System_printf ("CANFD Unit Test Menu                        \n");
-        System_printf ("Please select the type of test to execute:  \n");
-        System_printf ("1. MCAN Internal loopback test              \n");
-        System_printf ("2. MCAN External loopback test              \n");
-        System_printf ("3. MCAN Multiple Tx test                    \n");
-        System_printf ("4. MCAN External Tx/Rx test                 \n");
-        System_printf ("5. MCAN EVM-EVM test                        \n");
-        System_printf ("6. MCAN Tx Cancel test                      \n");
-        System_printf ("7. MCAN Power down test                     \n");
-        System_printf ("8. MCAN Message Id Range test               \n");
-        System_printf ("*******************************************************\n");
-        System_printf ("> Enter your selection: ");
-
-        while (testSelection == 0);
+        UART_printf ("*******************************************************\n");
+        UART_printf ("CANFD Unit Test Menu                        \n");
+        UART_printf ("Please select the type of test to execute:  \n");
+        UART_printf ("1. MCAN Internal loopback test              \n");
+        UART_printf ("2. MCAN External loopback test              \n");
+        UART_printf ("3. MCAN Multiple Tx test                    \n");
+        UART_printf ("4. MCAN External Tx/Rx test                 \n");
+        UART_printf ("5. MCAN EVM-EVM test                        \n");
+        UART_printf ("6. MCAN Tx Cancel test                      \n");
+        UART_printf ("7. MCAN Power down test                     \n");
+        UART_printf ("8. MCAN Message Id Range test               \n");
+        UART_printf ("*******************************************************\n");
+        UART_printf ("> Enter your selection: ");
+
+        UART_scanFmt ("%d",&testSelection);
 
         /* Validate the selection: */
         if ((testSelection >= MCAN_APP_TEST_INTERNAL_LOOPBACK) && (testSelection <= MCAN_APP_TEST_MSGID_RANGE))
@@ -2025,80 +2019,80 @@ static void Test_initTask(UArg arg0, UArg arg1)
 
     if (testSelection == MCAN_APP_TEST_INTERNAL_LOOPBACK)
     {
-        System_printf("Debug: Internal loopback testing\n");
+        UART_printf("Debug: Internal loopback testing\n");
         retVal = mcanLoopbackTest();
         if (retVal == -1)
-            System_printf("Internal loopback testing : Fail\n");
+            UART_printf("Internal loopback testing : Fail\n");
         else
-            System_printf("Internal loopback testing : Pass\n");
+            UART_printf("Internal loopback testing : Pass\n");
     }
     else if (testSelection == MCAN_APP_TEST_EXTERNAL_LOOPBACK)
     {
-        System_printf("Debug: External loopback testing\n");
+        UART_printf("Debug: External loopback testing\n");
         retVal = mcanLoopbackTest();
         if (retVal == -1)
-            System_printf("External loopback testing : Fail\n");
+            UART_printf("External loopback testing : Fail\n");
         else
-            System_printf("External loopback testing : Pass\n");
+            UART_printf("External loopback testing : Pass\n");
     }
     else if (testSelection == MCAN_APP_TEST_TX_CANCEL)
     {
-        System_printf("Debug: Tx Cancel testing\n");
+        UART_printf("Debug: Tx Cancel testing\n");
         retVal = mcanTestTxCancel();
         if (retVal == -1)
-            System_printf("Tx Cancel testing: Fail \n");
+            UART_printf("Tx Cancel testing: Fail \n");
         else
-            System_printf("Tx Cancel testing: Pass \n");
+            UART_printf("Tx Cancel testing: Pass \n");
     }
     else if (testSelection == MCAN_APP_TEST_EXTERNAL_DATA)
     {
-        System_printf("Debug: External transmit testing\n");
+        UART_printf("Debug: External transmit testing\n");
         retVal = mcanTransmitTest();
         if (retVal == -1)
-            System_printf("External transmit testing: Fail \n");
+            UART_printf("External transmit testing: Fail \n");
         else
-            System_printf("External transmit testing: Pass \n");
+            UART_printf("External transmit testing: Pass \n");
     }
     else if (testSelection == MCAN_APP_TEST_EVM_EVM)
     {
-        System_printf("Debug: EVM-EVM testing\n");
+        UART_printf("Debug: EVM-EVM testing\n");
         retVal = mcanEVM_EVMTest();
         if (retVal == -1)
-            System_printf("EVM to EVM testing FAIL");
+            UART_printf("EVM to EVM testing FAIL");
         else
-            System_printf("EVM to EVM testing PASS");
+            UART_printf("EVM to EVM testing PASS");
     }
     else if (testSelection == MCAN_APP_TEST_POWERDOWN)
     {
-        System_printf("Debug: Power Down testing\n");
+        UART_printf("Debug: Power Down testing\n");
         retVal = mcanPowerDownTest();
         if (retVal == -1)
-            System_printf("Power Down testing FAIL");
+            UART_printf("Power Down testing FAIL");
         else
-            System_printf("Power Down testing PASS");
+            UART_printf("Power Down testing PASS");
     }
     else if (testSelection == MCAN_APP_TEST_MULTIPLE_TRANSMISSION)
     {
-        System_printf("Debug: Multiple transmission testing\n");
+        UART_printf("Debug: Multiple transmission testing\n");
         retVal = mcanMultiTransmission();
         if (retVal == -1)
-            System_printf("Multiple transmission testing FAIL");
+            UART_printf("Multiple transmission testing FAIL");
         else
-            System_printf("Multiple transmission testing PASS");
+            UART_printf("Multiple transmission testing PASS");
     }
     else if (testSelection == MCAN_APP_TEST_MSGID_RANGE)
     {
-        System_printf("Debug: Message Id Range testing\n");
+        UART_printf("Debug: Message Id Range testing\n");
         retVal = mcanMsgIdRangeTest();
         if (retVal == -1)
-            System_printf("Message Id Range testing FAIL");
+            UART_printf("Message Id Range testing FAIL");
         else
-            System_printf("Message Id Range testing PASS");
+            UART_printf("Message Id Range testing PASS");
     }
 
     if (retVal < 0)
     {
-        System_printf("Debug:CANFD testing failed\n");
+        UART_printf("Debug:CANFD testing failed\n");
     }