This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

J721S2XSOMXEVM: Problem rerouting video output to CSITX Output

Part Number: J721S2XSOMXEVM
Other Parts Discussed in Thread: TCA6408

Hi TI support,

I am trying to route output from the single camera application to the CSITX output port on the J721S2XSOMXEVM board (connector J9).  I am using the J721S2XSOMXEVM module in conjunction with a common processor board and fusion application card, and am running vision app code based off of the 08_05_00_36 RTOS PSDK  The single camera application works fine when directing its output to the eDP port, but when I modify the code by applying the patch found here:

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1306674/faq-tda4vm-enable-csi-tx-output-instead-of-dss-output-in-the-capture-demos-of-vision_apps?tisearch=e2e-sitesearch&keymatch=CSI%20TX#

I don't see any MIPI output at the J9 connector, even though the OpenVx graph verifies and executes properly, and shows that the CSITX object is present and being executed once per frame.

I did notice from the J721S2XSOMXEVM module's schematic that the CSITX output being routed to connector J9 is the output from TX D-PHY 01, which in turn outputs data from the J721S2's second CSITX block.   As such, I modified the function appCsi2TxInit() in vision_apps/utils/hwa/src to power on the TX1 D-PHY, and configure it to receive its input from the CSI_TX1 block rather than the DSI1 block.  I also modified the single camera application to set the csitx node target as TIVX_TARGET_CSITX2 rather than TIVX_TARGET_CSITX.  I also tried installing the CSITX driver patch CSITX_SUPPORT_FOR_MULTIPLE instance, thinking that perhaps even though I am not using CSI_TX0, this patch is necessary when using the CSI_TX1 port.  None of these changes, however, resulted in MIPI output at the CSITX output connector.

Are there any additional configuration steps needed in the J721S2 to enable CSI_TX1 output from the chip's TX1 D-PHY output?  It seems like I've still missing some setting or other that is needed to enable output over this channel.

I am attaching copies of my app_hwa.c and app_single_cam_main.c files, as well as console output from a run of the single camera application using this code.  Please let me know if you have any suggestions on how to resolve this problem.

Thanks.

-Pete Tucker

/*
 *
 * Copyright (c) 2018 Texas Instruments Incorporated
 *
 * All rights reserved not granted herein.
 *
 * Limited License.
 *
 * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
 * license under copyrights and patents it now or hereafter owns or controls to make,
 * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
 * terms herein.  With respect to the foregoing patent license, such license is granted
 * solely to the extent that any such patent is necessary to Utilize the software alone.
 * The patent license shall not apply to any combinations which include this software,
 * other than combinations with devices manufactured by or for TI ("TI Devices").
 * No hardware patent is licensed hereunder.
 *
 * Redistributions must preserve existing copyright notices and reproduce this license
 * (including the above copyright notice and the disclaimer and (if applicable) source
 * code license limitations below) in the documentation and/or other materials provided
 * with the distribution
 *
 * Redistribution and use in binary form, without modification, are permitted provided
 * that the following conditions are met:
 *
 * *       No reverse engineering, decompilation, or disassembly of this software is
 * permitted with respect to any software provided in binary form.
 *
 * *       any redistribution and use are licensed by TI for use only with TI Devices.
 *
 * *       Nothing shall obligate TI to provide you with source code for the software
 * licensed and provided to you in object code.
 *
 * If software source code is provided to you, modification and redistribution of the
 * source code are permitted provided that the following conditions are met:
 *
 * *       any redistribution and use of the source code, including any resulting derivative
 * works, are licensed by TI for use only with TI Devices.
 *
 * *       any redistribution and use of any object code compiled from the source code
 * and any resulting derivative works, are licensed by TI for use only with TI Devices.
 *
 * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
 *
 * may be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * DISCLAIMER.
 *
 * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "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 TI AND TI'S LICENSORS 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.
 *
 */

#include <utils/mem/include/app_mem.h>
#include <utils/udma/include/app_udma.h>
#include <utils/hwa/include/app_hwa.h>
#include <utils/console_io/include/app_log.h>
#include <utils/sciclient/include/app_sciclient_wrapper_api.h>
#include <utils/remote_service/include/app_remote_service.h>
#include <utils/ipc/include/app_ipc.h>

#include <ti/drv/vhwa/include/vhwa_m2mLdc.h>
#include <ti/drv/vhwa/include/vhwa_m2mMsc.h>
#include <ti/drv/vhwa/include/vhwa_m2mViss.h>
#include <TI/j7_viss_srvr_remote.h>

#if !defined(SOC_AM62A)
#include <ti/drv/vhwa/include/vhwa_m2mNf.h>
#include <ti/drv/vhwa/include/vhwa_m2mSde.h>
#include <ti/drv/vhwa/include/vhwa_m2mDof.h>
#include <ti/drv/csirx/csirx.h>
#include <ti/drv/csitx/csitx.h>
#endif

#define APP_DEBUG_VHWA

#if defined(VPAC3L)
#undef ENABLE_DOF
#undef ENABLE_SDE
#undef ENABLE_NF
#else
#define ENABLE_DOF
#define ENABLE_SDE
#define ENABLE_NF
#endif

#define ENABLE_MSC
#define ENABLE_VISS
#define ENABLE_LDC

/* below define's set max limits for line width in order to
 * reserved space in SL2 for VHWA modules during init
 */
#if defined (VPAC3L)
#define APP_UTILS_VHWA_MAX_IN_IMG_WIDTH        (2592U)
#else
#define APP_UTILS_VHWA_MAX_IN_IMG_WIDTH        (1920U)
#endif
#define APP_UTILS_VHWA_IN_IMG_CCSF             (FVID2_CCSF_BITS12_UNPACKED16)
#define APP_UTILS_VHWA_MAX_IN_IMG_BUFF_DEPTH   (6)

#if defined (VPAC3L)
#define APP_UTILS_VHWA_MAX_OUT_IMG_WIDTH       (2592U)
#else
#define APP_UTILS_VHWA_MAX_OUT_IMG_WIDTH       (1920U)
#endif
#define APP_UTILS_VHWA_OUT_IMG_CCSF            (FVID2_CCSF_BITS12_UNPACKED16)
#define APP_UTILS_VHWA_MAX_OUT_IMG_BUFF_DEPTH  (2)

#if defined(VPAC3)
#define APP_UTILS_VHWA_LDC_MAX_BLOCK_WIDTH     (128)
#define APP_UTILS_VHWA_LDC_MAX_BLOCK_HEIGHT    (64)
#elif defined(VPAC3L)
#define APP_UTILS_VHWA_LDC_MAX_BLOCK_WIDTH     (64)
#define APP_UTILS_VHWA_LDC_MAX_BLOCK_HEIGHT    (64)
#elif defined(VPAC1)
#define APP_UTILS_VHWA_LDC_MAX_BLOCK_WIDTH     (192)
#define APP_UTILS_VHWA_LDC_MAX_BLOCK_HEIGHT    (80)
#endif

static void appVhwaVpacMscInit(Vhwa_M2mMscSl2AllocPrms *sl2Prms)
{
    uint32_t cnt;
    uint32_t idx;

    for(cnt = 0; cnt < VHWA_M2M_MSC_MAX_INST; cnt++)
    {
        for(idx = 0; idx < VHWA_M2M_MSC_MAX_IN_CHANNEL; idx++)
        {
            sl2Prms->maxInWidth[cnt][idx]    = APP_UTILS_VHWA_MAX_IN_IMG_WIDTH;
            sl2Prms->inCcsf[cnt][idx]        = APP_UTILS_VHWA_IN_IMG_CCSF;
            sl2Prms->inBuffDepth[cnt][idx]   = APP_UTILS_VHWA_MAX_IN_IMG_BUFF_DEPTH;
        }
    }

    for(cnt = 0; cnt < MSC_MAX_OUTPUT; cnt++)
    {
        sl2Prms->maxOutWidth[cnt]   = APP_UTILS_VHWA_MAX_OUT_IMG_WIDTH;
        sl2Prms->outCcsf[cnt]       = APP_UTILS_VHWA_OUT_IMG_CCSF;
        sl2Prms->outBuffDepth[cnt]  = APP_UTILS_VHWA_MAX_OUT_IMG_BUFF_DEPTH;
    }
}

int32_t appFvid2Init(void)
{
    int32_t retVal = FVID2_SOK;
    Fvid2_InitPrms initPrmsFvid2;

    appLogPrintf("FVID2: Init ... !!!\n");

    Fvid2InitPrms_init(&initPrmsFvid2);
    initPrmsFvid2.printFxn = appLogPrintf;
    retVal = Fvid2_init(&initPrmsFvid2);
    if(retVal!=FVID2_SOK)
    {
        appLogPrintf("FVID2: ERROR: Fvid2_init failed !!!\n");
    }
    appLogPrintf("FVID2: Init ... Done !!!\n");

    return (retVal);
}

int32_t appFvid2DeInit(void)
{
    int32_t retVal = FVID2_SOK;

    retVal = Fvid2_deInit(NULL);
    if(retVal!=FVID2_SOK)
    {
        appLogPrintf("FVID2: ERROR: Fvid2_deInit failed !!!\n");
    }
    return (retVal);
}

#if !defined(SOC_AM62A)

int32_t appCsi2RxInit(void)
{
    int32_t status = FVID2_SOK;

    Csirx_InitParams initPrmsCsirx;

    appLogPrintf("CSI2RX: Init ... !!!\n");

    SET_DEVICE_STATE_ON(TISCI_DEV_CSI_PSILSS0);
    SET_DEVICE_STATE_ON(TISCI_DEV_CSI_RX_IF0);
    SET_DEVICE_STATE_ON(TISCI_DEV_CSI_RX_IF1);
    #if defined(SOC_J784S4)
    SET_DEVICE_STATE_ON(TISCI_DEV_CSI_RX_IF2);
    #endif
    SET_DEVICE_STATE_ON(TISCI_DEV_DPHY_RX0);
    SET_DEVICE_STATE_ON(TISCI_DEV_DPHY_RX1);
    #if defined(SOC_J784S4)
    SET_DEVICE_STATE_ON(TISCI_DEV_DPHY_RX2);
    #endif

    Csirx_initParamsInit(&initPrmsCsirx);
    initPrmsCsirx.drvHandle = appUdmaCsirxCsitxGetObj();
    status = Csirx_init(&initPrmsCsirx);
    if(status!=FVID2_SOK)
    {
        appLogPrintf("CSI2RX: ERROR: Csirx_init failed !!!\n");
    }
    appLogPrintf("CSI2RX: Init ... Done !!!\n");

    return (status);
}

int32_t appCsi2TxInit(void)
{
    int32_t status = FVID2_SOK;

    uint32_t regVal = 0U, unlocked = 0U;
    Csitx_InitParams initPrmsCsitx;

    appLogPrintf("CSI2TX: Init ... !!!\n");

    SET_DEVICE_STATE_ON(TISCI_DEV_CSI_PSILSS0);
    #if defined(SOC_J721S2) || defined(SOC_J784S4)
    SET_DEVICE_STATE_ON(TISCI_DEV_CSI_TX_IF_V2_0);
    SET_DEVICE_STATE_ON(TISCI_DEV_CSI_TX_IF_V2_1);
    SET_DEVICE_STATE_ON(TISCI_DEV_DPHY_TX1);
    #else
    SET_DEVICE_STATE_ON(TISCI_DEV_CSI_TX_IF0);
    #endif
    SET_DEVICE_STATE_ON(TISCI_DEV_DPHY_TX0);

    regVal = CSL_REG32_RD(CSL_CTRL_MMR0_CFG0_BASE +
                          CSL_MAIN_CTRL_MMR_CFG0_LOCK1_KICK0);
    if ((regVal & 0x1) == 0U)
    {
        /* Unlock MMR */
        unlocked = 1U;
        CSL_REG32_WR(CSL_CTRL_MMR0_CFG0_BASE +
                     CSL_MAIN_CTRL_MMR_CFG0_LOCK1_KICK0,
                     0x68EF3490U);
        CSL_REG32_WR(CSL_CTRL_MMR0_CFG0_BASE +
                     CSL_MAIN_CTRL_MMR_CFG0_LOCK1_KICK1,
                     0xD172BC5AU);
        appLogPrintf("Unlocked MMR to program CSITX DPHY register ... !!!\n");
    }

    /* Select CSITX0 as the source for DPHYTX0 */
    CSL_REG32_WR(CSL_CTRL_MMR0_CFG0_BASE +
                    CSL_MAIN_CTRL_MMR_CFG0_DPHY_TX0_CTRL,
                    0x1);
    #if defined(SOC_J721S2) || defined(SOC_J784S4)
    /* Select CSITX1 as the source for DPHYTX1 */
    CSL_REG32_WR(CSL_CTRL_MMR0_CFG0_BASE +
                    CSL_MAIN_CTRL_MMR_CFG0_DPHY_TX1_CTRL,
                    0x1);
    #endif
    /* Lock MMR back if unlocked here */
    if (unlocked == 1U)
    {
        CSL_REG32_WR(CSL_CTRL_MMR0_CFG0_BASE +
                     CSL_MAIN_CTRL_MMR_CFG0_LOCK1_KICK0,
                     0U);
        appLogPrintf("Locked MMR after programming CSITX DPHY register ... !!!\n");
    }

    Csitx_initParamsInit(&initPrmsCsitx);
    initPrmsCsitx.drvHandle = appUdmaCsirxCsitxGetObj();
    status = Csitx_init(&initPrmsCsitx);
    if(status!=FVID2_SOK)
    {
        appLogPrintf("CSI2TX: ERROR: Csitx_init failed !!!\n");
    }
    appLogPrintf("CSI2TX: Init ... Done !!!\n");

    return (status);
}

int32_t appCsi2RxDeInit(void)
{
    int32_t retVal = FVID2_SOK;
    retVal = Csirx_deInit();
    if(retVal!=FVID2_SOK)
    {
        appLogPrintf("CSI2RX: ERROR: Csirx_deInit failed !!!\n");
    }
    return (retVal);
}

int32_t appCsi2TxDeInit(void)
{
    int32_t retVal = FVID2_SOK;
    retVal = Csitx_deInit();
    if(retVal!=FVID2_SOK)
    {
        appLogPrintf("CSI2TX: ERROR: Csitx_deInit failed !!!\n");
    }
    return (retVal);
}

int32_t appVhwaDmpacInit()
{
    int32_t  status = FVID2_SOK;

    appLogPrintf("VHWA: DMPAC: Init ... !!!\n");

    #if defined(ENABLE_DOF) || defined(ENABLE_SDE)
    SET_DEVICE_STATE_ON(TISCI_DEV_DMPAC0);
    #endif
    #if defined(ENABLE_SDE)
    SET_DEVICE_STATE_ON(TISCI_DEV_DMPAC0_SDE_0);
    #endif


#if defined(ENABLE_DOF)
    Vhwa_M2mDofSl2AllocPrms sl2AllocPrms;
    Vhwa_M2mDofInitParams   initPrms;

    #if defined(APP_DEBUG_VHWA)
    appLogPrintf("VHWA: DOF Init ... !!!\n");
    #endif

    /* Initialize DOF Init parameters */
    Vhwa_m2mDofInitParamsInit(&initPrms);

    /* Set UDMA driver handle */
    initPrms.udmaDrvHndl = appUdmaGetObj();

    status = Vhwa_m2mDofInit(&initPrms);
    if (0 != status)
    {
        appLogPrintf("VHWA: ERROR: DOF Init Failed !!!\n");
    }
    else
    {
        /* Initilize SL2 parameters */
        Vhwa_M2mDofSl2AllocPrmsInit(&sl2AllocPrms);

        status = Vhwa_m2mDofAllocSl2(&sl2AllocPrms);
        if (0 != status)
        {
            appLogPrintf("VHWA: ERROR: DOF SL2 Alloc Failed !!!\n");
        }
        else
        {
            #if defined(APP_DEBUG_VHWA)
            appLogPrintf("VHWA: DOF Init ... Done !!!\n");
            #endif
        }
    }
#endif

#if defined(ENABLE_SDE)
    /* SDE */
    if (0 == status)
    {
        Vhwa_M2mSdeSl2AllocPrms sl2AllocPrms;
        Vhwa_M2mSdeInitParams   initPrms;

        #if defined(APP_DEBUG_VHWA)
        appLogPrintf("VHWA: SDE Init ... !!!\n");
        #endif

        /* Initialize SDE Init parameters */
        Vhwa_M2mSdeInitParamsInit(&initPrms);

        /* Set UDMA driver handle */
        initPrms.udmaDrvHndl = appUdmaGetObj();

        status = Vhwa_m2mSdeInit(&initPrms);
        if (0 != status)
        {
            appLogPrintf("VHWA: ERROR: SDE Init Failed !!!\n");
        }
        else
        {
            /* Initilize SL2 parameters */
            Vhwa_M2mSdeSl2AllocPrmsInit(&sl2AllocPrms);

            status = Vhwa_m2mSdeAllocSl2(&sl2AllocPrms);
            if (0 != status)
            {
                appLogPrintf("VHWA: ERROR: SDE SL2 Alloc Failed !!!\n");
            }
            else
            {
                #if defined(APP_DEBUG_VHWA)
                appLogPrintf("VHWA: SDE Init ... Done !!!\n");
                #endif
            }
        }
    }
#endif

    appLogPrintf("VHWA: DMPAC: Init ... Done !!!\n");
    return (status);

}

int32_t appVhwaDmpacDeInit()
{
#if defined(ENABLE_DOF)
    Vhwa_m2mDofDeInit();
#endif
#if defined(ENABLE_SDE)
    Vhwa_m2mSdeDeInit();
#endif

    return (0);
}

#endif /* !defined(SOC_AM62A) */

int32_t appVhwaVpacInit(uint32_t vpacInst)
{
    int32_t  status = FVID2_SOK;

    appLogPrintf("VHWA: VPAC Init ... !!!\n");

    #if defined(ENABLE_LDC) || defined(ENABLE_MSC) || defined(ENABLE_NF) || defined(ENABLE_VISS)
    if (0u==vpacInst)
    {
        SET_DEVICE_STATE_ON(TISCI_DEV_VPAC0);
    }
    #if defined(SOC_J784S4)
    else if (1u==vpacInst)
    {
        SET_DEVICE_STATE_ON(TISCI_DEV_VPAC1);
    }
    #endif
    else
    {
        appLogPrintf("VHWA: ERROR: Unsupported VPAC instance!!!\n");
        status = FVID2_EFAIL;
    }
    #endif

#if defined(ENABLE_LDC)
    /* LDC */
    if (0 == status)
    {
        Vhwa_M2mLdcSl2AllocPrms sl2AllocPrms;
        Vhwa_M2mLdcInitParams   initPrms;

        #if defined(APP_DEBUG_VHWA)
        appLogPrintf("VHWA: LDC Init ... !!!\n");
        #endif

        /* Initialize LDC Init parameters */
        Vhwa_m2mLdcInitParamsInit(&initPrms);

        /* Set UDMA driver handle */
        #if defined(SOC_AM62A)
        initPrms.udmaDrvHndl = NULL;
        #else
        initPrms.udmaDrvHndl = appUdmaGetObj();
        #endif

        status = Vhwa_m2mLdcInit(&initPrms);
        if (0 != status)
        {
            appLogPrintf("VHWA: ERROR: LDC Init Failed !!!\n");
        }
        else
        {
            Vhwa_M2mLdcSl2AllocPrmsInit(&sl2AllocPrms);

            sl2AllocPrms.maxBlockWidth  = APP_UTILS_VHWA_LDC_MAX_BLOCK_WIDTH;
            sl2AllocPrms.maxBlockHeight = APP_UTILS_VHWA_LDC_MAX_BLOCK_HEIGHT;

            status = Vhwa_m2mLdcAllocSl2(&sl2AllocPrms);
            if (0 != status)
            {
                appLogPrintf("VHWA: ERROR: LDC SL2 Alloc Failed !!!\n");
            }
            else
            {
                #if defined(APP_DEBUG_VHWA)
                appLogPrintf("VHWA: LDC Init ... Done !!!\n");
                #endif
            }
        }
    }
#endif

#if defined(ENABLE_MSC)
    /* MSC */
    if (0 == status)
    {
        Vhwa_M2mMscInitParams initPrms;
        Vhwa_M2mMscSl2AllocPrms sl2Prms;

        #if defined(APP_DEBUG_VHWA)
        appLogPrintf("VHWA: MSC Init ... !!!\n");
        #endif

        Vhwa_m2mMscInitParamsInit(&initPrms);

        #if defined(SOC_AM62A)
        initPrms.drvHandle = NULL;
        #else
        initPrms.drvHandle = appUdmaGetObj();
        #endif

        status = Vhwa_m2mMscInit(&initPrms);

        if (0 == status)
        {
            appVhwaVpacMscInit(&sl2Prms);

            status = Vhwa_m2mMscAllocSl2(&sl2Prms);
            if (0 != status)
            {
                appLogPrintf("VHWA: ERROR: MSC SL2 Alloc Failed !!!\n");
            }
            else
            {
                #if defined(APP_DEBUG_VHWA)
                appLogPrintf("VHWA: MSC Init ... Done !!!\n");
                #endif
            }
        }
        else
        {
            appLogPrintf("VHWA: ERROR: MSC Init Failed !!!\n");
        }
    }
#endif

#if defined(ENABLE_NF)
    /* NF */
    if (0 == status)
    {
        Vhwa_M2mNfSl2AllocPrms  sl2AllocPrms;
        Vhwa_M2mNfInitPrms      initPrms;

        #if defined(APP_DEBUG_VHWA)
        appLogPrintf("VHWA: NF Init ... !!!\n");
        #endif

        /* Initialize NF Init parameters */
        Vhwa_m2mNfInitPrmsInit(&initPrms);

        /* Set UDMA driver handle */
        initPrms.udmaDrvHndl = appUdmaGetObj();

        status = Vhwa_m2mNfInit(&initPrms);
        if (0 != status)
        {
            appLogPrintf("VHWA: ERROR: NF Init Failed !!!\n");
        }
        else
        {
            /* Initilize SL2 parameters */
            sl2AllocPrms.maxImgWidth  = APP_UTILS_VHWA_MAX_IN_IMG_WIDTH;
            sl2AllocPrms.inCcsf       = APP_UTILS_VHWA_IN_IMG_CCSF;
            sl2AllocPrms.inBuffDepth  = APP_UTILS_VHWA_MAX_IN_IMG_BUFF_DEPTH;
            sl2AllocPrms.outBuffDepth = APP_UTILS_VHWA_MAX_OUT_IMG_BUFF_DEPTH;
            sl2AllocPrms.outCcsf      = APP_UTILS_VHWA_OUT_IMG_CCSF;

            status = Vhwa_m2mNfAllocSl2(&sl2AllocPrms);
            if (0 != status)
            {
                appLogPrintf("VHWA: ERROR: NF SL2 Alloc Failed !!!\n");
            }
            else
            {
                #if defined(APP_DEBUG_VHWA)
                appLogPrintf("VHWA: NF Init ... Done !!!\n");
                #endif
            }
        }
    }
#endif

#if defined(ENABLE_VISS)
    /* VISS */
    if (0 == status)
    {
        Vhwa_M2mVissSl2Params   sl2AllocPrms;
        Vhwa_M2mVissInitParams  initPrms;

        #if defined(APP_DEBUG_VHWA)
        appLogPrintf("VHWA: VISS Init ... !!!\n");
        #endif

        /* Initialize VISS Init parameters */
        Vhwa_m2mVissInitParamsInit(&initPrms);

        /* Set UDMA driver handle */
        #if defined(VPAC3L)
        initPrms.udmaDrvHndl = NULL;
        #else
        initPrms.udmaDrvHndl = appUdmaGetObj();
        #endif

        /* Set configThroughUDMA to true to support multi handle */
        initPrms.configThroughUdmaFlag = true;

        status = Vhwa_m2mVissInit(&initPrms);
        if (0 != status)
        {
            appLogPrintf("VHWA: ERROR: VISS Init Failed !!!\n");
        }
        else
        {
            int32_t cnt;

            Vhwa_m2mVissSl2ParamsInit(&sl2AllocPrms);

            for (cnt = 0U; cnt < VHWA_M2M_VISS_MAX_INPUTS; cnt ++)
            {
                sl2AllocPrms.maxInWidth[cnt] = APP_UTILS_VHWA_MAX_IN_IMG_WIDTH;
            }

            for (cnt = 0U; cnt < VHWA_M2M_VISS_MAX_OUTPUTS; cnt ++)
            {
                if (VHWA_M2M_VISS_OUT_H3A_IDX == cnt)
                {
                    /* This is the default size for H3A output */
                    sl2AllocPrms.maxOutWidth[cnt] = 1024U;
                }
                else
                {
                    sl2AllocPrms.maxOutWidth[cnt] = APP_UTILS_VHWA_MAX_OUT_IMG_WIDTH;
                }
            }

            sl2AllocPrms.inDepth = 3U; /* Minimum 3 */

            for (cnt = 0U; cnt < VHWA_M2M_VISS_MAX_OUTPUTS; cnt ++)
            {
                sl2AllocPrms.outDepth[cnt] = 2U; /* Minimum 2 */
            }

            status = Vhwa_m2mVissAllocSl2(&sl2AllocPrms);
            if (0 != status)
            {
                appLogPrintf("VHWA: ERROR: VISS SL2 Alloc Failed !!!\n");
            }
            else
            {
                #if defined(APP_DEBUG_VHWA)
                appLogPrintf("VHWA: VISS Init ... Done !!!\n");
                #endif
            }
        }
    }
#endif

    appLogPrintf("VHWA: VPAC Init ... Done !!!\n");
    return (status);
}

int32_t appVhwaVpacDeInit()
{
#if defined(ENABLE_LDC)
    Vhwa_m2mLdcDeInit();
#endif
#if defined(ENABLE_MSC)
    Vhwa_m2mMscDeInit();
#endif
#if defined(ENABLE_NF)
    Vhwa_m2mNfDeInit();
#endif
#if defined(ENABLE_VISS)
    Vhwa_m2mVissDeInit();
#endif

    return (0);
}

int32_t appVhwaHandler(char *service_name, uint32_t cmd, void *prm, uint32_t prm_size, uint32_t flags)
{
    int32_t  status = -1;

    if (NULL != prm)
    {
        appLogPrintf(
            " VHWA Remote Service: Received command %08x to configure VHWA !!!\n",
            cmd);

        switch(cmd)
        {
            #if defined(ENABLE_SDE)
            case APP_DMPAC_SDE_SL2_FREE:
                /* free SDE SL2 memory */
                status = Vhwa_m2mSdeFreeSl2();
                break;

            case APP_DMPAC_SDE_SL2_REALLOC:
                /* realloc SDE SL2 for 2MP */
                if (sizeof(Vhwa_M2mSdeSl2AllocPrms) == prm_size)
                {
                    Vhwa_M2mSdeSl2AllocPrms *cmdPrms = (Vhwa_M2mSdeSl2AllocPrms *)prm;
                    status = Vhwa_m2mSdeAllocSl2(cmdPrms);
                } else
                {
                    appLogPrintf(" VHWA Remote Service: ERROR: Invalid SDE SL2 parameters passed !!!\n");
                }

                break;
            #endif

            #if defined(ENABLE_DOF)
            case APP_DMPAC_DOF_SL2_FREE:
                /* free DOF SL2 memory */
                status = Vhwa_m2mDofFreeSl2();
                break;

            case APP_DMPAC_DOF_SL2_REALLOC:
                /* realloc DOF SL2 for 2MP */
                if (sizeof(Vhwa_M2mDofSl2AllocPrms) == prm_size)
                {
                    Vhwa_M2mDofSl2AllocPrms *cmdPrms = (Vhwa_M2mDofSl2AllocPrms *)prm;
                    status = Vhwa_m2mDofAllocSl2(cmdPrms);
                } else
                {
                    appLogPrintf(" VHWA Remote Service: ERROR: Invalid DOF SL2 parameters passed !!!\n");
                }
                break;
            #endif

#if defined(SOC_J721E) || defined(SOC_J721S2)
            case APP_VPAC_720_DMPAC_480:
                SET_CLOCK_FREQ (TISCI_DEV_DMPAC0, TISCI_DEV_DMPAC0_CLK, 480000000);
                #if defined(SOC_J721S2)
                SET_CLOCK_FREQ (TISCI_DEV_VPAC0, TISCI_DEV_VPAC0_MAIN_CLK,   720000000);
                #else
                SET_CLOCK_FREQ (TISCI_DEV_VPAC0, TISCI_DEV_VPAC0_CLK,   720000000);
                #endif
                status = 0;
                break;

            case APP_VPAC_650_DMPAC_520:
                SET_CLOCK_FREQ (TISCI_DEV_DMPAC0, TISCI_DEV_DMPAC0_CLK, 520000000);
                #if defined(SOC_J721S2)
                SET_CLOCK_FREQ (TISCI_DEV_VPAC0, TISCI_DEV_VPAC0_MAIN_CLK,   650000000);
                #else
                SET_CLOCK_FREQ (TISCI_DEV_VPAC0, TISCI_DEV_VPAC0_CLK,   650000000);
                #endif
                status = 0;
                break;
#endif
        }

        if (0 == status)
        {
            appLogPrintf(" VHWA Remote Service: VHWA configuration done !!!\n");
        }
        else
        {
            appLogPrintf(" VHWA Remote Service: ERROR: VHWA configuration failed !!!\n");
        }
    }
    else
    {
        appLogPrintf(" VHWA Remote Service: ERROR: Invalid parameters passed !!!\n");
    }


    return status;
}

int32_t appVhwaRemoteServiceInit()
{
    int32_t status;

    status = appRemoteServiceRegister(APP_VHWA_SERVICE_NAME, appVhwaHandler);
    if(status!=0)
    {
        appLogPrintf("VHWA Remote Service: ERROR: Unable to register service \n");
    }

    return status;
}

int32_t appVhwaRemoteServiceDeInit()
{
    int32_t status;

    status = appRemoteServiceUnRegister(APP_VHWA_SERVICE_NAME);
    if(status!=0)
    {
        appLogPrintf("VHWA Remote Service: ERROR: Unable to unregister service \n");
    }

    return status;
}

int32_t appVissRemoteServiceDeInit()
{
    int32_t viss_status;

    viss_status = VissRemoteServer_DeInit();
    if(viss_status!=0)
    {
        appLogPrintf(" appVissRemoteServiceDeInit: ERROR: Failed to deinitialize VISS remote server \n");
    }

    return (viss_status);
}

int32_t appVissRemoteServiceInit()
{
    int32_t viss_status;

    appLogPrintf("VISS REMOTE SERVICE: Init ... !!!\n");

    viss_status = VissRemoteServer_Init();
    if(viss_status!=0)
    {
        appLogPrintf("ISS: Error: Failed to create remote VISS remote server failed. Live tuning will not work !!!\n");
        return -1;
    }
    else
    {
        appLogPrintf("VISS REMOTE SERVICE: Init ... Done !!!\n");
    }

    return viss_status;
}

/*
 *
 * Copyright (c) 2018 Texas Instruments Incorporated
 *
 * All rights reserved not granted herein.
 *
 * Limited License.
 *
 * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
 * license under copyrights and patents it now or hereafter owns or controls to make,
 * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
 * terms herein.  With respect to the foregoing patent license, such license is granted
 * solely to the extent that any such patent is necessary to Utilize the software alone.
 * The patent license shall not apply to any combinations which include this software,
 * other than combinations with devices manufactured by or for TI ("TI Devices").
 * No hardware patent is licensed hereunder.
 *
 * Redistributions must preserve existing copyright notices and reproduce this license
 * (including the above copyright notice and the disclaimer and (if applicable) source
 * code license limitations below) in the documentation and/or other materials provided
 * with the distribution
 *
 * Redistribution and use in binary form, without modification, are permitted provided
 * that the following conditions are met:
 *
 * *       No reverse engineering, decompilation, or disassembly of this software is
 * permitted with respect to any software provided in binary form.
 *
 * *       any redistribution and use are licensed by TI for use only with TI Devices.
 *
 * *       Nothing shall obligate TI to provide you with source code for the software
 * licensed and provided to you in object code.
 *
 * If software source code is provided to you, modification and redistribution of the
 * source code are permitted provided that the following conditions are met:
 *
 * *       any redistribution and use of the source code, including any resulting derivative
 * works, are licensed by TI for use only with TI Devices.
 *
 * *       any redistribution and use of any object code compiled from the source code
 * and any resulting derivative works, are licensed by TI for use only with TI Devices.
 *
 * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
 *
 * may be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * DISCLAIMER.
 *
 * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "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 TI AND TI'S LICENSORS 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.
 *
 */

#include "app_single_cam_main.h"
#include <utils/iss/include/app_iss.h>
#ifndef USE_CSITX
#include "app_test.h"
#endif

#ifdef A72
#if defined(LINUX)
/*ITT server is supported only in target mode and only on Linux*/
#include <itt_server.h>
#endif
#endif

static char availableSensorNames[ISS_SENSORS_MAX_SUPPORTED_SENSOR][ISS_SENSORS_MAX_NAME];
static vx_uint8 num_sensors_found;
static IssSensor_CreateParams sensorParams;

#define NUM_CAPT_CHANNELS   (4u)

#ifdef _APP_DEBUG_
static char *app_get_test_file_path()
{
    char *tivxPlatformGetEnv(char *env_var);

    #if defined(SYSBIOS)
    return tivxPlatformGetEnv("VX_TEST_DATA_PATH");
    #else
    return getenv("VX_TEST_DATA_PATH");
    #endif
}
#endif //_APP_DEBUG_

/*
 * Utility API used to add a graph parameter from a node, node parameter index
 */
void add_graph_parameter_by_node_index(vx_graph graph, vx_node node, vx_uint32 node_parameter_index)
{
    vx_parameter parameter = vxGetParameterByIndex(node, node_parameter_index);

    vxAddParameterToGraph(graph, parameter);
    vxReleaseParameter(&parameter);
}

vx_status app_init(AppObj *obj)
{
    vx_status status = VX_SUCCESS;
    char* sensor_list[ISS_SENSORS_MAX_SUPPORTED_SENSOR];
    vx_uint8 count = 0;
    char ch = 0xFF;
    vx_uint8 selectedSensor = 0xFF;
    vx_uint8 detectedSensors[ISS_SENSORS_MAX_CHANNEL];
#ifdef A72
#if defined(LINUX)
/*ITT server is supported only in target mode and only on Linux*/
    status = itt_server_init((void*)obj, (void*)save_debug_images, (void*)appSingleCamUpdateVpacDcc);
    if(status != 0)
    {
        printf("Warning : Failed to initialize ITT server. Live tuning will not work \n");
    }
#endif
#endif

    for(count=0;count<ISS_SENSORS_MAX_CHANNEL;count++)
    {
        detectedSensors[count] = 0xFF;
    }

    for(count=0;count<ISS_SENSORS_MAX_SUPPORTED_SENSOR;count++)
    {
        sensor_list[count] = NULL;
    }

    obj->stop_task = 0;
    obj->stop_task_done = 0;
    obj->selectedCam = 0xFF;

    if(status == VX_SUCCESS)
    {
        obj->context = vxCreateContext();
        status = vxGetStatus((vx_reference) obj->context);
    }

    if(status == VX_SUCCESS)
    {
        tivxHwaLoadKernels(obj->context);
        tivxImagingLoadKernels(obj->context);
        APP_PRINTF("tivxImagingLoadKernels done\n");
    }

    /*memset(availableSensorNames, 0, ISS_SENSORS_MAX_SUPPORTED_SENSOR*ISS_SENSORS_MAX_NAME);*/
    for(count=0;count<ISS_SENSORS_MAX_SUPPORTED_SENSOR;count++)
    {
        availableSensorNames[count][0] = '\0';
        sensor_list[count] = availableSensorNames[count];
    }

    if(status == VX_SUCCESS)
    {
        status = appEnumerateImageSensor(sensor_list, &num_sensors_found);
    }

    if(obj->is_interactive)
    {
        selectedSensor = 0xFF;
        obj->selectedCam = 0xFF;
        while(obj->selectedCam == 0xFF)
        {
            printf("Select camera port index 0-%d : ", ISS_SENSORS_MAX_CHANNEL-1);
            ch = getchar();
            obj->selectedCam = ch - '0';

            if(obj->selectedCam >= ISS_SENSORS_MAX_CHANNEL)
            {
                printf("Invalid entry %c. Please choose between 0 and %d \n", ch, ISS_SENSORS_MAX_CHANNEL-1);
                obj->selectedCam = 0xFF;
            }

            while ((obj->selectedCam != 0xFF) && (selectedSensor > (num_sensors_found-1)))
            {
                printf("%d registered sensor drivers\n", num_sensors_found);
                for(count=0;count<num_sensors_found;count++)
                {
                    printf("%c : %s \n", count+'a', sensor_list[count]);
                }

                printf("Select a sensor above or press '0' to autodetect the sensor : ");
                ch = getchar();
                if(ch == '0')
                {
                    uint8_t num_sensors_detected = 0;
                    uint8_t channel_mask = (1<<obj->selectedCam);

                    status = appDetectImageSensor(detectedSensors, &num_sensors_detected, channel_mask);
                    if(0 == status)
                    {
                        selectedSensor = detectedSensors[obj->selectedCam];
                        if(selectedSensor > ISS_SENSORS_MAX_SUPPORTED_SENSOR)
                        {
                            printf("No sensor detected at port %d. Please select another port \n", obj->selectedCam);
                            obj->selectedCam = 0xFF;
                            selectedSensor = 0xFF;
                        }
                    }
                    else
                    {
                        printf("sensor detection at port %d returned error . Please try again \n", obj->selectedCam);
                        obj->selectedCam = 0xFF;
                        selectedSensor = 0xFF;
                    }
                }
                else
                {
                    selectedSensor = ch - 'a';
                    if(selectedSensor > (num_sensors_found-1))
                    {
                        printf("Invalid selection %c. Try again \n", ch);
                    }
                }
            }
        }

        obj->sensor_name = sensor_list[selectedSensor];
        printf("Sensor selected : %s\n", obj->sensor_name);

        ch = 0xFF;
        fflush (stdin);
        while ((ch != '0') && (ch != '1'))
        {
            fflush (stdin);
            printf ("LDC Selection Yes(1)/No(0) : ");
            ch = getchar();
        }

        obj->ldc_enable = ch - '0';
    }
    else
    {
        selectedSensor = obj->sensor_sel;
        if(selectedSensor > (num_sensors_found-1))
        {
            printf("Invalid sensor selection %d \n", selectedSensor);
            return VX_FAILURE;
        }
    }

    obj->sensor_wdr_mode = 0;

    obj->table_width = LDC_TABLE_WIDTH;
    obj->table_height = LDC_TABLE_HEIGHT;
    obj->ds_factor = LDC_DS_FACTOR;

#ifndef USE_CSITX
    /* Display initialization */
    memset(&obj->display_params, 0, sizeof(tivx_display_params_t));
    obj->display_params.opMode = TIVX_KERNEL_DISPLAY_ZERO_BUFFER_COPY_MODE;
    obj->display_params.pipeId = 2;
    obj->display_params.outHeight = 1080;
    obj->display_params.outWidth = 1920;
    obj->display_params.posX = 0;
    obj->display_params.posY = 0;
#else
    /* CSI-TX initialization */
    tivx_csitx_params_t local_csitx_config;
    uint32_t loopCnt;
    /* CSITX Config initialization */
    tivx_csitx_params_init(&local_csitx_config);
    local_csitx_config.numInst                          = 1U;
    local_csitx_config.numCh                            = 1;
    local_csitx_config.instId[0U]                       = 0;
    local_csitx_config.instCfg[0U].rxCompEnable         = (uint32_t)vx_true_e;
    local_csitx_config.instCfg[0U].rxv1p3MapEnable      = (uint32_t)vx_true_e;
    local_csitx_config.instCfg[0U].laneBandSpeed        = TIVX_CSITX_LANE_BAND_SPEED_770_TO_870_MBPS;
    local_csitx_config.instCfg[0U].laneSpeedMbps        = TIVX_CSITX_LANE_SPEED_MBPS_RESERVED;
    local_csitx_config.instCfg[0U].numDataLanes         = 4U;
    for (loopCnt = 0U ;
        loopCnt < local_csitx_config.instCfg[0U].numDataLanes ;
        loopCnt++)
    {
        local_csitx_config.instCfg[0U].lanePolarityCtrl[loopCnt] = 0u;
    }
    for (loopCnt = 0U; loopCnt < 1; loopCnt++)
    {
        local_csitx_config.chVcNum[loopCnt]   = loopCnt;
        local_csitx_config.chInstMap[loopCnt] = 0;
    }
    obj->csitx_config = vxCreateUserDataObject(obj->context, "tivx_csitx_params_t", sizeof(tivx_csitx_params_t), &local_csitx_config);

    /* DSS M2M initialization */
    tivx_display_m2m_params_init(&obj->display_m2m_params);
    obj->display_m2m_params.instId     = 0;
    obj->display_m2m_params.numPipe    = 1;
    obj->display_m2m_params.pipeId[0U] = 3;
    obj->display_m2m_params.overlayId  = 3;
#endif

    obj->scaler_enable = vx_false_e;

    appPerfPointSetName(&obj->total_perf , "TOTAL");

    return status;
}

vx_status app_deinit(AppObj *obj)
{
    vx_status status = VX_FAILURE;
    tivxHwaUnLoadKernels(obj->context);
    APP_PRINTF("tivxHwaUnLoadKernels done\n");

    tivxImagingUnLoadKernels(obj->context);
    APP_PRINTF("tivxImagingUnLoadKernels done\n");

    status = vxReleaseContext(&obj->context);
    if(VX_SUCCESS == status)
    {
        APP_PRINTF("vxReleaseContext done\n");
    }
    else
    {
        printf("Error: vxReleaseContext returned 0x%x \n", status);
    }
    return status;
}

/*
 * Graph,
 *           viss_config
 *               |
 *               v
 * input_img -> VISS -----> LDC -----> output_img
 *
 */

vx_status app_create_graph(AppObj *obj)
{
    vx_status status = VX_SUCCESS;
    int32_t sensor_init_status = -1;
    obj->configuration = NULL;
    obj->raw = NULL;
    obj->y12 = NULL;
    obj->uv12_c1 = NULL;
    obj->y8_r8_c2 = NULL;
    obj->uv8_g8_c3 = NULL;
    obj->s8_b8_c4 = NULL;
    obj->histogram = NULL;
    obj->h3a_aew_af = NULL;
    obj->display_image = NULL;

    unsigned int image_width = obj->width_in;
    unsigned int image_height = obj->height_in;

    tivx_raw_image raw_image = 0;
    vx_user_data_object capture_config;
    vx_uint8 num_capture_frames = 1;
    tivx_capture_params_t local_capture_config;
    uint32_t buf_id;
    const vx_char capture_user_data_object_name[] = "tivx_capture_params_t";
    uint32_t sensor_features_enabled = 0;
    uint32_t sensor_features_supported = 0;
    uint32_t sensor_wdr_enabled = 0;
    uint32_t sensor_exp_control_enabled = 0;
    uint32_t sensor_gain_control_enabled = 0;

    vx_bool yuv_cam_input = vx_false_e;
    vx_image viss_out_image = NULL;
    vx_image ldc_in_image = NULL;
    vx_image capt_yuv_image = NULL;

    uint8_t channel_mask = (1<<obj->selectedCam);

    vx_uint32 params_list_depth = 1;
    if(obj->test_mode == 1)
    {
        params_list_depth = 2;
    }
    vx_graph_parameter_queue_params_t graph_parameters_queue_params_list[params_list_depth];

    printf("Querying %s \n", obj->sensor_name);
    memset(&sensorParams, 0, sizeof(sensorParams));
    status = appQueryImageSensor(obj->sensor_name, &sensorParams);
    if(VX_SUCCESS != status)
    {
        printf("appQueryImageSensor returned %d\n", status);
        return status;
    }

    if(sensorParams.sensorInfo.raw_params.format[0].pixel_container == VX_DF_IMAGE_UYVY)
    {
        yuv_cam_input = vx_true_e;
        printf("YUV Input selected. VISS and AEWB nodes will be bypassed. \n");
    }


    /*
    Check for supported sensor features.
    It is upto the application to decide which features should be enabled.
    This demo app enables WDR, DCC and 2A if the sensor supports it.
    */
    sensor_features_supported = sensorParams.sensorInfo.features;

    if(vx_false_e == yuv_cam_input)
    {
        if(ISS_SENSOR_FEATURE_COMB_COMP_WDR_MODE == (sensor_features_supported & ISS_SENSOR_FEATURE_COMB_COMP_WDR_MODE))
        {
            APP_PRINTF("WDR mode is supported \n");
            sensor_features_enabled |= ISS_SENSOR_FEATURE_COMB_COMP_WDR_MODE;
            sensor_wdr_enabled = 1;
            obj->sensor_wdr_mode = 1;
        }else
        {
            APP_PRINTF("WDR mode is not supported. Defaulting to linear \n");
            sensor_features_enabled |= ISS_SENSOR_FEATURE_LINEAR_MODE;
            sensor_wdr_enabled = 0;
            obj->sensor_wdr_mode = 0;
        }

        if(ISS_SENSOR_FEATURE_MANUAL_EXPOSURE == (sensor_features_supported & ISS_SENSOR_FEATURE_MANUAL_EXPOSURE))
        {
            APP_PRINTF("Expsoure control is supported \n");
            sensor_features_enabled |= ISS_SENSOR_FEATURE_MANUAL_EXPOSURE;
            sensor_exp_control_enabled = 1;
        }

        if(ISS_SENSOR_FEATURE_MANUAL_GAIN == (sensor_features_supported & ISS_SENSOR_FEATURE_MANUAL_GAIN))
        {
            APP_PRINTF("Gain control is supported \n");
            sensor_features_enabled |= ISS_SENSOR_FEATURE_MANUAL_GAIN;
            sensor_gain_control_enabled = 1;
        }

        if(ISS_SENSOR_FEATURE_CFG_UC1 == (sensor_features_supported & ISS_SENSOR_FEATURE_CFG_UC1))
        {
            APP_PRINTF("CMS Usecase is supported \n");
            sensor_features_enabled |= ISS_SENSOR_FEATURE_CFG_UC1;
        }

        switch(sensorParams.sensorInfo.aewbMode)
        {
            case ALGORITHMS_ISS_AEWB_MODE_NONE:
                obj->aewb_cfg.ae_mode = ALGORITHMS_ISS_AE_DISABLED;
                obj->aewb_cfg.awb_mode = ALGORITHMS_ISS_AWB_DISABLED;
                break;
            case ALGORITHMS_ISS_AEWB_MODE_AWB:
                obj->aewb_cfg.ae_mode = ALGORITHMS_ISS_AE_DISABLED;
                obj->aewb_cfg.awb_mode = ALGORITHMS_ISS_AWB_AUTO;
                break;
            case ALGORITHMS_ISS_AEWB_MODE_AE:
                obj->aewb_cfg.ae_mode = ALGORITHMS_ISS_AE_AUTO;
                obj->aewb_cfg.awb_mode = ALGORITHMS_ISS_AWB_DISABLED;
                break;
            case ALGORITHMS_ISS_AEWB_MODE_AEWB:
                obj->aewb_cfg.ae_mode = ALGORITHMS_ISS_AE_AUTO;
                obj->aewb_cfg.awb_mode = ALGORITHMS_ISS_AWB_AUTO;
                break;
        }
        if(obj->aewb_cfg.ae_mode == ALGORITHMS_ISS_AE_DISABLED)
        {
            if(sensor_exp_control_enabled || sensor_gain_control_enabled )
            {
                obj->aewb_cfg.ae_mode = ALGORITHMS_ISS_AE_MANUAL;
            }
        }

        APP_PRINTF("obj->aewb_cfg.ae_mode = %d\n", obj->aewb_cfg.ae_mode);
        APP_PRINTF("obj->aewb_cfg.awb_mode = %d\n", obj->aewb_cfg.awb_mode);

    }

    if(ISS_SENSOR_FEATURE_DCC_SUPPORTED == (sensor_features_supported & ISS_SENSOR_FEATURE_DCC_SUPPORTED))
    {
        sensor_features_enabled |= ISS_SENSOR_FEATURE_DCC_SUPPORTED;
        APP_PRINTF("Sensor DCC is enabled \n");
    }else
    {
        APP_PRINTF("Sensor DCC is NOT enabled \n");
    }

    APP_PRINTF("Sensor width = %d\n", sensorParams.sensorInfo.raw_params.width);
    APP_PRINTF("Sensor height = %d\n", sensorParams.sensorInfo.raw_params.height);
    APP_PRINTF("Sensor DCC ID = %d\n", sensorParams.dccId);
    APP_PRINTF("Sensor Supported Features = 0x%x\n", sensor_features_supported);
    APP_PRINTF("Sensor Enabled Features = 0x%x\n", sensor_features_enabled);
    sensor_init_status = appInitImageSensor(obj->sensor_name, sensor_features_enabled, channel_mask);/*Mask = 1 for camera # 0*/
    if(0 != sensor_init_status)
    {
        /* Not returning failure because application may be waiting for
            error/test frame */
        printf("Error initializing sensor %s \n", obj->sensor_name);
    }

    image_width     = sensorParams.sensorInfo.raw_params.width;
    image_height    = sensorParams.sensorInfo.raw_params.height;
    obj->cam_dcc_id = sensorParams.dccId;
    obj->width_in = image_width;
    obj->height_in = image_height;

/*
Assuming same dataformat for all exposures.
This may not be true for staggered HDR. WIll be handled later
    for(count = 0;count<raw_params.num_exposures;count++)
    {
        memcpy(&(raw_params.format[count]), &(sensorProperties.sensorInfo.dataFormat), sizeof(tivx_raw_image_format_t));
    }
*/

/*
Sensor driver does not support metadata yet.
*/

    APP_PRINTF("Creating graph \n");

    obj->graph = vxCreateGraph(obj->context);
    if(status == VX_SUCCESS)
    {
        status = vxGetStatus((vx_reference) obj->graph);
    }
    APP_ASSERT(vx_true_e == tivxIsTargetEnabled(TIVX_TARGET_VPAC_VISS1));

    APP_PRINTF("Initializing params for capture node \n");

    /* Setting to num buf of capture node */
    obj->num_cap_buf = NUM_BUFS;

    if(vx_false_e == yuv_cam_input)
    {
        raw_image = tivxCreateRawImage(obj->context, &sensorParams.sensorInfo.raw_params);

        /* allocate Input and Output refs, multiple refs created to allow pipelining of graph */
        for(buf_id=0; buf_id<obj->num_cap_buf; buf_id++)
        {
            if(status == VX_SUCCESS)
            {
                obj->cap_frames[buf_id] = vxCreateObjectArray(obj->context, (vx_reference)raw_image, num_capture_frames);
                status = vxGetStatus((vx_reference) obj->cap_frames[buf_id]);
            }
        }
    }
    else
    {
        capt_yuv_image = vxCreateImage(
                                obj->context,
                                sensorParams.sensorInfo.raw_params.width,
                                sensorParams.sensorInfo.raw_params.height,
                                VX_DF_IMAGE_UYVY
                         );

        /* allocate Input and Output refs, multiple refs created to allow pipelining of graph */
        for(buf_id=0; buf_id<obj->num_cap_buf; buf_id++)
        {
            if(status == VX_SUCCESS)
            {
                obj->cap_frames[buf_id] = vxCreateObjectArray(obj->context, (vx_reference)capt_yuv_image, num_capture_frames);
                status = vxGetStatus((vx_reference) obj->cap_frames[buf_id]);
            }
        }
    }

    /* Config initialization */
    tivx_capture_params_init(&local_capture_config);

    local_capture_config.timeout = 33;
    local_capture_config.timeoutInitial = 500;

    local_capture_config.numInst  = 2U;/* Configure both instances */
    local_capture_config.numCh = 1U;/* Single cam. Only 1 channel enabled */
    {
        vx_uint8 ch, id, lane, q;
        for(id = 0; id < local_capture_config.numInst; id++)
        {
            local_capture_config.instId[id]                       = id;
            local_capture_config.instCfg[id].enableCsiv2p0Support = (uint32_t)vx_true_e;
            local_capture_config.instCfg[id].numDataLanes         = sensorParams.sensorInfo.numDataLanes;
            local_capture_config.instCfg[id].laneBandSpeed        = sensorParams.sensorInfo.csi_laneBandSpeed;

            for (lane = 0; lane < local_capture_config.instCfg[id].numDataLanes; lane++)
            {
                local_capture_config.instCfg[id].dataLanesMap[lane] = lane + 1;
            }
            for (q = 0; q < NUM_CAPT_CHANNELS; q++)
            {
                ch = (NUM_CAPT_CHANNELS-1)* id + q;
                local_capture_config.chVcNum[ch]   = q;
                local_capture_config.chInstMap[ch] = id;
            }
        }
    }

    local_capture_config.chInstMap[0] = obj->selectedCam/NUM_CAPT_CHANNELS;
    local_capture_config.chVcNum[0]   = obj->selectedCam%NUM_CAPT_CHANNELS;

    capture_config = vxCreateUserDataObject(obj->context, capture_user_data_object_name, sizeof(tivx_capture_params_t), &local_capture_config);
    APP_PRINTF("capture_config = 0x%p \n", capture_config);

    APP_PRINTF("Creating capture node \n");
    obj->capture_node = tivxCaptureNode(obj->graph, capture_config, obj->cap_frames[0]);
    APP_PRINTF("obj->capture_node = 0x%p \n", obj->capture_node);

    if(status == VX_SUCCESS)
    {
        status = vxReleaseUserDataObject(&capture_config);
    }
    if(status == VX_SUCCESS)
    {
        status = vxSetNodeTarget(obj->capture_node, VX_TARGET_STRING, TIVX_TARGET_CAPTURE2);
    }

    if(vx_false_e == yuv_cam_input)
    {
        obj->raw = (tivx_raw_image)vxGetObjectArrayItem(obj->cap_frames[0], 0);
        if(status == VX_SUCCESS)
        {
            status = tivxReleaseRawImage(&raw_image);
        }
#ifdef _APP_DEBUG_


        obj->fs_test_raw_image = tivxCreateRawImage(obj->context, &(sensorParams.sensorInfo.raw_params));

        if (NULL != obj->fs_test_raw_image)
        {
            if(status == VX_SUCCESS)
            {
                status = read_test_image_raw(NULL, obj->fs_test_raw_image, obj->test_mode);
            }
            else
            {
                status = tivxReleaseRawImage(&obj->fs_test_raw_image);
                obj->fs_test_raw_image = NULL;
            }
        }
#endif //_APP_DEBUG_

        status = app_create_viss(obj, sensor_wdr_enabled);
        if(VX_SUCCESS == status)
        {
        vxSetNodeTarget(obj->node_viss, VX_TARGET_STRING, TIVX_TARGET_VPAC_VISS1);
        tivxSetNodeParameterNumBufByIndex(obj->node_viss, 6u, obj->num_cap_buf);
        }
        else
        {
            printf("app_create_viss failed \n");
            return -1;
        }

        status = app_create_aewb(obj, sensor_wdr_enabled);
        if(VX_SUCCESS != status)
        {
            printf("app_create_aewb failed \n");
            return -1;
        }
        viss_out_image = obj->y8_r8_c2;
        ldc_in_image = viss_out_image;
    }
    else
    {
        obj->capt_yuv_image = (vx_image)vxGetObjectArrayItem(obj->cap_frames[0], 0);
        ldc_in_image = obj->capt_yuv_image;
        vxReleaseImage(&capt_yuv_image);
    }

#ifndef USE_CSITX
    if (obj->ldc_enable)
    {
        printf ("Enabling LDC \n");
        status = app_create_ldc(obj, ldc_in_image);

        if(status == VX_SUCCESS)
        {
            status = vxSetNodeTarget(obj->node_ldc, VX_TARGET_STRING, TIVX_TARGET_VPAC_LDC1);
        }
        else
        {
            printf("app_create_ldc returned error \n");
            return status;
        }
        if(status == VX_SUCCESS)
        {
            status = tivxSetNodeParameterNumBufByIndex(obj->node_ldc, 7u, obj->num_cap_buf);
        }

        /*Check if resizing is needed for display*/
        if((obj->table_width >= obj->display_params.outWidth) && (obj->table_height >= obj->display_params.outHeight))
        {
            vx_uint16 scaler_out_w, scaler_out_h;
            obj->scaler_enable = vx_true_e;
            appIssGetResizeParams(obj->table_width, obj->table_height, obj->display_params.outWidth, obj->display_params.outHeight, &scaler_out_w, &scaler_out_h);
            obj->scaler_out_img = vxCreateImage(obj->context, scaler_out_w, scaler_out_h, VX_DF_IMAGE_NV12);
            obj->scalerNode = tivxVpacMscScaleNode(obj->graph, obj->ldc_out, obj->scaler_out_img, NULL, NULL, NULL, NULL);
            if(status == VX_SUCCESS)
            {
                status = tivxSetNodeParameterNumBufByIndex(obj->scalerNode, 1u, obj->num_cap_buf);
            }
            obj->display_params.outHeight = scaler_out_h;
            obj->display_params.outWidth = scaler_out_w;
            obj->display_image = obj->scaler_out_img;
        }else /*No resize needed*/
        {
            obj->scaler_enable = vx_false_e;
            obj->display_image = obj->ldc_out;

            /* MSC can only downsize. If ldc resolution is lower,
               display resolution must be set accordingly
            */
            obj->display_params.outWidth = obj->table_width;
            obj->display_params.outHeight = obj->table_height;
        }
    }
    else /*ldc_enable*/
    {
        if(NULL != obj->capt_yuv_image)
        {
            /*MSC does not support YUV422 input*/
            obj->scaler_enable = vx_false_e;
        }
        else
        {
            if ((image_width >= obj->display_params.outWidth) && (image_height >= obj->display_params.outHeight))
            {
                obj->scaler_enable = vx_true_e;
            }
            else
            {
                obj->scaler_enable = vx_false_e;
                /* MSC can only downsize. If viss resolution is lower,
                   display resolution must be set accordingly
                */
                obj->display_params.outWidth = image_width;
                obj->display_params.outHeight = image_height;
            }
        }

        if(vx_true_e == obj->scaler_enable)
        {
            vx_uint16 scaler_out_w, scaler_out_h;
            appIssGetResizeParams(image_width, image_height, obj->display_params.outWidth, obj->display_params.outHeight, &scaler_out_w, &scaler_out_h);
            obj->scaler_out_img = vxCreateImage(obj->context, scaler_out_w, scaler_out_h, VX_DF_IMAGE_NV12);
            obj->scalerNode = tivxVpacMscScaleNode(obj->graph, ldc_in_image, obj->scaler_out_img, NULL, NULL, NULL, NULL);
            if(status == VX_SUCCESS)
            {
                status = tivxSetNodeParameterNumBufByIndex(obj->scalerNode, 1u, obj->num_cap_buf);
            }
            if(status == VX_SUCCESS)
            {
                status = vxSetNodeTarget(obj->scalerNode, VX_TARGET_STRING, TIVX_TARGET_VPAC_MSC1);
            }
            obj->display_params.outHeight = scaler_out_h;
            obj->display_params.outWidth = scaler_out_w;
            obj->display_image = obj->scaler_out_img;
        }
        else
        {
            obj->display_image = ldc_in_image;
        }
    }

    if(NULL == obj->display_image)
    {
        printf("Error : Display input is uninitialized \n");
        return VX_FAILURE;
    }
    else
    {
        obj->display_params.posX = (1920U - obj->display_params.outWidth)/2;
        obj->display_params.posY = (1080U - obj->display_params.outHeight)/2;
        obj->display_param_obj = vxCreateUserDataObject(obj->context, "tivx_display_params_t", sizeof(tivx_display_params_t), &obj->display_params);
        obj->displayNode = tivxDisplayNode(obj->graph, obj->display_param_obj, obj->display_image);
    }

    if(status == VX_SUCCESS)
    {
        status = vxSetNodeTarget(obj->displayNode, VX_TARGET_STRING, TIVX_TARGET_DISPLAY1);
        APP_PRINTF("Display Set Target done\n");
    }
#else
    if (obj->ldc_enable)
    {
        printf ("Enabling LDC \n");
        status = app_create_ldc(obj, ldc_in_image);

        if(status == VX_SUCCESS)
        {
            status = vxSetNodeTarget(obj->node_ldc, VX_TARGET_STRING, TIVX_TARGET_VPAC_LDC1);
        }
        else
        {
            printf("app_create_ldc returned error \n");
            return status;
        }
        if(status == VX_SUCCESS)
        {
            status = tivxSetNodeParameterNumBufByIndex(obj->node_ldc, 7u, obj->num_cap_buf);
        }
        printf ("Enabling DSS_M2M \n");
        obj->display_m2m_output_image = vxCreateImage(obj->context, obj->width_in, obj->height_in, VX_DF_IMAGE_UYVY);
        obj->display_m2m_param_obj = vxCreateUserDataObject(obj->context, "tivx_display_m2m_params_t", sizeof(tivx_display_m2m_params_t), &obj->display_m2m_params);
        obj->displaym2mNode = tivxDisplayM2MNode(obj->graph, obj->display_m2m_param_obj, obj->ldc_out, obj->display_m2m_output_image);
        if(status == VX_SUCCESS)
        {
            status = vxSetNodeTarget(obj->displaym2mNode, VX_TARGET_STRING, TIVX_TARGET_DISPLAY_M2M1);
        }

        if(status == VX_SUCCESS)
        {
            status = tivxSetNodeParameterNumBufByIndex(obj->displaym2mNode, 2u, obj->num_cap_buf);
        }

        // CSI-TX
        {
            obj->csitx_image_arr = vxCreateObjectArray(obj->context, (vx_reference)obj->display_m2m_output_image, num_capture_frames);
            obj->csitx_node = tivxCsitxNode(obj->graph, obj->csitx_config, obj->csitx_image_arr);
            vxSetNodeTarget(obj->csitx_node, VX_TARGET_STRING, TIVX_TARGET_CSITX2);
        }
    }
    else /*ldc_enable*/
    {
        printf ("Enabling DSS_M2M \n");
        obj->display_m2m_output_image = vxCreateImage(obj->context, obj->width_in, obj->height_in, VX_DF_IMAGE_UYVY);
        obj->display_m2m_param_obj = vxCreateUserDataObject(obj->context, "tivx_display_m2m_params_t", sizeof(tivx_display_m2m_params_t), &obj->display_m2m_params);
        obj->displaym2mNode = tivxDisplayM2MNode(obj->graph, obj->display_m2m_param_obj, ldc_in_image, obj->display_m2m_output_image);
        if(status == VX_SUCCESS)
        {
            status = vxSetNodeTarget(obj->displaym2mNode, VX_TARGET_STRING, TIVX_TARGET_DISPLAY_M2M1);
        }

        if(status == VX_SUCCESS)
        {
            status = tivxSetNodeParameterNumBufByIndex(obj->displaym2mNode, 2u, obj->num_cap_buf);
        }
        obj->csitx_image_arr = vxCreateObjectArray(obj->context, (vx_reference)obj->display_m2m_output_image, num_capture_frames);
        obj->csitx_node = tivxCsitxNode(obj->graph, obj->csitx_config, obj->csitx_image_arr);
        vxSetNodeTarget(obj->csitx_node, VX_TARGET_STRING, TIVX_TARGET_CSITX);
    }

#endif

    int graph_parameter_num = 0;

    /* input @ node index 1, becomes graph parameter 0 */
    add_graph_parameter_by_node_index(obj->graph, obj->capture_node, 1);

    /* set graph schedule config such that graph parameter @ index 0 is enqueuable */
    graph_parameters_queue_params_list[graph_parameter_num].graph_parameter_index = graph_parameter_num;
    graph_parameters_queue_params_list[graph_parameter_num].refs_list_size = obj->num_cap_buf;
    graph_parameters_queue_params_list[graph_parameter_num].refs_list = (vx_reference*)&(obj->cap_frames[0]);
    graph_parameter_num++;

#ifndef USE_CSITX
    if(obj->test_mode == 1)
    {
        add_graph_parameter_by_node_index(obj->graph, obj->displayNode, 1);

        /* set graph schedule config such that graph parameter @ index 0 is enqueuable */
        graph_parameters_queue_params_list[graph_parameter_num].graph_parameter_index = graph_parameter_num;
        graph_parameters_queue_params_list[graph_parameter_num].refs_list_size = 1;
        graph_parameters_queue_params_list[graph_parameter_num].refs_list = (vx_reference*)&(obj->display_image);
        graph_parameter_num++;
    }
#endif

    if(status == VX_SUCCESS)
    {
        status = tivxSetGraphPipelineDepth(obj->graph, obj->num_cap_buf);
    }

    /* Schedule mode auto is used, here we dont need to call vxScheduleGraph
     * Graph gets scheduled automatically as refs are enqueued to it
     */
    if(status == VX_SUCCESS)
    {
        status = vxSetGraphScheduleConfig(obj->graph,
                        VX_GRAPH_SCHEDULE_MODE_QUEUE_AUTO,
                        params_list_depth,
                        graph_parameters_queue_params_list
                        );
    }
    APP_PRINTF("vxSetGraphScheduleConfig done\n");

    if(status == VX_SUCCESS)
    {
        status = vxVerifyGraph(obj->graph);
    }

#ifndef USE_CSITX
    if(vx_true_e == obj->scaler_enable)
    {
        tivx_vpac_msc_coefficients_t sc_coeffs;
        vx_reference refs[1];

        printf("Scaler is enabled\n");

        tivx_vpac_msc_coefficients_params_init(&sc_coeffs, VX_INTERPOLATION_BILINEAR);

        obj->sc_coeff_obj = vxCreateUserDataObject(obj->context, "tivx_vpac_msc_coefficients_t", sizeof(tivx_vpac_msc_coefficients_t), NULL);
        if(status == VX_SUCCESS)
        {
            status = vxCopyUserDataObject(obj->sc_coeff_obj, 0, sizeof(tivx_vpac_msc_coefficients_t), &sc_coeffs, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
        }
        refs[0] = (vx_reference)obj->sc_coeff_obj;
        if(status == VX_SUCCESS)
        {
            status = tivxNodeSendCommand(obj->scalerNode, 0u, TIVX_VPAC_MSC_CMD_SET_COEFF, refs, 1u);
        }
    }
    else
    {
        printf("Scaler is disabled\n");
    }
#endif

    if(status == VX_SUCCESS)
    {
        status = tivxExportGraphToDot(obj->graph, ".", "single_cam_graph");
    }

#ifdef _APP_DEBUG_
    if(vx_false_e == yuv_cam_input)
    {
        if( (NULL != obj->fs_test_raw_image) && (NULL != obj->capture_node) && (status == VX_SUCCESS))
        {
            status = app_send_test_frame(obj->capture_node, obj->fs_test_raw_image);
        }
    }
#endif //_APP_DEBUG_

    APP_PRINTF("app_create_graph exiting\n");
    return status;
}

vx_status app_delete_graph(AppObj *obj)
{
    uint32_t buf_id;
    vx_status status = VX_SUCCESS;

    if(NULL != obj->capture_node)
    {
        APP_PRINTF("releasing capture node\n");
        status |= vxReleaseNode(&obj->capture_node);
    }

    if(NULL != obj->node_viss)
    {
        APP_PRINTF("releasing node_viss\n");
        status |= vxReleaseNode(&obj->node_viss);
    }

    if(NULL != obj->node_aewb)
    {
        APP_PRINTF("releasing node_aewb\n");
        status |= vxReleaseNode(&obj->node_aewb);
    }

#ifndef USE_CSITX
    if(NULL != obj->displayNode)
    {
        APP_PRINTF("releasing displayNode\n");
        status |= vxReleaseNode(&obj->displayNode);
    }
#else
    if(NULL != obj->csitx_node)
    {
        APP_PRINTF("releasing csitx_node\n");
        status |= vxReleaseNode(&obj->csitx_node);
    }
    if(NULL != obj->displaym2mNode)
    {
        APP_PRINTF("releasing displaym2mNode\n");
        status |= vxReleaseNode(&obj->displaym2mNode);
    }
#endif

    status |= tivxReleaseRawImage(&obj->raw);
    APP_PRINTF("releasing raw image done\n");

    for(buf_id=0; buf_id<obj->num_cap_buf; buf_id++)
    {
       if(NULL != obj->cap_frames[buf_id])
       {
        APP_PRINTF("releasing cap_frame # %d\n", buf_id);
        status |= vxReleaseObjectArray(&(obj->cap_frames[buf_id]));
       }
    }

    for(buf_id=0; buf_id<obj->num_viss_out_buf; buf_id++)
    {
      if(NULL != obj->viss_out_luma[buf_id])
      {
        APP_PRINTF("releasing y8 buffer # %d\n", buf_id);
        status |= vxReleaseImage(&(obj->viss_out_luma[buf_id]));
      }
    }

    if(NULL != obj->capt_yuv_image)
    {
        APP_PRINTF("releasing capt_yuv_image\n");
        status |= vxReleaseImage(&obj->capt_yuv_image);
    }


    if(NULL != obj->y12)
    {
        APP_PRINTF("releasing y12\n");
        status |= vxReleaseImage(&obj->y12);
    }

    if(NULL != obj->uv12_c1)
    {
        APP_PRINTF("releasing uv12_c1\n");
        status |= vxReleaseImage(&obj->uv12_c1);
    }

    if(NULL != obj->s8_b8_c4)
    {
        APP_PRINTF("releasing s8_b8_c4\n");
        status |= vxReleaseImage(&obj->s8_b8_c4);
    }

    if(NULL != obj->y8_r8_c2)
    {
        APP_PRINTF("releasing y8_r8_c2\n");
        status |= vxReleaseImage(&obj->y8_r8_c2);
    }

    if(NULL != obj->uv8_g8_c3)
    {
        APP_PRINTF("releasing uv8_g8_c3\n");
        status |= vxReleaseImage(&obj->uv8_g8_c3);
    }

    if(NULL != obj->histogram)
    {
        APP_PRINTF("releasing histogram\n");
        status |= vxReleaseDistribution(&obj->histogram);
    }

    if(NULL != obj->configuration)
    {
        APP_PRINTF("releasing configuration\n");
        status |= vxReleaseUserDataObject(&obj->configuration);

    }

    if (NULL != obj->ae_awb_result)
    {
        status |= vxReleaseUserDataObject(&obj->ae_awb_result);
        APP_PRINTF("releasing ae_awb_result done\n");
    }

    if(NULL != obj->h3a_aew_af)
    {
        APP_PRINTF("releasing h3a_aew_af\n");
        status |= vxReleaseUserDataObject(&obj->h3a_aew_af);
    }

    if(NULL != obj->aewb_config)
    {
        APP_PRINTF("releasing aewb_config\n");
        status |= vxReleaseUserDataObject(&obj->aewb_config);
    }

    if(NULL != obj->dcc_param_viss)
    {
        APP_PRINTF("releasing VISS DCC Data Object\n");
        status |= vxReleaseUserDataObject(&obj->dcc_param_viss);
    }

#ifndef USE_CSITX
    if(NULL != obj->display_param_obj)
    {
        APP_PRINTF("releasing Display Param Data Object\n");
        status |= vxReleaseUserDataObject(&obj->display_param_obj);
    }
#else
    if(NULL != obj->csitx_config)
    {
        APP_PRINTF("releasing csi-tx Data Object\n");
        status |= vxReleaseUserDataObject(&obj->csitx_config);
    }
    if(NULL != obj->csitx_image_arr)
    {
        APP_PRINTF("releasing csitx Image \n");
        status |= vxReleaseObjectArray(&obj->csitx_image_arr);
    }
    if(NULL != obj->display_m2m_param_obj)
    {
        APP_PRINTF("releasing Display Param Data Object\n");
        status |= vxReleaseUserDataObject(&obj->display_m2m_param_obj);
    }
    if(NULL != obj->display_m2m_output_image)
    {
        APP_PRINTF("releasing Display Param Data Object\n");
        status |= vxReleaseImage(&obj->display_m2m_output_image);
    }
#endif

    if(NULL != obj->dcc_param_2a)
    {
        APP_PRINTF("releasing 2A DCC Data Object\n");
        status |= vxReleaseUserDataObject(&obj->dcc_param_2a);
    }

    if(NULL != obj->dcc_param_ldc)
    {
        APP_PRINTF("releasing LDC DCC Data Object\n");
        status |= vxReleaseUserDataObject(&obj->dcc_param_ldc);
    }

    if (obj->ldc_enable)
    {
        if (NULL != obj->mesh_img)
        {
            APP_PRINTF("releasing LDC Mesh Image \n");
            status |= vxReleaseImage(&obj->mesh_img);
        }

        if (NULL != obj->ldc_out)
        {
            APP_PRINTF("releasing LDC Output Image \n");
            status |= vxReleaseImage(&obj->ldc_out);
        }

        if (NULL != obj->mesh_params_obj)
        {
            APP_PRINTF("releasing LDC Mesh Parameters Object\n");
            status |= vxReleaseUserDataObject(&obj->mesh_params_obj);
        }

        if (NULL != obj->ldc_param_obj)
        {
            APP_PRINTF("releasing LDC Parameters Object\n");
            status |= vxReleaseUserDataObject(&obj->ldc_param_obj);
        }

        if (NULL != obj->region_params_obj)
        {
            APP_PRINTF("releasing LDC Region Parameters Object\n");
            status |= vxReleaseUserDataObject(&obj->region_params_obj);
        }

        if(NULL != obj->node_ldc)
        {
            APP_PRINTF("releasing LDC Node \n");
            status |= vxReleaseNode(&obj->node_ldc);
        }
    }
#ifndef USE_CSITX
    if(vx_true_e == obj->scaler_enable)
    {
        if (NULL != obj->scaler_out_img)
        {
            APP_PRINTF("releasing Scaler Output Image \n");
            status |= vxReleaseImage(&obj->scaler_out_img);
        }

        if(NULL != obj->scalerNode)
        {
            APP_PRINTF("releasing Scaler Node \n");
            status |= vxReleaseNode(&obj->scalerNode);
        }

        if (NULL != obj->sc_coeff_obj)
        {
            APP_PRINTF("release Scalar coefficient data object \n");
            status |= vxReleaseUserDataObject(&obj->sc_coeff_obj);
        }
    }
#endif

#ifdef _APP_DEBUG_
    if(NULL != obj->fs_test_raw_image)
    {
        APP_PRINTF("releasing test raw image buffer # %d\n", buf_id);
        status |= tivxReleaseRawImage(&obj->fs_test_raw_image);
    }
#endif

    APP_PRINTF("releasing graph\n");
    status |= vxReleaseGraph(&obj->graph);
    APP_PRINTF("releasing graph done\n");
    return status;
}

vx_status app_run_graph(AppObj *obj)
{
    vx_status status = VX_SUCCESS;
    vx_uint32 i;
    vx_uint32 frm_loop_cnt;

    uint32_t buf_id;
    uint32_t num_refs_capture;
    vx_object_array out_capture_frames;
    int graph_parameter_num = 0;

    uint8_t channel_mask = (1<<obj->selectedCam);

    if(NULL == obj->sensor_name)
    {
        printf("sensor name is NULL \n");
        return VX_FAILURE;
    }
    status = appStartImageSensor(obj->sensor_name, channel_mask);
    if(status < 0)
    {
        printf("Failed to start sensor %s \n", obj->sensor_name);
        if (NULL != obj->fs_test_raw_image)
        {
            printf("Defaulting to file test mode \n");
            status = 0;
        }
    }

    graph_parameter_num = 0;
    for(buf_id=0; buf_id<obj->num_cap_buf; buf_id++)
    {
        if(status == VX_SUCCESS)
        {
            status = vxGraphParameterEnqueueReadyRef(obj->graph, 0, (vx_reference*)&(obj->cap_frames[buf_id]), 1);
        }
#ifndef USE_CSITX
        /* in order for the graph to finish execution, the
            display still needs to be enqueued 4 times for testing */
        if((status == VX_SUCCESS) && (obj->test_mode == 1))
        {
            status = vxGraphParameterEnqueueReadyRef(obj->graph, 1, (vx_reference*)&(obj->display_image), 1);
        }
#endif
    }

    /*
        The application reads and  processes the same image "frm_loop_cnt" times
        The output may change because on VISS, parameters are updated every frame based on AEWB results
        AEWB result is avaialble after 1 frame and is applied after 2 frames
        Therefore, first 2 output images will have wrong colors
    */
    frm_loop_cnt = obj->num_frames_to_run;
    frm_loop_cnt += obj->num_cap_buf;

    if(obj->is_interactive)
    {
        /* in interactive mode loop for ever */
        frm_loop_cnt  = 0xFFFFFFFF;
    }

#ifdef A72
#if defined(LINUX)

    appDccUpdatefromFS(obj->sensor_name, obj->sensor_wdr_mode,
                        obj->node_aewb, 0,
                        obj->node_viss, 0,
                        obj->node_ldc, 0,
                        obj->context);
#endif
#endif

    for(i=0; i<frm_loop_cnt; i++)
    {
#ifndef USE_CSITX
        vx_image test_image;
#endif
        appPerfPointBegin(&obj->total_perf);
        graph_parameter_num = 0;
        if(status == VX_SUCCESS)
        {
            status = vxGraphParameterDequeueDoneRef(obj->graph, graph_parameter_num, (vx_reference*)&out_capture_frames, 1, &num_refs_capture);
        }
#ifndef USE_CSITX
        graph_parameter_num++;
        if((status == VX_SUCCESS) && (obj->test_mode == 1))
        {
            status = vxGraphParameterDequeueDoneRef(obj->graph, 1, (vx_reference*)&test_image, 1, &num_refs_capture);
        }
        if((obj->test_mode == 1) && (i > TEST_BUFFER) && (status == VX_SUCCESS))
        {
            vx_uint32 actual_checksum = 0;
            if(app_test_check_image(test_image, checksums_expected[obj->sensor_sel][0], &actual_checksum) == vx_false_e)
            {
                test_result = vx_false_e;
            }
            populate_gatherer(obj->sensor_sel, 0, actual_checksum);
        }
        APP_PRINTF(" i %d...\n", i);
        graph_parameter_num = 0;
        if((status == VX_SUCCESS) && (obj->test_mode == 1))
        {
            status = vxGraphParameterEnqueueReadyRef(obj->graph, 1, (vx_reference*)&test_image, 1);
        }
#endif
        if(status == VX_SUCCESS)
        {
            status = vxGraphParameterEnqueueReadyRef(obj->graph, graph_parameter_num, (vx_reference*)&out_capture_frames, 1);
        }
        graph_parameter_num++;

        appPerfPointEnd(&obj->total_perf);

        if((obj->stop_task) || (status != VX_SUCCESS))
        {
            break;
        }
    }

    if(status == VX_SUCCESS)
    {
        status = vxWaitGraph(obj->graph);
    }
/* Dequeue buf for pipe down */
#if 0
    for(buf_id=0; buf_id<obj->num_cap_buf-2; buf_id++)
    {
        APP_PRINTF(" Dequeuing capture # %d...\n", buf_id);
        graph_parameter_num = 0;
        vxGraphParameterDequeueDoneRef(obj->graph, graph_parameter_num, (vx_reference*)&out_capture_frames, 1, &num_refs_capture);
        graph_parameter_num++;
    }
#endif
    if(status == VX_SUCCESS)
    {
        status = appStopImageSensor(obj->sensor_name, channel_mask);
    }
    return status;
}

static void app_run_task(void *app_var)
{
    AppObj *obj = (AppObj *)app_var;

    appPerfStatsCpuLoadResetAll();

    app_run_graph(obj);

    obj->stop_task_done = 1;
}

static int32_t app_run_task_create(AppObj *obj)
{
    tivx_task_create_params_t params;
    int32_t status;

    tivxTaskSetDefaultCreateParams(&params);
    params.task_main = app_run_task;
    params.app_var = obj;

    obj->stop_task_done = 0;
    obj->stop_task = 0;

    status = tivxTaskCreate(&obj->task, &params);

    return status;
}

static void app_run_task_delete(AppObj *obj)
{
    while(obj->stop_task_done==0)
    {
         tivxTaskWaitMsecs(100);
    }

    tivxTaskDelete(&obj->task);
}

static char menu[] = {
    "\n"
    "\n =========================="
    "\n Demo : Single Camera w/ 2A"
    "\n =========================="
    "\n"
    "\n p: Print performance statistics"
    "\n"
#ifdef _APP_DEBUG_
    "\n s: Save Sensor RAW, VISS Output and H3A output images to File System"
    "\n"
#endif
    "\n e: Export performance statistics"
#ifdef A72
#if defined(LINUX)
    "\n"
    "\n u: Update DCC from File System"
    "\n"
    "\n"
#endif
#endif
    "\n x: Exit"
    "\n"
    "\n Enter Choice: "
};

static vx_status app_run_graph_interactive(AppObj *obj)
{
    vx_status status;
    uint32_t done = 0;
    char ch;
    FILE *fp;
    app_perf_point_t *perf_arr[1];
    uint8_t channel_mask = (1<<obj->selectedCam);

    status = app_run_task_create(obj);
    if(status!=0)
    {
        printf("ERROR: Unable to create task\n");
    }
    else
    {
        appPerfStatsResetAll();
        while(!done && (status == VX_SUCCESS))
        {
            printf(menu);
            ch = getchar();
            printf("\n");

            switch(ch)
            {
                case 'p':
                    appPerfStatsPrintAll();
                    status = tivx_utils_graph_perf_print(obj->graph);
                    appPerfPointPrint(&obj->total_perf);
                    printf("\n");
                    appPerfPointPrintFPS(&obj->total_perf);
                    appPerfPointReset(&obj->total_perf);
                    printf("\n");
                    break;
#ifdef _APP_DEBUG_
                case 's':
                    save_debug_images(obj);
                    break;
#endif
                case 'e':
                    perf_arr[0] = &obj->total_perf;
                    fp = appPerfStatsExportOpenFile(".", "basic_demos_app_single_cam");
                    if (NULL != fp)
                    {
                        appPerfStatsExportAll(fp, perf_arr, 1);
                        status = tivx_utils_graph_perf_export(fp, obj->graph);
                        appPerfStatsExportCloseFile(fp);
                        appPerfStatsResetAll();
                    }
                    else
                    {
                        printf("fp is null\n");
                    }
                    break;
#ifdef A72
#if defined(LINUX)
                case 'u':
                    appDccUpdatefromFS(obj->sensor_name, obj->sensor_wdr_mode,
                        obj->node_aewb, 0,
                        obj->node_viss, 0,
                        obj->node_ldc, 0,
                        obj->context);
                    break;
#endif
#endif

                case 'x':
                    obj->stop_task = 1;
                    done = 1;
                    break;

                default:
                    printf("Unsupported command %c\n", ch);
                    break;

            }
        }
        app_run_task_delete(obj);
    }
    if(status == VX_SUCCESS)
    {
        status = appStopImageSensor(obj->sensor_name, channel_mask);
    }
    return status;
}

static void app_show_usage(int argc, char* argv[])
{
    printf("\n");
    printf(" Single Camera Demo - (c) Texas Instruments 2019\n");
    printf(" ========================================================\n");
    printf("\n");
    printf(" Usage,\n");
    printf("  %s --cfg <config file>\n", argv[0]);
    printf("\n");
}

#ifdef A72
#if defined(LINUX)
int appSingleCamUpdateVpacDcc(AppObj *obj, uint8_t* dcc_buf, uint32_t dcc_buf_size)
{
    int32_t status = 0;

    status = appUpdateVpacDcc(dcc_buf, dcc_buf_size, obj->context,
                obj->node_viss, 0,
                obj->node_aewb, 0,
                obj->node_ldc, 0
             );

    return status;
}
#endif
#endif

#ifdef _APP_DEBUG_
int save_debug_images(AppObj *obj)
{
    int num_bytes_io = 0;
    static int file_index = 0;
    char raw_image_fname[MAX_FNAME];
    char yuv_image_fname[MAX_FNAME];
    char h3a_image_fname[MAX_FNAME];
    char failsafe_test_data_path[3] = "./";
    char * test_data_path = app_get_test_file_path();
    struct stat s;

    if(NULL == test_data_path)
    {
        printf("Test data path is NULL. Defaulting to current folder \n");
        test_data_path = failsafe_test_data_path;
    }

    if (stat(test_data_path, &s))
    {
        printf("Test data path %s does not exist. Defaulting to current folder \n", test_data_path);
        test_data_path = failsafe_test_data_path;
    }

    if(NULL == obj->capt_yuv_image)
    {
        snprintf(raw_image_fname, MAX_FNAME, "%s/%s_%04d.raw", test_data_path, "img", file_index);
        printf("RAW file name %s \n", raw_image_fname);
        num_bytes_io = write_output_image_raw(raw_image_fname, obj->raw);
        if(num_bytes_io < 0)
        {
            printf("Error writing to RAW file \n");
            return VX_FAILURE;
        }

        snprintf(yuv_image_fname, MAX_FNAME, "%s/%s_%04d.yuv", test_data_path, "img_viss", file_index);
        printf("YUV file name %s \n", yuv_image_fname);
        num_bytes_io = write_output_image_nv12_8bit(yuv_image_fname, obj->y8_r8_c2);
        if(num_bytes_io < 0)
        {
            printf("Error writing to VISS NV12 file \n");
            return VX_FAILURE;
        }

        snprintf(h3a_image_fname, MAX_FNAME, "%s/%s_%04d.bin", test_data_path, "h3a", file_index);
        printf("H3A file name %s \n", h3a_image_fname);
        num_bytes_io = write_h3a_image(h3a_image_fname, obj->h3a_aew_af);
        if(num_bytes_io < 0)
        {
            printf("Error writing to H3A file \n");
            return VX_FAILURE;
        }

    }
    else
    {
        vx_image cap_yuv;
        snprintf(raw_image_fname, MAX_FNAME, "%s/%s_%04d.yuv", test_data_path, "cap", file_index);
        printf("YUV file name %s \n", raw_image_fname);
        cap_yuv = (vx_image)vxGetObjectArrayItem(obj->cap_frames[0], 0);
        num_bytes_io = write_output_image_yuv422_8bit(raw_image_fname, cap_yuv);
        if(num_bytes_io < 0)
        {
            printf("Error writing to YUV file \n");
            return VX_FAILURE;
        }
    }

    if(obj->scaler_enable)
    {
        snprintf(yuv_image_fname, MAX_FNAME, "%s/%s_%04d.yuv", test_data_path, "img_msc", file_index);
        printf("YUV file name %s \n", yuv_image_fname);
        num_bytes_io = write_output_image_nv12_8bit(yuv_image_fname, obj->scaler_out_img);
        if(num_bytes_io < 0)
        {
            printf("Error writing to MSC NV12 file \n");
            return VX_FAILURE;
        }
    }

    if(obj->ldc_enable)
    {
        snprintf(yuv_image_fname, MAX_FNAME, "%s/%s_%04d.yuv", test_data_path, "img_ldc", file_index);
        printf("YUV file name %s \n", yuv_image_fname);
        num_bytes_io = write_output_image_nv12_8bit(yuv_image_fname, obj->ldc_out);
        if(num_bytes_io < 0)
        {
            printf("Error writing to LDC NV12 file \n");
            return VX_FAILURE;
        }
    }

    file_index++;
    return (file_index-1);
}
#endif //_APP_DEBUG_

static void app_parse_cfg_file(AppObj *obj, char *cfg_file_name)
{
    FILE *fp = fopen(cfg_file_name, "r");
    char line_str[1024];
    char *token;

    if(fp==NULL)
    {
        printf("# ERROR: Unable to open config file [%s]. Switching to interactive mode\n", cfg_file_name);
        obj->is_interactive = 1;
    }
    else
    {
        while(fgets(line_str, sizeof(line_str), fp)!=NULL)
        {
            char s[]=" \t";

            if (strchr(line_str, '#'))
            {
                continue;
            }

            /* get the first token */
            token = strtok(line_str, s);
            if (NULL != token)
            {
                if(strcmp(token, "sensor_index")==0)
                {
                    token = strtok(NULL, s);
                    if (NULL != token)
                    {
                        obj->sensor_sel = atoi(token);
                        printf("sensor_selection = [%d]\n", obj->sensor_sel);
                    }
                }
                else
                if(strcmp(token, "ldc_enable")==0)
                {
                    token = strtok(NULL, s);
                    if (NULL != token)
                    {
                        obj->ldc_enable = atoi(token);
                        printf("ldc_enable = [%d]\n", obj->ldc_enable);
                    }
                }
                else
                if(strcmp(token, "num_frames_to_run")==0)
                {
                    token = strtok(NULL, s);
                    if (NULL != token)
                    {
                        obj->num_frames_to_run = atoi(token);
                        printf("num_frames_to_run = [%d]\n", obj->num_frames_to_run);
                    }
                }
                else
                if(strcmp(token, "is_interactive")==0)
                {
                    token = strtok(NULL, s);
                    if (NULL != token)
                    {
                        obj->is_interactive = atoi(token);
                        printf("is_interactive = [%d]\n", obj->is_interactive);
                    }
                }
                else
                {
                    APP_PRINTF("Invalid token [%s]\n", token);
                }
            }
        }

        fclose(fp);
    }

    if(obj->width_in<128)
        obj->width_in = 128;
    if(obj->height_in<128)
        obj->height_in = 128;
    if(obj->width_out<128)
        obj->width_out = 128;
    if(obj->height_out<128)
        obj->height_out = 128;

}

vx_status app_parse_cmd_line_args(AppObj *obj, int argc, char *argv[])
{
#ifndef USE_CSITX
    vx_bool set_test_mode = vx_false_e;
    vx_int8 sensor_override = 0xFF;
#endif
    app_set_cfg_default(obj);

    int i;
    if(argc==1)
    {
        app_show_usage(argc, argv);
        printf("Defaulting to interactive mode \n");
        obj->is_interactive = 1;
        return VX_SUCCESS;
    }

    for(i=0; i<argc; i++)
    {
        if(strcmp(argv[i], "--cfg")==0)
        {
            i++;
            if(i>=argc)
            {
                app_show_usage(argc, argv);
            }
            app_parse_cfg_file(obj, argv[i]);
        }
        else
        if(strcmp(argv[i], "--help")==0)
        {
            app_show_usage(argc, argv);
            return VX_FAILURE;
        }
#ifndef USE_CSITX
        else
        if(strcmp(argv[i], "--test")==0)
        {
            set_test_mode = vx_true_e;
        }
        else
        if(strcmp(argv[i], "--sensor")==0)
        {
            // check to see if there is another argument following --sensor
            if (argc > i+1)
            {
                sensor_override = atoi(argv[i+1]);
                // increment i again to avoid this arg
                i++;
            }
        }
#endif
    }

#ifndef USE_CSITX
    if(set_test_mode == vx_true_e)
    {
        obj->test_mode = 1;
        obj->is_interactive = 0;
        obj->num_frames_to_run = NUM_FRAMES;
        if (sensor_override != 0xFF)
        {
            obj->sensor_sel = sensor_override;
        }
    }
#endif
    return VX_SUCCESS;
}



#ifdef _APP_DEBUG_
vx_int32 write_output_image_nv12(char * file_name, vx_image out_nv12)
{
    FILE * fp = fopen(file_name, "wb");
    if(!fp)
    {
        APP_PRINTF("Unable to open file %s\n", file_name);
        return -1;
    }
    vx_uint32 len1 = write_output_image_fp(fp, out_nv12);
    fclose(fp);
    APP_PRINTF("%d bytes written to %s\n", len1, file_name);
    return len1;
}
#endif


AppObj gAppObj;

int app_single_cam_main(int argc, char* argv[])
{
    AppObj *obj = &gAppObj;
    vx_status status = VX_FAILURE;
    status = app_parse_cmd_line_args(obj, argc, argv);
    if(VX_SUCCESS == status)
    {
        status = app_init(obj);
        if(VX_SUCCESS == status)
        {
            APP_PRINTF("app_init done\n");
            /* Not checking status because application may be waiting for
                error/test frame */
            app_create_graph(obj);
            if(VX_SUCCESS == status)
            {
                APP_PRINTF("app_create_graph done\n");
                if(obj->is_interactive)
                {
                    status = app_run_graph_interactive(obj);
                }
                else
                {
                    status = app_run_graph(obj);
                }
                if(VX_SUCCESS == status)
                {
                    APP_PRINTF("app_run_graph done\n");
                    status = app_delete_graph(obj);
                    if(VX_SUCCESS == status)
                    {
                        APP_PRINTF("app_delete_graph done\n");
                    }
                    else
                    {
                        printf("Error : app_delete_graph returned 0x%x \n", status);
                    }
                }
                else
                {
                    printf("Error : app_run_graph_xx returned 0x%x \n", status);
                }
            }
            else
            {
                printf("Error : app_create_graph returned 0x%x is_interactive =%d  \n", status, obj->is_interactive);
            }
        }
        else
        {
            printf("Error : app_init returned 0x%x \n", status);
        }
        status = app_deinit(obj);
        if(VX_SUCCESS == status)
        {
            APP_PRINTF("app_deinit done\n");
        }
        else
        {
            printf("Error : app_deinit returned 0x%x \n", status);
        }
        appDeInitImageSensor(obj->sensor_name);
    }
    else
    {
        printf("Error: app_parse_cmd_line_args returned 0x%x \n", status);
    }
#ifndef USE_CSITX
    if(obj->test_mode == 1)
    {
        if((test_result == vx_false_e) || (status == VX_FAILURE))
        {
            printf("\n\nTEST FAILED\n\n");
            print_new_checksum_structs();
            status = (status == VX_SUCCESS) ? VX_FAILURE : status;
        }
        else
        {
            printf("\n\nTEST PASSED\n\n");
        }
    }
#endif
    return status;
}

vx_status app_send_test_frame(vx_node cap_node, tivx_raw_image raw_img)
{
    vx_status status = VX_SUCCESS;

    status = tivxCaptureRegisterErrorFrame(cap_node, (vx_reference)raw_img);

    return status;
}

And console output from running the single camera application using this code:

=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2024.01.12 14:18:31 =~=~=~=~=~=~=~=~=~=~=~=

U-Boot SPL 2021.01-g7996ed51f1 (Dec 16 2022 - 07:49:37 +0000)
ti_sci system-controller@44083000: Message not acknowledgedSYSFW ABI: 3.1 (firmware rev 0x0008 '8.5.2--v08.05.02 (Chill Capybar')
SPL initial stack usage: 13472 bytes
Trying to boot from MMC2
Starting ATF on ARM64 core...

NOTICE: BL31: v2.7(release):v2.7.0-359-g1309c6c805-dirty
NOTICE: BL31: Built : 07:48:35, Dec 16 2022
I/TC:
I/TC: OP-TEE version: 3.19.0 (gcc version 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10))) #1 Fri Dec 16 07:48:40 UTC 2022 aarch64
I/TC: WARNING: This OP-TEE configuration might be insecure!
I/TC: WARNING: Please check optee.readthedocs.io/.../porting_guidelines.html
I/TC: Primary CPU initializing
I/TC: SYSFW ABI: 3.1 (firmware rev 0x0008 '8.5.2--v08.05.02 (Chill Capybar')
I/TC: HUK Initialized
I/TC: Activated SA2UL device
I/TC: Fixing SA2UL firewall owner for GP device
I/TC: Enabled firewalls for SA2UL TRNG device
I/TC: SA2UL TRNG initialized
I/TC: SA2UL Drivers initialized
I/TC: Primary CPU switching to normal world boot

U-Boot SPL 2021.01-g7996ed51f1 (Dec 16 2022 - 07:48:53 +0000)
ti_sci system-controller@44083000: Message not acknowledgedSYSFW ABI: 3.1 (firmware rev 0x0008 '8.5.2--v08.05.02 (Chill Capybar')
Trying to boot from MMC2


U-Boot 2021.01-g7996ed51f1 (Dec 16 2022 - 07:48:53 +0000)

SoC: J721S2 SR1.0 GP
Model: Texas Instruments J721S2 EVM
ti_i2c_eeprom_am6_get: Ignoring record id 255
ti_i2c_eeprom_am6_get: Ignoring record id 255
ti_i2c_eeprom_am6_get: Ignoring record id 255
ti_i2c_eeprom_am6_get: Ignoring record id 255
ti_i2c_eeprom_am6_get: Ignoring record id 255
ti_i2c_eeprom_am6_get: Ignoring record id 255
ti_i2c_eeprom_am6_get: Ignoring record id 255
ti_i2c_eeprom_am6_get: Ignoring record id 255
ti_i2c_eeprom_am6_get: Ignoring record id 255
ti_i2c_eeprom_am6_get: Ignoring record id 255
Board: rev
DRAM: 16 GiB
Flash: 0 Bytes
MMC: mmc@4f80000: 0, mmc@4fb0000: 1
Loading Environment from MMC... OK
In: serial@2880000
Out: serial@2880000
Err: serial@2880000
am65_cpsw_nuss ethernet@46000000: K3 CPSW: nuss_ver: 0x6BA02102 cpsw_ver: 0x6BA82102 ale_ver: 0x00293904 Ports:1 mdio_freq:1000000
Unidentified board claims in eeprom header
Net: eth0: ethernet@46000000port@1
Hit any key to stop autoboot: 2 1 0
switch to partitions #0, OK
mmc1 is current device
SD/MMC found on device 1
Failed to load 'boot.scr'
484 bytes read in 5 ms (93.8 KiB/s)
Loaded env from uEnv.txt
Importing environment from mmc1 ...
Running uenvcmd ...
1 bytes read in 7 ms (0 Bytes/s)
Already setup.
k3_r5f_rproc r5f@41000000: Core 1 is already in use. No rproc commands work
k3_r5f_rproc r5f@41400000: Core 2 is already in use. No rproc commands work
949416 bytes read in 28 ms (32.3 MiB/s)
Load Remote Processor 2 with data@addr=0x82000000 949416 bytes: Success!
306092 bytes read in 16 ms (18.2 MiB/s)
Load Remote Processor 3 with data@addr=0x82000000 306092 bytes: Success!
Failed to load '/lib/firmware/j721s2-main-r5f1_0-fw'
Failed to load '/lib/firmware/j721s2-main-r5f1_1-fw'
14749760 bytes read in 149 ms (94.4 MiB/s)
Load Remote Processor 6 with data@addr=0x82000000 14749760 bytes: Success!
9768888 bytes read in 48 ms (194.1 MiB/s)
Load Remote Processor 7 with data@addr=0x82000000 9768888 bytes: Success!
18608640 bytes read in 402 ms (44.1 MiB/s)
80006 bytes read in 9 ms (8.5 MiB/s)
9772 bytes read in 7 ms (1.3 MiB/s)
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Device Tree to 000000008fee9000, end 000000008fffffff ... OK

Starting kernel ...

[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x411fd080]
[ 0.000000] Linux version 5.10.153-gdc0b7a4cacff (zbgprh@ubuntu) (aarch64-none-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 9.2.1 20191025, GNU ld (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 2.33.1.20191209) #1 SMP PREEMPT Wed Jan 3 12:55:50 PST 2024
[ 0.000000] Machine model: Texas Instruments J721S2 EVM
[ 0.000000] earlycon: ns16550a0 at MMIO32 0x0000000002880000 (options '')
[ 0.000000] printk: bootconsole [ns16550a0] enabled
[ 0.000000] efi: UEFI not found.
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a0000000, size 1 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-dma-memory@a0000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a0100000, size 15 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-memory@a0100000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a1000000, size 1 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-dma-memory@a1000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a1100000, size 15 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-memory@a1100000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a2000000, size 1 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-dma-memory@a2000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a2100000, size 31 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-memory@a2100000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a4000000, size 1 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-dma-memory@a4000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a4100000, size 31 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-memory@a4100000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a6000000, size 1 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-dma-memory@a6000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a6100000, size 15 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-memory@a6100000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a7000000, size 1 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-dma-memory@a7000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a7100000, size 15 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-r5f-memory@a7100000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a8000000, size 32 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-rtos-ipc-memory-region@a8000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000aa000000, size 96 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-dma-memory@aa000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000b0000000, size 1 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-c71-dma-memory@b0000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000b0100000, size 95 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-c71_0-memory@b0100000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000b6000000, size 1 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-c71_1-dma-memory@b6000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000b6100000, size 31 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-c71_1-memory@b6100000, compatible id shared-dma-pool
[ 0.000000] OF: reserved mem: initialized node vision_apps_shared-memories, compatible id dma-heap-carveout
[ 0.000000] Reserved memory: created DMA memory pool at 0x00000000d8000000, size 64 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-core-heap-memory-lo@d8000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created DMA memory pool at 0x0000000880000000, size 704 MiB
[ 0.000000] OF: reserved mem: initialized node vision-apps-core-heap-memory-hi@880000000, compatible id shared-dma-pool
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000080000000-0x00000000ffffffff]
[ 0.000000] DMA32 empty
[ 0.000000] Normal [mem 0x0000000100000000-0x0000000bffffefff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000080000000-0x000000009e7fffff]
[ 0.000000] node 0: [mem 0x000000009e800000-0x00000000b7ffffff]
[ 0.000000] node 0: [mem 0x00000000b8000000-0x00000000d7ffffff]
[ 0.000000] node 0: [mem 0x00000000d8000000-0x00000000dbffffff]
[ 0.000000] node 0: [mem 0x00000000dc000000-0x00000000ffffefff]
[ 0.000000] node 0: [mem 0x0000000880000000-0x00000008abffffff]
[ 0.000000] node 0: [mem 0x00000008ac000000-0x0000000bffffefff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x0000000bffffefff]
[ 0.000000] On node 0, zone Normal: 1 pages in unavailable ranges
[ 0.000000] On node 0, zone Normal: 1 pages in unavailable ranges
[ 0.000000] cma: Reserved 512 MiB at 0x00000000dfc00000
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv1.1 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: Trusted OS migration not required
[ 0.000000] psci: SMC Calling Convention v1.2
[ 0.000000] percpu: Embedded 22 pages/cpu 0.000002] sched_clock: 56 bits at 200MHz, resolution 5ns, wraps every 4398046511102ns
[ 0.008414] Console: colour dummy device 80x25
[ 0.012981] Calibrating delay loop (skipped), value calculated using timer frequency.. 400.00 BogoMIPS (lpj=800000)
[ 0.023653] pid_max: default: 32768 minimum: 301
[ 0.028420] LSM: Security Framework initializing
[ 0.033238] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[ 0.041058] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[ 0.050139] rcu: Hierarchical SRCU implementation.
[ 0.055210] Platform MSI: msi-controller@1820000 domain created
[ 0.061431] PCI/MSI: /bus@100000/interrupt-controller@1800000/msi-controller@1820000 domain created
[ 0.070740] EFI services will not be available.
[ 0.075486] smp: Bringing up secondary CPUs ...
I/TC: Secondary CPU 1 initializing
I/TC: Secondary CPU 1 switching to normal world boot
[ 0.088576] Detected PIPT I-cache on CPU1
[ 0.088602] GICv3: CPU1: found redistributor 1 region 0:0x0000000001920000
[ 0.088614] GICv3: CPU1: using allocated LPI pending table @0x00000008ac050000
[ 0.088656] CPU1: Booted secondary processor 0x0000000001 [0x411fd080]
[ 0.088717] smp: Brought up 1 node, 2 CPUs
[ 0.118063] SMP: Total of 2 processors activated.
[ 0.122869] CPU features: detected: 32-bit EL0 Support
[ 0.128124] CPU features: detected: CRC32 instructions
[ 0.142700] CPU: All CPU(s) started at EL2
[ 0.146903] alternatives: patching kernel code
[ 0.151994] devtmpfs: initialized
[ 0.159676] KASLR disabled due to lack of seed
[ 0.164327] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.174294] futex hash table entries: 512 (order: 3, 32768 bytes, linear)
[ 0.187136] pinctrl core: initialized pinctrl subsystem
[ 0.192818] DMI not present or invalid.
[ 0.197091] NET: Registered protocol family 16
[ 0.202465] DMA: preallocated 2048 KiB GFP_KERNEL pool for atomic allocations
[ 0.210152] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[ 0.218709] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[ 0.227133] thermal_sys: Registered thermal governor 'step_wise'
[ 0.227135] thermal_sys: Registered thermal governor 'power_allocator'
[ 0.233749] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[ 0.247398] ASID allocator initialised with 65536 entries
[ 0.267231] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[ 0.274089] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
[ 0.280935] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[ 0.287780] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
[ 0.295304] cryptd: max_cpu_qlen set to 1000
[ 0.301421] k3-chipinfo 43000014.chipid: Family:J721S2 rev:SR1.0 JTAGID[0x0bb7502f] Detected
[ 0.310489] vsys_3v3: supplied by evm_12v0
[ 0.314884] vsys_5v0: supplied by evm_12v0
[ 0.319586] iommu: Default domain type: Translated
[ 0.324786] SCSI subsystem initialized
[ 0.328883] mc: Linux media interface: v0.10
[ 0.333265] videodev: Linux video capture interface: v2.00
[ 0.338903] pps_core: LinuxPPS API ver. 1 registered
[ 0.343974] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 0.353314] PTP clock support registered
[ 0.357335] EDAC MC: Ver: 3.0.0
[ 0.361141] FPGA manager framework
[ 0.364647] Advanced Linux Sound Architecture Driver Initialized.
[ 0.371344] clocksource: Switched to clocksource arch_sys_counter
[ 0.377679] VFS: Disk quotas dquot_6.6.0
[ 0.381718] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 0.391489] Carveout Heap: Exported 512 MiB at 0x00000000b8000000
[ 0.397785] NET: Registered protocol family 2
[ 0.403069] IP idents hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[ 0.414168] tcp_listen_portaddr_hash hash table entries: 8192 (order: 5, 131072 bytes, linear)
[ 0.423084] TCP established hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[ 0.431776] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes, linear)
[ 0.439827] TCP: Hash tables configured (established 131072 bind 65536)
[ 0.446772] UDP hash table entries: 8192 (order: 6, 262144 bytes, linear)
[ 0.453874] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes, linear)
[ 0.461520] NET: Registered protocol family 1
[ 0.466316] RPC: Registered named UNIX socket transport module.
[ 0.472380] RPC: Registered udp transport module.
[ 0.477201] RPC: Registered tcp transport module.
[ 0.482006] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.488591] PCI: CLS 0 bytes, default 64
[ 0.493003] hw perfevents: enabled with armv8_cortex_a72 PMU driver, 7 counters available
[ 0.503619] Initialise system trusted keyrings
[ 0.508263] workingset: timestamp_bits=46 max_order=22 bucket_order=0
[ 0.516535] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.522780] NFS: Registering the id_resolver key type
[ 0.527957] Key type id_resolver registered
[ 0.532229] Key type id_legacy registered
[ 0.536354] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 0.543202] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[ 0.550852] 9p: Installing v9fs 9p2000 file system support
[ 0.576212] Key type asymmetric registered
[ 0.580399] Asymmetric key parser 'x509' registered
[ 0.585400] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 243)
[ 0.592959] io scheduler mq-deadline registered
[ 0.597585] io scheduler kyber registered
[ 0.603000] pinctrl-single 4301c000.pinctrl: 94 pins, size 376
[ 0.609118] pinctrl-single 11c000.pinctrl: 72 pins, size 288
[ 0.617405] k3-ringacc 2b800000.ringacc: Failed to get MSI domain
[ 0.623701] k3-ringacc 3c000000.ringacc: Failed to get MSI domain
[ 0.631720] Serial: 8250/16550 driver, 10 ports, IRQ sharing enabled
[ 0.644373] brd: module loaded
[ 0.651047] loop: module loaded
[ 0.654954] megasas: 07.714.04.00-rc1
[ 0.660690] tun: Universal TUN/TAP device driver, 1.6
[ 0.666172] igbvf: Intel(R) Gigabit Virtual Function Network Driver
[ 0.672578] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.
[ 0.678652] sky2: driver version 1.30
[ 0.682973] VFIO - User Level meta-driver version: 0.3
[ 0.688762] i2c /dev entries driver
[ 0.693147] sdhci: Secure Digital Host Controller Interface driver
[ 0.699466] sdhci: Copyright(c) Pierre Ossman
[ 0.704202] sdhci-pltfm: SDHCI platform and OF driver helper
[ 0.710551] ledtrig-cpu: registered to indicate activity on CPUs
[ 0.716887] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[ 0.724254] optee: probing for conduit method.
[ 0.728822] optee: revision 3.19 (afacf356)
[ 0.728979] optee: dynamic shared memory is enabled
[ 0.738455] optee: initialized driver
[ 0.743475] NET: Registered protocol family 17
[ 0.748096] 9pnet: Installing 9P2000 support
[ 0.752500] Key type dns_resolver registered
[ 0.756979] Loading compiled-in X.509 certificates
[ 0.766112] k3-ringacc 2b800000.ringacc: Failed to get MSI domain
[ 0.772484] k3-ringacc 3c000000.ringacc: Failed to get MSI domain
[ 0.781499] ti-sci 44083000.system-controller: ABI: 3.1 (firmware rev 0x0008 '8.5.2--v08.05.02 (Chill Capybar')
[ 0.815011] i2c-dev: adapter [OMAP I2C adapter] registered as minor 0
[ 0.821913] omap_i2c 42120000.i2c: bus 0 rev0.12 at 100 kHz
[ 0.828019] i2c-dev: adapter [OMAP I2C adapter] registered as minor 1
[ 0.834686] omap_i2c 40b00000.i2c: bus 1 rev0.12 at 100 kHz
[ 0.840702] i2c-dev: adapter [OMAP I2C adapter] registered as minor 2
[ 0.847367] omap_i2c 40b10000.i2c: bus 2 rev0.12 at 100 kHz
[ 0.853410] i2c-dev: adapter [OMAP I2C adapter] registered as minor 3
[ 0.860239] pca953x 3-0021: supply vcc not found, using dummy regulator
[ 0.867074] pca953x 3-0021: using no AI
[ 0.891883] pca953x 3-0020: supply vcc not found, using dummy regulator
[ 0.898693] pca953x 3-0020: using no AI
[ 0.903334] pca953x 3-0022: supply vcc not found, using dummy regulator
[ 0.910145] pca953x 3-0022: using AI
[ 0.914464] omap_i2c 2000000.i2c: bus 3 rev0.12 at 400 kHz
[ 0.920509] i2c-dev: adapter [OMAP I2C adapter] registered as minor 4
[ 0.927179] omap_i2c 2010000.i2c: bus 4 rev0.12 at 400 kHz
[ 0.933618] ti-sci-intr 42200000.interrupt-controller: Interrupt Router 125 domain created
[ 0.942173] ti-sci-intr bus@100000:interrupt-controller@a00000: Interrupt Router 148 domain created
[ 0.951510] ti-sci-intr 310e0000.interrupt-controller: Interrupt Router 227 domain created
[ 0.960114] ti-sci-inta 33d00000.msi-controller: Interrupt Aggregator domain 265 created
[ 0.968709] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 0.976377] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 0.984655] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 0.992932] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 1.001755] j721e-pcie 2910000.pcie: Failed to init phy
[ 1.008014] k3-ringacc 2b800000.ringacc: Ring Accelerator probed rings:286, gp-rings[96,20] sci-dev-id:272
[ 1.017903] k3-ringacc 2b800000.ringacc: dma-ring-reset-quirk: disabled
[ 1.024663] k3-ringacc 2b800000.ringacc: RA Proxy rev. 66349100, num_proxies:64
[ 1.033548] k3-ringacc 3c000000.ringacc: Ring Accelerator probed rings:1024, gp-rings[878,128] sci-dev-id:259
[ 1.043709] k3-ringacc 3c000000.ringacc: dma-ring-reset-quirk: disabled
[ 1.050469] k3-ringacc 3c000000.ringacc: RA Proxy rev. 66349100, num_proxies:64
[ 1.058162] omap8250 40a00000.serial: failed to get alias
[ 1.064288] printk: console [ttyS2] disabled
[ 1.068689] 2880000.serial: ttyS2 at MMIO 0x2880000 (irq = 27, base_baud = 3000000) is a 8250
[ 1.077437] printk: console [ttyS2] enabled
[ 1.077437] printk: console [ttyS2] enabled
[ 1.085874] printk: bootconsole [ns16550a0] disabled
[ 1.085874] printk: bootconsole [ns16550a0] disabled
[ 1.101093] davinci_mdio 46000f00.mdio: Configuring MDIO in manual mode
[ 1.147346] davinci_mdio 46000f00.mdio: davinci mdio revision 9.7, bus freq 1000000
[ 1.156051] davinci_mdio 46000f00.mdio: phy[0]: device 46000f00.mdio:00, driver TI DP83867
[ 1.164351] am65-cpsw-nuss 46000000.ethernet: initializing am65 cpsw nuss version 0x6BA02102, cpsw version 0x6BA82102 Ports: 2 quirks:00000000
[ 1.177204] am65-cpsw-nuss 46000000.ethernet: initialized cpsw ale version 1.4
[ 1.184411] am65-cpsw-nuss 46000000.ethernet: ALE Table size 64
[ 1.190714] am65-cpsw-nuss 46000000.ethernet: CPTS ver 0x4e8a010b, freq:500000000, add_val:1 pps:0
[ 1.200885] am65-cpts 310d0000.cpts: CPTS ver 0x4e8a010c, freq:200000000, add_val:4 pps:0
[ 1.310775] mmc0: CQHCI version 5.10
[ 1.317909] vdd_mmc1: supplied by vsys_3v3
[ 1.323183] omap-mailbox 31f80000.mailbox: omap mailbox rev 0x66fca100
[ 1.330034] omap-mailbox 31f81000.mailbox: omap mailbox rev 0x66fca100
[ 1.336849] omap-mailbox 31f82000.mailbox: omap mailbox rev 0x66fca100
[ 1.343654] omap-mailbox 31f84000.mailbox: omap mailbox rev 0x66fca100
[ 1.350460] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 1.357954] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 1.360335] mmc0: SDHCI controller on 4f80000.mmc [4f80000.mmc] using ADMA 64-bit
[ 1.366035] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 1.381653] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 1.390201] j721e-pcie 2910000.pcie: Failed to init phy
[ 1.396334] ti-udma 285c0000.dma-controller: Channels: 26 (tchan: 13, rchan: 13, gp-rflow: 8)
[ 1.406758] ti-udma 31150000.dma-controller: Channels: 60 (tchan: 30, rchan: 30, gp-rflow: 16)
[ 1.419490] spi-nor spi7.0: s28hs512t (65536 Kbytes)
[ 1.424473] 7 cmdlinepart partitions found on MTD device 47040000.spi.0
[ 1.431083] Creating 7 MTD partitions on "47040000.spi.0":
[ 1.436556] 0x000000000000-0x000000080000 : "ospi.tiboot3"
[ 1.442651] 0x000000080000-0x000000280000 : "ospi.tispl"
[ 1.448466] 0x000000280000-0x000000680000 : "ospi.u-boot"
[ 1.454320] 0x000000680000-0x0000006c0000 : "ospi.env"
[ 1.459885] 0x0000006c0000-0x000000700000 : "ospi.env.backup"
[ 1.466048] 0x000000800000-0x000003fc0000 : "ospi.rootfs"
[ 1.471869] 0x000003fc0000-0x000004000000 : "ospi.phypattern"
[ 1.483452] spi-nor spi8.0: mt25qu512a (65536 Kbytes)
[ 1.489986] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 1.490154] mmc1: CQHCI version 5.10
[ 1.497492] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 1.509149] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 1.517239] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 1.525740] j721e-pcie 2910000.pcie: Failed to init phy
[ 1.531984] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 1.539477] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 1.547562] mmc1: SDHCI controller on 4fb0000.mmc [4fb0000.mmc] using ADMA 64-bit
[ 1.547586] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 1.563122] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 1.571627] j721e-pcie 2910000.pcie: Failed to init phy
[ 1.577641] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 1.585184] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 1.593276] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 1.601434] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 1.609427] mmc1: new ultra high speed DDR50 SDHC card at address aaaa
[ 1.616428] j721e-pcie 2910000.pcie: Failed to init phy
[ 1.616628] mmcblk1: mmc1:aaaa SC16G 14.8 GiB
[ 1.622054] debugfs: Directory 'pd:39' with parent 'pm_genpd' already present!
[ 1.633492] debugfs: Directory 'pd:38' with parent 'pm_genpd' already present!
[ 1.637187] mmcblk1: p1 p2
[ 1.641328] debugfs: Directory 'pd:276' with parent 'pm_genpd' already present!
[ 1.643688] mmcblk1: p2 size 124405760 extends beyond EOD, truncated
[ 1.651324] debugfs: Directory 'pd:154' with parent 'pm_genpd' already present!
[ 1.658549] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 1.672061] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 1.680198] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 1.688312] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 1.697161] j721e-pcie 2910000.pcie: Failed to init phy
[ 1.706227] ALSA device list:
[ 1.709222] No soundcards found.
[ 1.712983] mmc0: Command Queue Engine enabled
[ 1.717443] mmc0: new HS400 MMC card at address 0001
[ 1.722733] mmcblk0: mmc0:0001 S0J56X 14.8 GiB
[ 1.727397] mmcblk0boot0: mmc0:0001 S0J56X partition 1 31.5 MiB
[ 1.733436] mmcblk0boot1: mmc0:0001 S0J56X partition 2 31.5 MiB
[ 1.739466] mmcblk0rpmb: mmc0:0001 S0J56X partition 3 4.00 MiB, chardev (237:0)
[ 1.749900] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 1.757426] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 1.765511] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 1.773594] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 1.782100] j721e-pcie 2910000.pcie: Failed to init phy
[ 1.817840] EXT4-fs (mmcblk1p2): warning: mounting fs with errors, running e2fsck is recommended
[ 1.829917] EXT4-fs (mmcblk1p2): Errors on filesystem, clearing orphan list.
[ 1.829917]
[ 1.838434] EXT4-fs (mmcblk1p2): recovery complete
[ 1.846063] EXT4-fs (mmcblk1p2): mounted filesystem with ordered data mode. Opts: (null)
[ 1.854178] VFS: Mounted root (ext4 filesystem) on device 179:2.
[ 1.868483] devtmpfs: mounted
[ 1.872184] Freeing unused kernel memory: 1792K
[ 1.876829] Run /sbin/init as init process
[ 2.088775] systemd[1]: System time before build time, advancing clock.
[ 2.144170] NET: Registered protocol family 10
[ 2.149186] Segment Routing with IPv6
[ 2.180723] systemd[1]: systemd 244.5+ running in system mode. (+PAM -AUDIT -SELINUX +IMA -APPARMOR -SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN2 -IDN -PCRE2 default-hierarchy=hybrid)
[ 2.202508] systemd[1]: Detected architecture arm64.

Welcome to [1mArago 2021.09[0m!

[ 2.245943] systemd[1]: Set hostname to <j721s2-evm>.
[ 2.455160] systemd[1]: /lib/systemd/system/docker.socket:6: ListenStream= references a path below legacy directory /var/run/, updating /var/run/docker.sock → /run/docker.sock; please update the unit file accordingly.
[ 2.545488] random: systemd: uninitialized urandom read (16 bytes read)
[ 2.552262] systemd[1]: system-getty.slice: unit configures an IP firewall, but the local system does not support BPF/cgroup firewalling.
[ 2.564590] systemd[1]: (This warning is only shown for the first unit using IP firewalling.)
[ 2.574799] systemd[1]: Created slice system-getty.slice.
[[0;32m OK [0m] Created slice [0;1;39msystem-getty.slice[0m.
[ 2.595453] random: systemd: uninitialized urandom read (16 bytes read)
[ 2.602902] systemd[1]: Created slice system-serial\x2dgetty.slice.
[[0;32m OK [0m] Created slice [0;1;39msystem-serial\x2dgetty.slice[0m.
[ 2.623434] random: systemd: uninitialized urandom read (16 bytes read)
[ 2.630761] systemd[1]: Created slice system-syslog\x2dng.slice.
[[0;32m OK [0m] Created slice [0;1;39msystem-syslog\x2dng.slice[0m.
[ 2.652193] systemd[1]: Created slice User and Session Slice.
[[0;32m OK [0m] Created slice [0;1;39mUser and Session Slice[0m.
[ 2.675597] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[[0;32m OK [0m] Started [0;1;39mDispatch Password …ts to Console Directory Watch[0m.
[ 2.699490] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[[0;32m OK [0m] Started [0;1;39mForward Password R…uests to Wall Directory Watch[0m.
[ 2.723489] systemd[1]: Reached target Paths.
[[0;32m OK [0m] Reached target [0;1;39mPaths[0m.
[ 2.739408] systemd[1]: Reached target Remote File Systems.
[[0;32m OK [0m] Reached target [0;1;39mRemote File Systems[0m.
[ 2.759416] systemd[1]: Reached target Slices.
[[0;32m OK [0m] Reached target [0;1;39mSlices[0m.
[ 2.775418] systemd[1]: Reached target Swap.
[[0;32m OK [0m] Reached target [0;1;39mSwap[0m.
[ 2.795033] systemd[1]: Listening on RPCbind Server Activation Socket.
[[0;32m OK [0m] Listening on [0;1;39mRPCbind Server Activation Socket[0m.
[ 2.815464] systemd[1]: Reached target RPC Port Mapper.
[[0;32m OK [0m] Reached target [0;1;39mRPC Port Mapper[0m.
[ 2.839874] systemd[1]: Listening on Process Core Dump Socket.
[[0;32m OK [0m] Listening on [0;1;39mProcess Core Dump Socket[0m.
[ 2.863581] systemd[1]: Listening on initctl Compatibility Named Pipe.
[[0;32m OK [0m] Listening on [0;1;39minitctl Compatibility Named Pipe[0m.
[ 2.897796] systemd[1]: Condition check resulted in Journal Audit Socket being skipped.
[ 2.906232] systemd[1]: Listening on Journal Socket (/dev/log).
[[0;32m OK [0m] Listening on [0;1;39mJournal Socket (/dev/log)[0m.
[ 2.927727] systemd[1]: Listening on Journal Socket.
[[0;32m OK [0m] Listening on [0;1;39mJournal Socket[0m.
[ 2.943773] systemd[1]: Listening on Network Service Netlink Socket.
[[0;32m OK [0m] Listening on [0;1;39mNetwork Service Netlink Socket[0m.
[ 2.973502] systemd[1]: Listening on udev Control Socket.
[[0;32m OK [0m] Listening on [0;1;39mudev Control Socket[0m.
[ 2.995598] systemd[1]: Listening on udev Kernel Socket.
[[0;32m OK [0m] Listening on [0;1;39mudev Kernel Socket[0m.
[ 3.017962] systemd[1]: Mounting Huge Pages File System...
Mounting [0;1;39mHuge Pages File System[0m...
[ 3.037951] systemd[1]: Mounting POSIX Message Queue File System...
Mounting [0;1;39mPOSIX Message Queue File System[0m...
[ 3.061929] systemd[1]: Mounting Kernel Debug File System...
Mounting [0;1;39mKernel Debug File System[0m...
[ 3.084597] systemd[1]: Mounting Temporary Directory (/tmp)...
Mounting [0;1;39mTemporary Directory (/tmp)[0m...
[ 3.102230] systemd[1]: Starting Create list of static device nodes for the current kernel...
Starting [0;1;39mCreate list of st…odes for the current kernel[0m...
[ 3.130204] systemd[1]: Starting Start psplash boot splash screen...
Starting [0;1;39mStart psplash boot splash screen[0m...
[ 3.157317] systemd[1]: Starting RPC Bind...
Starting [0;1;39mRPC Bind[0m...
[ 3.171623] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.
[ 3.184126] systemd[1]: Starting Journal Service...
Starting [0;1;39mJournal Service[0m...
[ 3.208386] systemd[1]: Starting Load Kernel Modules...
Starting [0;1;39mLoad Kernel Modules[0m...
[ 3.228267] systemd[1]: Starting Remount Root and Kernel File Systems...
Starting [0;1;39mRemount Root and Kernel File Systems[0m...
[ 3.250186] EXT4-fs (mmcblk1p2): re-mounted. Opts: (null)
[ 3.252495] cryptodev: loading out-of-tree module taints kernel.
[ 3.263893] cryptodev: driver 1.10 loaded.
[ 3.265254] systemd[1]: Starting udev Coldplug all Devices...
Starting [0;1;39mudev Coldplug all Devices[0m...
[ 3.286794] systemd[1]: Started RPC Bind.
[[0;32m OK [0m] Started [0;1;39mRPC Bind[0m.
[ 3.299928] systemd[1]: Started Journal Service.
[[0;32m OK [0m] Started [0;1;39mJournal Service[0m.
[[0;32m OK [0m] Mounted [0;1;39mHuge Pages File System[0m.
[[0;32m OK [0m] Mounted [0;1;39mPOSIX Message Queue File System[0m.
[[0;32m OK [0m] Mounted [0;1;39mKernel Debug File System[0m.
[[0;32m OK [0m] Mounted [0;1;39mTemporary Directory (/tmp)[0m.
[[0;32m OK [0m] Started [0;1;39mCreate list of sta… nodes for the current kernel[0m.
[[0;1;31mFAILED[0m] Failed to start [0;1;39mStart psplash boot splash screen[0m.
See 'systemctl status psplash-start.service' for details.
[[0;1;38;5;185mDEPEND[0m] Dependency failed for [0;1;39mStar…progress communication helper[0m.
[[0;32m OK [0m] Started [0;1;39mLoad Kernel Modules[0m.
[[0;32m OK [0m] Started [0;1;39mRemount Root and Kernel File Systems[0m.
Mounting [0;1;39mKernel Configuration File System[0m...
Starting [0;1;39mFlush Journal to Persistent Storage[0m...
[ 3.524011] systemd-journald[159]: Received client request to flush runtime journal.
Starting [0;1;39mApply Kernel Variables[0m...
[ 3.551758] random: systemd: uninitialized urandom read (16 bytes read)
Starting [0;1;39mCreate Static Device Nodes in /dev[0[ 3.563993] random: systemd-journal: uninitialized urandom read (16 bytes read)
m...
[[0;32m OK [0m] Mounted [0;1;39mKernel Configuration File System[0m.
[[0;32m OK [0m] Started [0;1;39mFlush Journal to Persistent Storage[0m.
[[0;32m OK [0m] Started [0;1;39mApply Kernel Variables[0m.
[[0;32m OK [0m] Started [0;1;39mCreate Static Device Nodes in /dev[0m.
[[0;32m OK [0m] Started [0;1;39mudev Coldplug all Devices[0m.
[ 3.684044] random: systemd: uninitialized urandom read (16 bytes read)
[[0;32m OK [0m] Reached target [0;1;39mLocal File Systems (Pre)[0m.
Mounting [0;1;39m/media/ram[0m...
Mounting [0;1;39m/var/volatile[0m...
Starting [0;1;39mudev Wait for Complete Device Initialization[0m...
Starting [0;1;39mudev Kernel Device Manager[0m...
[[0;32m OK [0m] Mounted [0;1;39m/media/ram[0m.
[[0;32m OK [0m] Mounted [0;1;39m/var/volatile[0m.
Starting [0;1;39mLoad/Save Random Seed[0m...
[[0;32m OK [0m] Reached target [0;1;39mLocal File Systems[0m.
Starting [0;1;39mCreate Volatile Files and Directories[0m...
[[0;32m OK [0m] Started [0;1;39mCreate Volatile Files and Directories[0m.
[[0;32m OK [0m] Started [0;1;39mudev Kernel Device Manager[0m.
Starting [0;1;39mNetwork Time Synchronization[0m...
Starting [0;1;39mUpdate UTMP about System Boot/Shutdown[0m...
[[0;32m OK [0m] Started [0;1;39mUpdate UTMP about System Boot/Shutdown[0m.
[[0;32m OK [0m] Started [0;1;39mNetwork Time Synchronization[0m.
[[0;32m OK [0m] Reached target [0;1;39mSystem Time Set[0m.
[[0;32m OK [0m] Reached target [0;1;39mSystem Time Synchronized[0m.
[ 4.136245] random: crng init done
[ 4.137016] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 4.139713] random: 67 urandom warning(s) missed due to ratelimiting
[ 4.151398] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[[0;32m OK [0m] Started [0;1;39mLoad/Save Random Seed[0m.[ 4.167438] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000

[ 4.180505] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 4.215787] j721e-pcie 2910000.pcie: Failed to init phy
[ 4.222917] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 4.235169] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 4.247513] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 4.256152] CAN device driver interface
[ 4.260031] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 4.271730] j721e-pcie 2910000.pcie: Failed to init phy
[ 4.280403] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 4.290757] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 4.300648] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 4.309912] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 4.321630] j721e-pcie 2910000.pcie: Failed to init phy
[ 4.380566] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 4.389459] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 4.399418] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 4.409106] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 4.418226] cdns_dsi: disagrees about version of symbol of_drm_find_bridge
[ 4.419532] j721e-pcie 2910000.pcie: Failed to init phy
[ 4.507412] cdns_dsi: Unknown symbol of_drm_find_bridge (err -22)
[ 4.544799] k3-dsp-rproc 64800000.dsp: assigned reserved memory node vision-apps-c71-dma-memory@b0000000
[ 4.571151] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 4.575855] cdns_dsi: disagrees about version of symbol drm_bridge_add
[ 4.583397] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 4.592266] cdns_dsi: Unknown symbol drm_bridge_add (err -22)
[ 4.595605] cdns_mhdp8546: disagrees about version of symbol drm_bridge_add
[ 4.606011] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 4.614215] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 4.618053] cdns_dsi: disagrees about version of symbol of_drm_find_panel
[ 4.625523] k3-dsp-rproc 64800000.dsp: configured DSP for IPC-only mode
[ 4.629301] cdns_mhdp8546: Unknown symbol drm_bridge_add (err -22)
[ 4.630130] cdns_mhdp8546: disagrees about version of symbol drm_dp_dpcd_read
[ 4.636280] j721e-pcie 2910000.pcie: Failed to init phy
[ 4.642130] cdns_dsi: Unknown symbol of_drm_find_panel (err -22)
[ 4.668828] PVR_K: 201: Read BVNC 36.53.104.796 from HW device registers
[ 4.668901] cdns_mhdp8546: Unknown symbol drm_dp_dpcd_read (err -22)
[ 4.687834] m_can_platform 26a1000.can: m_can device registered (irq=40, version=32)
[ 4.699867] remoteproc remoteproc0: 64800000.dsp is available
[ 4.703526] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 4.705694] remoteproc remoteproc0: attaching to 64800000.dsp
[ 4.719478] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 4.722034] remoteproc remoteproc0: unsupported resource 65538
[ 4.733541] k3-dsp-rproc 64800000.dsp: DSP initialized in IPC-only mode
[ 4.735372] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 4.740163] remoteproc0#vdev0buffer: assigned reserved memory node vision-apps-c71-dma-memory@b0000000
[ 4.759453] PVR_K: 201: RGX Device registered BVNC 36.53.104.796 with 1 core in the system
[ 4.761563] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 4.783867] [drm] Initialized pvr 1.15.6133109 20170530 for 4e20000000.gpu on minor 0
[ 4.787764] j721e-pcie 2910000.pcie: Failed to init phy
[ 4.804732] platform 41000000.r5f: R5F core may have been powered on by a different host, programmed state (0) != actual state (1)
[ 4.819938] m_can_platform 40528000.can: m_can device registered (irq=19, version=32)
[ 4.828700] cdns_mhdp8546: disagrees about version of symbol drm_bridge_remove
[ 4.836167] cdns_mhdp8546: Unknown symbol drm_bridge_remove (err -22)
[ 4.838053] m_can_platform 40568000.can: m_can device registered (irq=21, version=32)
[ 4.843201] cdns_mhdp8546: disagrees about version of symbol drm_connector_attach_encoder
[ 4.861863] m_can_platform 2731000.can: m_can device registered (irq=36, version=32)
[ 4.874271] m_can_platform 2751000.can: m_can device registered (irq=38, version=32)
[ 4.884056] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 4.892323] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 4.900487] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 4.911282] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 4.919977] j721e-pcie 2910000.pcie: Failed to init phy
[ 4.932902] virtio_rpmsg_bus virtio0: rpmsg host is online
[ 4.987554] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0xd
[ 5.063874] cdns_dsi: disagrees about version of symbol drm_panel_bridge_remove
[ 5.071559] cdns_mhdp8546: Unknown symbol drm_connector_attach_encoder (err -22)
[ 5.097258] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 5.106726] remoteproc0#vdev0buffer: registered virtio0 (type 7)
[ 5.112870] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 5.120975] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 5.139150] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 5.148229] cdns_dsi: Unknown symbol drm_panel_bridge_remove (err -22)
[ 5.155244] j721e-pcie 2910000.pcie: Failed to init phy
[ 5.167396] platform 41000000.r5f: configured R5F for IPC-only mode
[ 5.194413] remoteproc remoteproc0: remote processor 64800000.dsp is now attached
[ 5.203093] cdns_mhdp8546: disagrees about version of symbol drm_atomic_get_new_connector_for_encoder
[ 5.223597] platform 41000000.r5f: assigned reserved memory node vision-apps-r5f-dma-memory@a0000000
[ 5.251458] cdns_mhdp8546: Unknown symbol drm_atomic_get_new_connector_for_encoder (err -22)
[ 5.251607] cdns_dsi: disagrees about version of symbol drm_bridge_remove
[ 5.268143] remoteproc remoteproc1: 41000000.r5f is available
[ 5.276156] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 5.287470] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 5.295645] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 5.313215] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 5.321787] k3-dsp-rproc 65800000.dsp: assigned reserved memory node vision-apps-c71_1-dma-memory@b6000000
[ 5.331859] j721e-pcie 2910000.pcie: Failed to init phy
[ 5.342404] remoteproc remoteproc1: attaching to 41000000.r5f
[ 5.365661] platform 41000000.r5f: R5F core initialized in IPC-only mode
[ 5.379799] k3-dsp-rproc 65800000.dsp: configured DSP for IPC-only mode
[ 5.394163] remoteproc1#vdev0buffer: assigned reserved memory node vision-apps-r5f-dma-memory@a0000000
[ 5.419467] remoteproc remoteproc2: 65800000.dsp is available
[ 5.427414] remoteproc remoteproc2: attaching to 65800000.dsp
[ 5.427760] cdns_mhdp8546: disagrees about version of symbol drm_dp_aux_init
[ 5.434018] virtio_rpmsg_bus virtio1: rpmsg host is online
[ 5.440908] cdns_dsi: Unknown symbol drm_bridge_remove (err -22)
[ 5.445768] virtio_rpmsg_bus virtio1: creating channel ti.ipc4.ping-pong addr 0xd
[ 5.460518] remoteproc remoteproc2: unsupported resource 65538
[ 5.466572] virtio_rpmsg_bus virtio1: creating channel rpmsg_chrdev addr 0xe
[ 5.475879] cdns_mhdp8546: Unknown symbol drm_dp_aux_init (err -22)
[ 5.477339] k3-dsp-rproc 65800000.dsp: DSP initialized in IPC-only mode
[ 5.490261] remoteproc1#vdev0buffer: registered virtio1 (type 7)
[ 5.496571] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 5.504901] remoteproc remoteproc1: remote processor 41000000.r5f is now attached
[ 5.512512] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 5.515034] cdns_dsi: disagrees about version of symbol drm_panel_bridge_add_typed
[ 5.520688] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 5.543181] remoteproc2#vdev0buffer: assigned reserved memory node vision-apps-c71_1-dma-memory@b6000000
[ 5.552913] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 5.561709] j721e-pcie 2910000.pcie: Failed to init phy
[ 5.577091] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 5.586620] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 5.595537] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 5.604527] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 5.613243] j721e-pcie 2910000.pcie: Failed to init phy
[ 5.621458] platform 5c00000.r5f: configured R5F for IPC-only mode
[ 5.643239] platform 5c00000.r5f: assigned reserved memory node vision-apps-r5f-dma-memory@a2000000
[ 5.661477] virtio_rpmsg_bus virtio2: rpmsg host is online
[ 5.667118] virtio_rpmsg_bus virtio2: creating channel rpmsg_chrdev addr 0xd
[ 5.669097] cdns_mhdp8546: disagrees about version of symbol drm_dp_dpcd_read_link_status
[ 5.682796] cdns_dsi: Unknown symbol drm_panel_bridge_add_typed (err -22)
[ 5.690038] cdns_mhdp8546: Unknown symbol drm_dp_dpcd_read_link_status (err -22)
[ 5.691498] cdns_dsi: disagrees about version of symbol drm_bridge_attach
[ 5.706056] remoteproc remoteproc3: 5c00000.r5f is available
[ 5.713800] remoteproc remoteproc3: attaching to 5c00000.r5f
[ 5.719696] platform 5c00000.r5f: R5F core initialized in IPC-only mode
[ 5.727817] remoteproc3#vdev0buffer: assigned reserved memory node vision-apps-r5f-dma-memory@a2000000
[ 5.739326] virtio_rpmsg_bus virtio3: rpmsg host is online
[ 5.745350] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 5.747575] remoteproc2#vdev0buffer: registered virtio2 (type 7)
[ 5.752907] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 5.758985] virtio_rpmsg_bus virtio3: creating channel rpmsg_chrdev addr 0xd
[ 5.767039] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 5.785562] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 5.794111] remoteproc remoteproc2: remote processor 65800000.dsp is now attached
[ 5.801749] remoteproc3#vdev0buffer: registered virtio3 (type 7)
[ 5.802028] cdns_mhdp8546: disagrees about version of symbol drm_atomic_helper_connector_destroy_state
[ 5.817242] j721e-pcie 2910000.pcie: Failed to init phy
[ 5.820215] cdns_dsi: Unknown symbol drm_bridge_attach (err -22)
[ 5.823654] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 5.836033] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 5.844192] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 5.852352] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 5.860975] j721e-pcie 2910000.pcie: Failed to init phy
[ 5.870795] remoteproc remoteproc3: remote processor 5c00000.r5f is now attached
[ 5.883011] cdns_mhdp8546: Unknown symbol drm_atomic_helper_connector_destroy_state (err -22)
[ 5.893732] cdns_mhdp8546: disagrees about version of symbol drm_connector_init
[ 5.903864] cdns_mhdp8546: Unknown symbol drm_connector_init (err -22)
[ 5.910760] cdns_mhdp8546: disagrees about version of symbol drm_add_edid_modes
[ 5.925834] cdns_mhdp8546: Unknown symbol drm_add_edid_modes (err -22)
[ 5.940487] cdns_mhdp8546: disagrees about version of symbol drm_connector_update_edid_property
[ 5.943543] platform 5d00000.r5f: configured R5F for IPC-only mode
[ 5.967561] cdns_mhdp8546: Unknown symbol drm_connector_update_edid_property (err -22)
[ 6.009642] cdns_mhdp8546: disagrees about version of symbol drm_atomic_helper_connector_duplicate_state
[ 6.037721] platform 5d00000.r5f: assigned reserved memory node vision-apps-r5f-dma-memory@a4000000
[ 6.047978] cdns_dsi: disagrees about version of symbol of_drm_find_bridge
[ 6.055018] cdns_mhdp8546: Unknown symbol drm_atomic_helper_connector_duplicate_state (err -22)
[ 6.065926] cdns_dsi: Unknown symbol of_drm_find_bridge (err -22)
[ 6.088428] cdns_dsi: disagrees about version of symbol drm_bridge_add
[ 6.099566] cdns_mhdp8546: disagrees about version of symbol __drm_atomic_helper_bridge_duplicate_state
[ 6.109680] cdns_dsi: Unknown symbol drm_bridge_add (err -22)
[ 6.121465] cdns_mhdp8546: Unknown symbol __drm_atomic_helper_bridge_duplicate_state (err -22)
[ 6.121499] remoteproc remoteproc4: 5d00000.r5f is available
[ 6.132834] cdns_dsi: disagrees about version of symbol of_drm_find_panel
[ 6.203415] cdns_mhdp8546: disagrees about version of symbol drm_do_get_edid
[ 6.210534] cdns_dsi: Unknown symbol of_drm_find_panel (err -22)
[ 6.215422] remoteproc remoteproc4: attaching to 5d00000.r5f
[ 6.279046] platform 5d00000.r5f: R5F core initialized in IPC-only mode
[ 6.285194] cdns_mhdp8546: Unknown symbol drm_do_get_edid (err -22)
[ 6.311579] cdns_dsi: disagrees about version of symbol drm_panel_bridge_remove
[ 6.329636] cdns_mhdp8546: disagrees about version of symbol drm_connector_cleanup
[ 6.337684] cdns_dsi: Unknown symbol drm_panel_bridge_remove (err -22)
[ 6.344246] cdns_mhdp8546: Unknown symbol drm_connector_cleanup (err -22)
[ 6.351285] cdns_dsi: disagrees about version of symbol drm_bridge_remove
[ 6.358433] cdns_dsi: Unknown symbol drm_bridge_remove (err -22)
[ 6.364491] cdns_mhdp8546: disagrees about version of symbol __drm_atomic_helper_bridge_reset
[ 6.373061] cdns_mhdp8546: Unknown symbol __drm_atomic_helper_bridge_reset (err -22)
[ 6.380878] cdns_dsi: disagrees about version of symbol drm_panel_bridge_add_typed
[ 6.388481] cdns_dsi: Unknown symbol drm_panel_bridge_add_typed (err -22)
[ 6.391473] cdns_mhdp8546: disagrees about version of symbol drm_kms_helper_hotplug_event
[ 6.403465] remoteproc4#vdev0buffer: assigned reserved memory node vision-apps-r5f-dma-memory@a4000000
[ 6.427911] cdns_dsi: disagrees about version of symbol drm_bridge_attach
[ 6.434742] cdns_mhdp8546: Unknown symbol drm_kms_helper_hotplug_event (err -22)
[ 6.442160] cdns_dsi: Unknown symbol drm_bridge_attach (err -22)
[ 6.448797] virtio_rpmsg_bus virtio4: rpmsg host is online
[ 6.456648] remoteproc4#vdev0buffer: registered virtio4 (type 7)
[ 6.457610] virtio_rpmsg_bus virtio4: creating channel rpmsg_chrdev addr 0xd
[ 6.462957] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 6.476811] virtio_rpmsg_bus virtio4: creating channel rpmsg_chrdev addr 0x15
[ 6.477403] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 6.485367] virtio_rpmsg_bus virtio4: creating channel ti.ipc4.ping-pong addr 0xe
[ 6.492570] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 6.500762] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0x15
[ 6.511404] cdns_mhdp8546: disagrees about version of symbol drm_helper_probe_single_connector_modes
[ 6.515393] virtio_rpmsg_bus virtio0: creating channel ti.ipc4.ping-pong addr 0xe
[ 6.524388] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 6.531996] virtio_rpmsg_bus virtio2: creating channel rpmsg_chrdev addr 0x15
[ 6.542085] remoteproc remoteproc4: remote processor 5d00000.r5f is now attached
[ 6.547284] virtio_rpmsg_bus virtio2: creating channel ti.ipc4.ping-pong addr 0xe
[ 6.563548] j721e-pcie 2910000.pcie: Failed to init phy
[ 6.564019] virtio_rpmsg_bus virtio3: creating channel rpmsg_chrdev addr 0x15
[ 6.595180] cdns_mhdp8546: Unknown symbol drm_helper_probe_single_connector_modes (err -22)
[ 6.607030] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 6.613575] platform 5e00000.r5f: configured R5F for remoteproc mode
[ 6.617150] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 6.638322] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 6.651504] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 6.662577] cdns_mhdp8546: disagrees about version of symbol drm_atomic_get_new_bridge_state
[ 6.671557] j721e-pcie 2910000.pcie: Failed to init phy
[ 6.683642] platform 5e00000.r5f: assigned reserved memory node vision-apps-r5f-dma-memory@a6000000
[ 6.747420] cdns_mhdp8546: Unknown symbol drm_atomic_get_new_bridge_state (err -22)
[ 6.814531] remoteproc remoteproc5: 5e00000.r5f is available
[ 6.831686] cdns_mhdp8546: disagrees about version of symbol drm_atomic_helper_connector_reset
[ 6.856199] remoteproc remoteproc5: Direct firmware load for j721s2-main-r5f1_0-fw failed with error -2
[ 6.868078] remoteproc remoteproc5: powering up 5e00000.r5f
[ 6.876924] platform 5f00000.r5f: configured R5F for remoteproc mode
[ 6.879412] remoteproc remoteproc5: Direct firmware load for j721s2-main-r5f1_0-fw failed with error -2
[ 6.896867] remoteproc remoteproc5: request_firmware failed: -2
[ 6.935394] cdns_mhdp8546: Unknown symbol drm_atomic_helper_connector_reset (err -22)
[ 6.950381] platform 5f00000.r5f: assigned reserved memory node vision-apps-r5f-dma-memory@a7000000
[ 6.997480] remoteproc remoteproc6: 5f00000.r5f is available
[ 7.009216] remoteproc remoteproc6: Direct firmware load for j721s2-main-r5f1_1-fw failed with error -2
[ 7.020851] remoteproc remoteproc6: powering up 5f00000.r5f
[ 7.026575] remoteproc remoteproc6: Direct firmware load for j721s2-main-r5f1_1-fw failed with error -2
[ 7.032791] cdns_mhdp8546: disagrees about version of symbol drm_connector_set_link_status_property
[ 7.038948] remoteproc remoteproc6: request_firmware failed: -2
[ 7.054681] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 7.062341] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 7.070490] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 7.078698] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 7.088818] j721e-pcie 2910000.pcie: Failed to init phy
[[0;32m OK [0m] Created slice [0;1;39msystem-systemd\x2dfsc[ 7.100391] cdns_mhdp8546: Unknown symbol drm_connector_set_link_status_property (err -22)
k.slice[0m.
[ 7.112208] cdns_mhdp8546: disagrees about version of symbol drm_bridge_hpd_notify
[ 7.120196] virtio_rpmsg_bus virtio3: creating channel ti.ipc4.ping-pong addr 0xe
[ 7.138354] cdns_mhdp8546: Unknown symbol drm_bridge_hpd_notify (err -22)
[ 7.239468] cdns_mhdp8546: disagrees about version of symbol drm_dp_dpcd_write
[ 7.318516] cdns_mhdp8546: Unknown symbol drm_dp_dpcd_write (err -22)
[ 7.381099] usbcore: registered new interface driver usbfs
[ 7.429910] usbcore: registered new interface driver hub
[ 7.437795] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 7.447526] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 7.459473] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 7.470099] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 7.481424] j721e-pcie 2910000.pcie: Failed to init phy
[ 7.487921] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 7.494413] cdns_mhdp8546: disagrees about version of symbol drm_bridge_add
[ 7.499463] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 7.515399] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 7.523546] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 7.532156] j721e-pcie 2910000.pcie: Failed to init phy
[ 7.542268] usbcore: registered new device driver usb
[ 7.596938] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 7.606081] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 7.616137] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 7.627497] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 7.638484] j721e-pcie 2910000.pcie: Failed to init phy
[ 7.642977] cdns_mhdp8546: Unknown symbol drm_bridge_add (err -22)
[ 7.645042] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 7.659932] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 7.677794] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 7.689582] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 7.699706] cdns_mhdp8546: disagrees about version of symbol drm_dp_dpcd_read
[ 7.707303] j721e-pcie 2910000.pcie: Failed to init phy
[ 7.714516] cdns_mhdp8546: Unknown symbol drm_dp_dpcd_read (err -22)
[ 7.721924] cdns_mhdp8546: disagrees about version of symbol drm_bridge_remove
[ 7.729336] j721e-pcie 2910000.pcie: host bridge /bus@100000/pcie@2910000 ranges:
[ 7.733746] cdns_mhdp8546: Unknown symbol drm_bridge_remove (err -22)
[ 7.739745] j721e-pcie 2910000.pcie: IO 0x0018001000..0x0018010fff -> 0x0018001000
[ 7.759435] j721e-pcie 2910000.pcie: MEM 0x0018011000..0x001fffffff -> 0x0018011000
[ 7.771248] j721e-pcie 2910000.pcie: IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[ 7.783926] j721e-pcie 2910000.pcie: Failed to init phy
[ 7.831828] cdns_mhdp8546: disagrees about version of symbol drm_connector_attach_encoder
[ 7.851791] cdns_mhdp8546: Unknown symbol drm_connector_attach_encoder (err -22)
[ 7.861875] cdns_mhdp8546: disagrees about version of symbol drm_atomic_get_new_connector_for_encoder
[ 7.882263] cdns_mhdp8546: Unknown symbol drm_atomic_get_new_connector_for_encoder (err -22)
[[0;32m OK [0m] Found device [0;1;39m/dev/mmcblk1p1[0m.[ 7.892085] cdns_mhdp8546: disagrees about version of symbol drm_dp_aux_init

[ 7.904686] cdns_mhdp8546: Unknown symbol drm_dp_aux_init (err -22)
Starting [0;1;39mFile System Check on /dev/mmcblk1p1[[ 7.917425] cdns_mhdp8546: disagrees about version of symbol drm_dp_dpcd_read_link_status
0m...
[ 7.929332] cdns_mhdp8546: Unknown symbol drm_dp_dpcd_read_link_status (err -22)
[ 7.940139] cdns_mhdp8546: disagrees about version of symbol drm_atomic_helper_connector_destroy_state
[ 7.949528] cdns_mhdp8546: Unknown symbol drm_atomic_helper_connector_destroy_state (err -22)
[ 7.949562] cdns_mhdp8546: disagrees about version of symbol drm_connector_init
[ 7.949564] cdns_mhdp8546: Unknown symbol drm_connector_init (err -22)
[ 7.949574] cdns_mhdp8546: disagrees about version of symbol drm_add_edid_modes
[ 7.949576] cdns_mhdp8546: Unknown symbol drm_add_edid_modes (err -22)
[ 7.949603] cdns_mhdp8546: disagrees about version of symbol drm_connector_update_edid_property
[ 7.949605] cdns_mhdp8546: Unknown symbol drm_connector_update_edid_property (err -22)
[ 7.949612] cdns_mhdp8546: disagrees about version of symbol drm_atomic_helper_connector_duplicate_state
[ 7.949614] cdns_mhdp8546: Unknown symbol drm_atomic_helper_connector_duplicate_state (err -22)
[ 7.949617] cdns_mhdp8546: disagrees about version of symbol __drm_atomic_helper_bridge_duplicate_state
[ 7.949620] cdns_mhdp8546: Unknown symbol __drm_atomic_helper_bridge_duplicate_state (err -22)
[ 7.949626] cdns_mhdp8546: disagrees about version of symbol drm_do_get_edid
[ 7.949628] cdns_mhdp8546: Unknown symbol drm_do_get_edid (err -22)
[ 7.949632] cdns_mhdp8546: disagrees about version of symbol drm_connector_cleanup
[ 7.949634] cdns_mhdp8546: Unknown symbol drm_connector_cleanup (err -22)
[ 7.949650] cdns_mhdp8546: disagrees about version of symbol __drm_atomic_helper_bridge_reset
[ 7.949651] cdns_mhdp8546: Unknown symbol __drm_atomic_helper_bridge_reset (err -22)
[ 7.949660] cdns_mhdp8546: disagrees about version of symbol drm_kms_helper_hotplug_event
[ 7.949662] cdns_mhdp8546: Unknown symbol drm_kms_helper_hotplug_event (err -22)
[ 7.949674] cdns_mhdp8546: disagrees about version of symbol drm_helper_probe_single_connector_modes
[ 7.949677] cdns_mhdp8546: Unknown symbol drm_helper_probe_single_connector_modes (err -22)
[ 7.949680] cdns_mhdp8546: disagrees about version of symbol drm_atomic_get_new_bridge_state
[ 7.949682] cdns_mhdp8546: Unknown symbol drm_atomic_get_new_bridge_state (err -22)
[ 7.949690] cdns_mhdp8546: disagrees about version of symbol drm_atomic_helper_connector_reset
[ 7.949691] cdns_mhdp8546: Unknown symbol drm_atomic_helper_connector_reset (err -22)
[ 7.949694] cdns_mhdp8546: disagrees about version of symbol drm_connector_set_link_status_property
[ 7.949696] cdns_mhdp8546: Unknown symbol drm_connector_set_link_status_property (err -22)
[ 7.949700] cdns_mhdp8546: disagrees about version of symbol drm_bridge_hpd_notify
[ 7.949702] cdns_mhdp8546: Unknown symbol drm_bridge_hpd_notify (err -22)
[ 7.949712] cdns_mhdp8546: disagrees about version of symbol drm_dp_dpcd_write
[ 7.949714] cdns_mhdp8546: Unknown symbol drm_dp_dpcd_write (err -22)
[[0;32m OK [0m] Started [0;1;39mudev Wait for Complete Device Initialization[0m.
[[0;32m OK [0m] Started [0;1;39mHardware RNG Entropy Gatherer Daemon[0m.
[[0;32m OK [0m] Reached target [0;1;39mSystem Initialization[0m.
[[0;32m OK [0m] Started [0;1;39mDaily rotation of log files[0m.
[[0;32m OK [0m] Started [0;1;39mDaily Cleanup of Temporary Directories[0m.
[[0;32m OK [0m] Reached target [0;1;39mTimers[0m.
[[0;32m OK [0m] Listening on [0;1;39mAvahi mDNS/DNS-SD Stack Activation Socket[0m.
[[0;32m OK [0m] Listening on [0;1;39mD-Bus System Message Bus Socket[0m.
Starting [0;1;39mDocker Socket for the API[0m.
[[0;32m OK [0m] Listening on [0;1;39mdropbear.socket[0m.
Starting [0;1;39mReboot and dump vmcore via kexec[0m...
[[0;32m OK [0m] Listening on [0;1;39mDocker Socket for the API[0m.
[[0;32m OK [0m] Reached target [0;1;39mSockets[0m.
[[0;32m OK [0m] Reached target [0;1;39mBasic System[0m.
[[0;32m OK [0m] Started [0;1;39mJob spooling tools[0m.
[[0;32m OK [0m] Started [0;1;39mPeriodic Command Scheduler[0m.
[[0;32m OK [0m] Started [0;1;39mD-Bus System Message Bus[0m.
Starting [0;1;39mEthernet Bridge Filtering Tables[0m...
Starting [0;1;39mPrint notice about GPLv3 packages[0m...
Starting [0;1;39mIPv6 Packet Filtering Framework[0m...
Starting [0;1;39mIPv4 Packet Filtering Framework[0m...
[[0;32m OK [0m] Started [0;1;39mirqbalance daemon[0m.
Starting [0;1;39mTelephony service[0m...
Starting [0;1;39mrc.pvr.service[0m...
Starting [0;1;39mSystem Logger Daemon "default" instance[0m...
Starting [0;1;39mLogin Service[0m...
[[0;32m OK [0m] Started [0;1;39mTEE Supplicant[0m.
[[0;32m OK [0m] Started [0;1;39mEthernet Bridge Filtering Tables[0m.
[[0;32m OK [0m] Started [0;1;39mFile System Check on /dev/mmcblk1p1[0m.
[[0;32m OK [0m] Started [0;1;39mReboot and dump vmcore via kexec[0m.
[[0;32m OK [0m] Started [0;1;39mIPv6 Packet Filtering Framework[0m.
[[0;32m OK [0m] Started [0;1;39mIPv4 Packet Filtering Framework[0m.
[[0;32m OK [0m] Started [0;1;39mTelephony service[0m.
[[0;32m OK [0m] Reached target [0;1;39mNetwork (Pre)[0m.
Mounting [0;1;39m/run/media/mmcblk1p1[0m...
Starting [0;1;39mNetwork Service[0m...
[ 8.733180] Bluetooth: Core ver 2.22
[[0;32m OK [0m] Listening on [0;1;39mLoad/Save RF …itch Status /dev/rfkill Watch[0m.
[ 8.743486] NET: Registered protocol family 31
[ 8.749561] Bluetooth: HCI device and connection manager initialized
[ 8.759395] Bluetooth: HCI socket layer initialized
[ 8.764378] Bluetooth: L2CAP socket layer initialized
[ 8.769474] Bluetooth: SCO socket layer initialized
[[0;32m OK [0m] Mounted [0;1;39m/run/media/mmcblk1p1[0m.
[[0;32m OK [0m] Started [0;1;39mLogin Service[0m.
[[0;32m OK [0m] Started [0;1;39mNetwork Service[0m.
Starting [0;1;39mWait for Network to be Configured[0m...
Starting [0;1;39mNetwork Name Resolution[0m...
[[0;32m OK [0m] Started [0;1;39mrc.pvr.service[0m.
Starting [0;1;39mweston.service[0m...
[ 8.999429] am65-cpsw-nuss 46000000.ethernet: down msc_sl f0000000 tmo 0
[[0;32m OK [0m] Started [0;1;39mSystem Logger Daemon "default" instance[0m.
[ 9.044195] am65-cpsw-nuss 46000000.ethernet: set new flow-id-base 48
[ 9.105949] am65-cpsw-nuss 46000000.ethernet eth0: PHY [46000f00.mdio:00] driver [TI DP83867] (irq=POLL)
[ 9.131658] am65-cpsw-nuss 46000000.ethernet eth0: configuring for phy/rgmii-rxid link mode
[[0;32m OK [0m] Started [0;1;39mNetwork Name Resolution[0m.
[[0;32m OK [0m] Reached target [0;1;39mNetwork[0m.
[[0;32m OK [0m] Reached target [0;1;39mHost and Network Name Lookups[0m.
Starting [0;1;39mAvahi mDNS/DNS-SD Stack[0m...
Starting [0;1;39mEnable and configure wl18xx bluetooth stack[0m...
[[0;32m OK [0m] Started [0;1;39mNFS status monitor for NFSv2/3 locking.[0m.
Starting [0;1;39mSimple Network Ma…ent Protocol (SNMP) Daemon.[0m...
Starting [0;1;39mPermit User Sessions[0m...
[[0;32m OK [0m] Started [0;1;39mVsftpd ftp daemon[0m.
[[0;32m OK [0m] Started [0;1;39mPermit User Sessions[0m.
[[0;32m OK [0m] Started [0;1;39mEnable and configure wl18xx bluetooth stack[0m.
[[0;32m OK [0m] Started [0;1;39mGetty on tty1[0m.
[[0;32m OK [0m] Started [0;1;39mSerial Getty on ttyS2[0m.
[[0;32m OK [0m] Reached target [0;1;39mLogin Prompts[0m.
Starting [0;1;39mSynchronize System and HW clocks[0m...
[[0;1;31mFAILED[0m] Failed to start [0;1;39mSynchronize System and HW clocks[0m.
See 'systemctl status sync-clocks.service' for details.
[[0;32m OK [0m] Started [0;1;39mAvahi mDNS/DNS-SD Stack[0m.
[[0;32m OK [0m] Started [0;1;39mSimple Network Man…ement Protocol (SNMP) Daemon.[0m.
***************************************************************
***************************************************************
NOTICE: This file system contains the following GPLv3 packages:
autoconf
bash-dev
bash
bc
binutils
cifs-utils
coreutils-stdbuf
coreutils
cpio
cpp-symlinks
cpp
dosfstools
elfutils
g++-symlinks
g++
gawk
gcc-symlinks
gcc
gdb
gdbserver
gettext
glmark2
gstreamer1.0-libav-dev
gstreamer1.0-libav
gzip
less
libasm1
libbfd
libdw1
libelf1
libgdbm-compat4
libgdbm-dev
libgdbm6
libgettextlib
libgettextsrc
libgmp-dev
libgmp10
libgmpxx4
libidn2-0
libidn2-dev
libmpc3
libmpfr6
libreadline-dev
libreadline8
libunistring-dev
libunistring2
m4-dev
m4
make
nettle-dev
nettle
parted
python3-rfc3987
python3-strict-rfc3339
tar
which
zeromq

If you do not wish to distribute GPLv3 components please remove
the above packages prior to distribution. This can be done using
the opkg remove command. i.e.:
opkg remove <package>
Where <package> is the name printed in the list above

NOTE: If the package is a dependency of another package you
will be notified of the dependent packages. You should
use the --force-removal-of-dependent-packages option to
also remove the dependent packages as well
***************************************************************
***************************************************************
[[0;32m OK [0m] Started [0;1;39mPrint notice about GPLv3 packages[0m.
[[0;32m OK [0m] Started [0;1;39mweston.service[0m.
Starting [0;1;39mtelnetd.service[0m...
[[0;32m OK [0m] Started [0;1;39mtelnetd.service[0m.
Starting [0;1;39msyslog.service[0m...
[[0;32m OK [0m] Started [0;1;39msyslog.service[0m.
[ 12.301213] PVR_K: 1051: RGX Firmware image 'rgx.fw.36.53.104.796' loaded
[ 12.333752] PVR_K: 1051: Shader binary image 'rgx.sh.36.53.104.796' loaded
[ 13.244361] am65-cpsw-nuss 46000000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[ 13.253078] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Starting [0;1;39mHostname Service[0m...
[[0;32m OK [0m] Started [0;1;39mHostname Service[0m.
[ 13.690030] PVR_K:(Error): 105: RGXSafetyEventHandler: Safety Watchdog Trigger ! [358]

_____ _____ _ _
| _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_
| | _| .'| . | . | | __| _| . | | | -_| _| _|
|__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_|
|___| |___|

Arago Project j721s2-evm ttyS2

Arago 2021.09 j721s2-evm ttyS2

j721s2-evm login: root
7[r[999;999H[6n8root@j721s2-evm:~# cd ./ /opt/vision_apps/
root@j721s2-evm:/opt/vision_apps# source ./vision_apps_init.sh
root@j721s2-evm:/opt/vision_apps# [ 27.948217] Initializing XFRM netlink socket
[MCU2_0] 4.649442 s: CIO: Init ... Done !!!
[MCU2_0] 4.649494 s: ### CPU Frequency = 1000000000 Hz
[MCU2_0] 4.649525 s: CPU is running FreeRTOS
[MCU2_0] 4.649545 s: APP: Init ... !!!
[MCU2_0] 4.649563 s: SCICLIENT: Init ... !!!
[MCU2_0] 4.649706 s: SCICLIENT: DMSC FW version [8.5.2--v08.05.02 (Chill Capybar]
[MCU2_0] 4.649741 s: SCICLIENT: DMSC FW revision 0x8
[MCU2_0] 4.649768 s: SCICLIENT: DMSC FW ABI revision 3.1
[MCU2_0] 4.649798 s: SCICLIENT: Init ... Done !!!
[MCU2_0] 4.649821 s: UDMA: Init ... !!!
[MCU2_0] 4.650680 s: UDMA: Init ... Done !!!
[MCU2_0] 4.650712 s: UDMA: Init ... !!!
[MCU2_0] 4.651190 s: UDMA: Init for CSITX/CSIRX ... Done !!!
[MCU2_0] 4.651225 s: MEM: Init ... !!!
[MCU2_0] 4.651257 s: MEM: Created heap (DDR_LOCAL_MEM, id=0, flags=0x00000004) @ d9000000 of size 16777216 bytes !!!
[MCU2_0] 4.651314 s: MEM: Init ... Done !!!
[MCU2_0] 4.651335 s: IPC: Init ... !!!
[MCU2_0] 4.651378 s: IPC: 5 CPUs participating in IPC !!!
[MCU2_0] 4.651413 s: IPC: Waiting for HLOS to be ready ... !!!
[MCU2_0] 12.678303 s: IPC: HLOS is ready !!!
[MCU2_0] 12.687521 s: IPC: Init ... Done !!!
[MCU2_0] 12.687561 s: APP: Syncing with 4 CPUs ... !!!
[MCU2_0] 13.397092 s: APP: Syncing with 4 CPUs ... Done !!!
[MCU2_0] 13.397126 s: REMOTE_SERVICE: Init ... !!!
[MCU2_0] 13.398419 s: REMOTE_SERVICE: Init ... Done !!!
[MCU2_0] 13.398457 s: FVID2: Init ... !!!
[MCU2_0] 13.398507 s: FVID2: Init ... Done !!!
[MCU2_0] 13.398532 s: SCICLIENT: Sciclient_pmSetModuleState module=219 state=2
[MCU2_0] 13.398649 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 13.398692 s: DSS: Init ... !!!
[MCU2_0] 13.398713 s: DSS: Display type is eDP !!!
[MCU2_0] 13.398735 s: DSS: M2M Path is enabled !!!
[MCU2_0] 13.398758 s: DSS: SoC init ... !!!
[MCU2_0] 13.398778 s: SCICLIENT: Sciclient_pmSetModuleState module=158 state=0
[MCU2_0] 13.398937 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 13.398964 s: SCICLIENT: Sciclient_pmSetModuleState module=365 state=2
[MCU2_0] 13.399160 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 13.399191 s: SCICLIENT: Sciclient_pmSetModuleState module=156 state=2
[MCU2_0] 13.399317 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 13.399344 s: SCICLIENT: Sciclient_pmSetModuleState module=365 state=2
[MCU2_0] 13.399460 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 13.399485 s: SCICLIENT: Sciclient_pmSetModuleState module=156 state=2
[MCU2_0] 13.399578 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 13.399604 s: SCICLIENT: Sciclient_pmSetModuleState module=158 state=0
[MCU2_0] 13.399686 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 13.399712 s: SCICLIENT: Sciclient_pmSetModuleClkFreq module=158 clk=3 freq=148500000
[MCU2_0] 13.400710 s: SCICLIENT: Sciclient_pmSetModuleClkFreq success
[MCU2_0] 13.400738 s: SCICLIENT: Sciclient_pmModuleClkRequest module=158 clk=3 state=2 flag=2
[MCU2_0] 13.400896 s: SCICLIENT: Sciclient_pmModuleClkRequest success
[MCU2_0] 13.400922 s: SCICLIENT: Sciclient_pmSetModuleState module=158 state=2
[MCU2_0] 13.401096 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 13.401121 s: DSS: SoC init ... Done !!!
[MCU2_0] 13.401143 s: DSS: Board init ... !!!
[MCU2_0] 13.401163 s: DSS: Turning on DP_PWR pin for eDP adapters ... !!!
[MCU2_0] 13.947043 s: DSS: Turning on DP_PWR pin for eDP adapters ... Done!!!
[MCU2_0] 13.947084 s: DSS: Board init ... Done !!!
[MCU2_0] 13.999315 s: DSS: Init ... Done !!!
[MCU2_0] 13.999365 s: VHWA: VPAC Init ... !!!
[MCU2_0] 13.999411 s: SCICLIENT: Sciclient_pmSetModuleState module=361 state=2
[MCU2_0] 13.999552 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 13.999583 s: VHWA: LDC Init ... !!!
[MCU2_0] 14.001468 s: VHWA: LDC Init ... Done !!!
[MCU2_0] 14.001506 s: VHWA: MSC Init ... !!!
[MCU2_0] 14.009544 s: VHWA: MSC Init ... Done !!!
[MCU2_0] 14.009579 s: VHWA: NF Init ... !!!
[MCU2_0] 14.010510 s: VHWA: NF Init ... Done !!!
[MCU2_0] 14.010541 s: VHWA: VISS Init ... !!!
[MCU2_0] 14.017451 s: VHWA: VISS Init ... Done !!!
[MCU2_0] 14.017495 s: VHWA: VPAC Init ... Done !!!
[MCU2_0] 14.017529 s: VX_ZONE_INIT:Enabled
[MCU2_0] 14.017552 s: VX_ZONE_ERROR:Enabled
[MCU2_0] 14.017573 s: VX_ZONE_WARNING:Enabled
[MCU2_0] 14.018442 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target MCU2-0
[MCU2_0] 14.018631 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_NF
[MCU2_0] 14.018800 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_LDC1
[MCU2_0] 14.018970 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_MSC1
[MCU2_0] 14.019141 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_MSC2
[MCU2_0] 14.019377 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_VISS1
[MCU2_0] 14.019578 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE1
[MCU2_0] 14.019770 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE2
[MCU2_0] 14.019959 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DISPLAY1
[MCU2_0] 14.020157 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DISPLAY2
[MCU2_0] 14.020332 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CSITX
[MCU2_0] 14.020535 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE3
[MCU2_0] 14.020727 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE4
[MCU2_0] 14.020925 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE5
[MCU2_0] 14.021130 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE6
[MCU2_0] 14.021337 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE7
[MCU2_0] 14.021540 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE8
[MCU2_0] 14.021719 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DSS_M2M1
[MCU2_0] 14.021891 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DSS_M2M2
[MCU2_0] 14.022077 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DSS_M2M3
[MCU2_0] 14.022249 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DSS_M2M4
[MCU2_0] 14.022418 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CSITX2
[MCU2_0] 14.022459 s: VX_ZONE_INIT:[tivxInitLocal:145] Initialization Done !!!
[MCU2_0] 14.022487 s: APP: OpenVX Target kernel init ... !!!
[MCU2_0] 14.049112 s: APP: OpenVX Target kernel init ... Done !!!
[MCU2_0] 14.049147 s: CSI2RX: Init ... !!!
[MCU2_0] 14.049167 s: SCICLIENT: Sciclient_pmSetModuleState module=136 state=2
[MCU2_0] 14.049259 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.049286 s: SCICLIENT: Sciclient_pmSetModuleState module=38 state=2
[MCU2_0] 14.049400 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.049426 s: SCICLIENT: Sciclient_pmSetModuleState module=39 state=2
[MCU2_0] 14.049503 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.049540 s: SCICLIENT: Sciclient_pmSetModuleState module=152 state=2
[MCU2_0] 14.049602 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.049627 s: SCICLIENT: Sciclient_pmSetModuleState module=153 state=2
[MCU2_0] 14.049691 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.049835 s: CSI2RX: Init ... Done !!!
[MCU2_0] 14.049861 s: CSI2TX: Init ... !!!
[MCU2_0] 14.049881 s: SCICLIENT: Sciclient_pmSetModuleState module=136 state=2
[MCU2_0] 14.049942 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.049968 s: SCICLIENT: Sciclient_pmSetModuleState module=40 state=2
[MCU2_0] 14.050045 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.050071 s: SCICLIENT: Sciclient_pmSetModuleState module=41 state=2
[MCU2_0] 14.050154 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.050179 s: SCICLIENT: Sciclient_pmSetModuleState module=364 state=2
[MCU2_0] 14.050260 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.050284 s: SCICLIENT: Sciclient_pmSetModuleState module=363 state=2
[MCU2_0] 14.050344 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 14.050410 s: CSI2TX: Init ... Done !!!
[MCU2_0] 14.050435 s: ISS: Init ... !!!
[MCU2_0] 14.050460 s: Found sensor IMX390-UB953_D3 at location 0
[MCU2_0] 14.050493 s: Found sensor AR0233-UB953_MARS at location 1
[MCU2_0] 14.050523 s: Found sensor AR0820-UB953_LI at location 2
[MCU2_0] 14.050553 s: Found sensor AR0341-UB953_MARS at location 3
[MCU2_0] 14.050582 s: Found sensor UB9xxx_RAW12_TESTPATTERN at location 4
[MCU2_0] 14.050613 s: Found sensor UB96x_UYVY_TESTPATTERN at location 5
[MCU2_0] 14.050644 s: Found sensor GW_AR0233_UYVY at location 6
[MCU2_0] 14.050673 s: IssSensor_Init ... Done !!!
[MCU2_0] 14.050725 s: IttRemoteServer_Init ... Done !!!
[MCU2_0] 14.050752 s: VISS REMOTE SERVICE: Init ... !!!
[MCU2_0] 14.050801 s: VISS REMOTE SERVICE: Init ... Done !!!
[MCU2_0] 14.050827 s: UDMA Copy: Init ... !!!
[MCU2_0] 14.051797 s: UDMA Copy: Init ... Done !!!
[MCU2_0] 14.051860 s: APP: Init ... Done !!!
[MCU2_0] 14.051884 s: APP: Run ... !!!
[MCU2_0] 14.051904 s: IPC: Starting echo test ...
[MCU2_0] 14.053982 s: APP: Run ... Done !!!
[MCU2_0] 14.054749 s: IPC: Echo status: mpu1_0[x] mcu2_0[s] mcu2_1[.] C7X_1[P] C7X_2[.]
[MCU2_0] 14.054827 s: IPC: Echo status: mpu1_0[x] mcu2_0[s] mcu2_1[.] C7X_1[P] C7X_2[P]
[MCU2_0] 14.054891 s: IPC: Echo status: mpu1_0[x] mcu2_0[s] mcu2_1[P] C7X_1[P] C7X_2[P]
[MCU2_1] 4.639018 s: CIO: Init ... Done !!!
[MCU2_1] 4.639065 s: ### CPU Frequency = 1000000000 Hz
[MCU2_1] 4.639097 s: CPU is running FreeRTOS
[MCU2_1] 4.639117 s: APP: Init ... !!!
[MCU2_1] 4.639136 s: SCICLIENT: Init ... !!!
[MCU2_1] 4.639279 s: SCICLIENT: DMSC FW version [8.5.2--v08.05.02 (Chill Capybar]
[MCU2_1] 4.639312 s: SCICLIENT: DMSC FW revision 0x8
[MCU2_1] 4.639339 s: SCICLIENT: DMSC FW ABI revision 3.1
[MCU2_1] 4.639369 s: SCICLIENT: Init ... Done !!!
[MCU2_1] 4.639392 s: UDMA: Init ... !!!
[MCU2_1] 4.640387 s: UDMA: Init ... Done !!!
[MCU2_1] 4.640424 s: MEM: Init ... !!!
[MCU2_1] 4.640455 s: MEM: Created heap (DDR_LOCAL_MEM, id=0, flags=0x00000004) @ da000000 of size 16777216 bytes !!!
[MCU2_1] 4.640513 s: MEM: Init ... Done !!!
[MCU2_1] 4.640534 s: IPC: Init ... !!!
[MCU2_1] 4.640577 s: IPC: 5 CPUs participating in IPC !!!
[MCU2_1] 4.640612 s: IPC: Waiting for HLOS to be ready ... !!!
[MCU2_1] 13.387773 s: IPC: HLOS is ready !!!
[MCU2_1] 13.397018 s: IPC: Init ... Done !!!
[MCU2_1] 13.397056 s: APP: Syncing with 4 CPUs ... !!!
[MCU2_1] 13.397091 s: APP: Syncing with 4 CPUs ... Done !!!
[MCU2_1] 13.397119 s: REMOTE_SERVICE: Init ... !!!
[MCU2_1] 13.398436 s: REMOTE_SERVICE: Init ... Done !!!
[MCU2_1] 13.398472 s: FVID2: Init ... !!!
[MCU2_1] 13.398524 s: FVID2: Init ... Done !!!
[MCU2_1] 13.398548 s: VHWA: DMPAC: Init ... !!!
[MCU2_1] 13.398568 s: SCICLIENT: Sciclient_pmSetModuleState module=58 state=2
[MCU2_1] 13.398828 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_1] 13.398856 s: SCICLIENT: Sciclient_pmSetModuleState module=62 state=2
[MCU2_1] 13.398976 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_1] 13.399001 s: VHWA: DOF Init ... !!!
[MCU2_1] 13.403733 s: VHWA: DOF Init ... Done !!!
[MCU2_1] 13.403770 s: VHWA: SDE Init ... !!!
[MCU2_1] 13.405140 s: VHWA: SDE Init ... Done !!!
[MCU2_1] 13.405174 s: VHWA: DMPAC: Init ... Done !!!
[MCU2_1] 13.405208 s: VX_ZONE_INIT:Enabled
[MCU2_1] 13.405231 s: VX_ZONE_ERROR:Enabled
[MCU2_1] 13.405253 s: VX_ZONE_WARNING:Enabled
[MCU2_1] 13.406117 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target MCU2-1
[MCU2_1] 13.406295 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DMPAC_SDE
[MCU2_1] 13.406460 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DMPAC_DOF
[MCU2_1] 13.406502 s: VX_ZONE_INIT:[tivxInitLocal:145] Initialization Done !!!
[MCU2_1] 13.406530 s: APP: OpenVX Target kernel init ... !!!
[MCU2_1] 13.406772 s: APP: OpenVX Target kernel init ... Done !!!
[MCU2_1] 13.406802 s: UDMA Copy: Init ... !!!
[MCU2_1] 13.407773 s: UDMA Copy: Init ... Done !!!
[MCU2_1] 13.407813 s: APP: Init ... Done !!!
[MCU2_1] 13.407835 s: APP: Run ... !!!
[MCU2_1] 13.407856 s: IPC: Starting echo test ...
[MCU2_1] 13.409921 s: APP: Run ... Done !!!
[MCU2_1] 13.410461 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[s] C7X_1[P] C7X_2[.]
[MCU2_1] 13.410530 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[s] C7X_1[P] C7X_2[P]
[MCU2_1] 14.054651 s: IPC: Echo status: mpu1_0[x] mcu2_0[P] mcu2_1[s] C7X_1[P] C7X_2[P]
[C7x_1 ] 4.791220 s: CIO: Init ... Done !!!
[C7x_1 ] 4.791235 s: ### CPU Frequency = 1000000000 Hz
[C7x_1 ] 4.791247 s: CPU is running FreeRTOS
[C7x_1 ] 4.791256 s: APP: Init ... !!!
[C7x_1 ] 4.791263 s: SCICLIENT: Init ... !!!
[C7x_1 ] 4.791383 s: SCICLIENT: DMSC FW version [8.5.2--v08.05.02 (Chill Capybar]
[C7x_1 ] 4.791398 s: SCICLIENT: DMSC FW revision 0x8
[C7x_1 ] 4.791408 s: SCICLIENT: DMSC FW ABI revision 3.1
[C7x_1 ] 4.791419 s: SCICLIENT: Init ... Done !!!
[C7x_1 ] 4.791428 s: UDMA: Init ... !!!
[C7x_1 ] 4.792266 s: UDMA: Init ... Done !!!
[C7x_1 ] 4.792279 s: MEM: Init ... !!!
[C7x_1 ] 4.792291 s: MEM: Created heap (DDR_LOCAL_MEM, id=0, flags=0x00000004) @ 117000000 of size 268435456 bytes !!!
[C7x_1 ] 4.792313 s: MEM: Created heap (L3_MEM, id=1, flags=0x00000001) @ 70020000 of size 3964928 bytes !!!
[C7x_1 ] 4.792332 s: MEM: Created heap (L2_MEM, id=2, flags=0x00000001) @ 64800000 of size 458752 bytes !!!
[C7x_1 ] 4.792350 s: MEM: Created heap (L1_MEM, id=3, flags=0x00000001) @ 64e00000 of size 16384 bytes !!!
[C7x_1 ] 4.792367 s: MEM: Created heap (DDR_SCRATCH_MEM, id=4, flags=0x00000001) @ 100000000 of size 385875968 bytes !!!
[C7x_1 ] 4.792386 s: MEM: Init ... Done !!!
[C7x_1 ] 4.792394 s: IPC: Init ... !!!
[C7x_1 ] 4.792409 s: IPC: 5 CPUs participating in IPC !!!
[C7x_1 ] 4.792424 s: IPC: Waiting for HLOS to be ready ... !!!
[C7x_1 ] 11.871880 s: IPC: HLOS is ready !!!
[C7x_1 ] 11.873761 s: IPC: Init ... Done !!!
[C7x_1 ] 11.873776 s: APP: Syncing with 4 CPUs ... !!!
[C7x_1 ] 13.397094 s: APP: Syncing with 4 CPUs ... Done !!!
[C7x_1 ] 13.397112 s: REMOTE_SERVICE: Init ... !!!
[C7x_1 ] 13.397255 s: REMOTE_SERVICE: Init ... Done !!!
[C7x_1 ] 13.397280 s: VX_ZONE_INIT:Enabled
[C7x_1 ] 13.397315 s: VX_ZONE_ERROR:Enabled
[C7x_1 ] 13.397346 s: VX_ZONE_WARNING:Enabled
[C7x_1 ] 13.397536 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1
[C7x_1 ] 13.397600 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_2
[C7x_1 ] 13.397661 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_3
[C7x_1 ] 13.397723 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_4
[C7x_1 ] 13.397788 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_5
[C7x_1 ] 13.397851 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_6
[C7x_1 ] 13.397914 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_7
[C7x_1 ] 13.397977 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_8
[C7x_1 ] 13.398000 s: VX_ZONE_INIT:[tivxInitLocal:145] Initialization Done !!!
[C7x_1 ] 13.398014 s: APP: OpenVX Target kernel init ... !!!
[C7x_1 ] 13.398151 s: APP: OpenVX Target kernel init ... Done !!!
[C7x_1 ] 13.398166 s: APP: Init ... Done !!!
[C7x_1 ] 13.398175 s: APP: Run ... !!!
[C7x_1 ] 13.398184 s: IPC: Starting echo test ...
[C7x_1 ] 13.398300 s: APP: Run ... Done !!!
[C7x_1[ 29.451931] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
] 13.399316 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[ 29.472013] Bridge firewalling registered
[x] C7X_1[s] C7X_2[P]
[C7x_1 ] 13.410365 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[P] C7X_1[s] C7X_2[P]
[C7x_1 ] 14.054594 s: IPC: Echo status: mpu1_0[x] mcu2_0[P] mcu2_1[P] C7X_1[s] C7X_2[P]
[C7x_2 ] 4.854161 s: CIO: Init ... Done !!!
[C7x_2 ] 4.854176 s: ### CPU Frequency = 1000000000 Hz
[C7x_2 ] 4.854189 s: CPU is running FreeRTOS
[C7x_2 ] 4.854198 s: APP: Init ... !!!
[C7x_2 ] 4.854207 s: SCICLIENT: Init ... !!!
[C7x_2 ] 4.854324 s: SCICLIENT: DMSC FW version [8.5.2--v08.05.02 (Chill Capybar]
[C7x_2 ] 4.854339 s: SCICLIENT: DMSC FW revision 0x8
[C7x_2 ] 4.854350 s: SCICLIENT: DMSC FW ABI revision 3.1
[C7x_2 ] 4.854361 s: SCICLIENT: Init ... Done !!!
[C7x_2 ] 4.854372 s: UDMA: Init ... !!!
[C7x_2 ] 4.855184 s: UDMA: Init ... Done !!!
[C7x_2 ] 4.855198 s: MEM: Init ... !!!
[C7x_2 ] 4.855211 s: MEM: Created heap (DDR_LOCAL_MEM, id=0, flags=0x00000004) @ 127000000 of size 16777216 bytes !!!
[C7x_2 ] 4.855233 s: MEM: Created heap (L2_MEM, id=2, flags=0x00000001) @ 65800000 of size 458752 bytes !!!
[C7x_2 ] 4.855253 s: MEM: Created heap (L1_MEM, id=3, flags=0x00000001) @ 65e00000 of size 16384 bytes !!!
[C7x_2 ] 4.855270 s: MEM: Created heap (DDR_SCRATCH_MEM, id=4, flags=0x00000001) @ 128000000 of size 67108864 bytes !!!
[C7x_2 ] 4.855290 s: MEM: Init ... Done !!!
[C7x_2 ] 4.855299 s: IPC: Init ... !!!
[C7x_2 ] 4.855316 s: IPC: 5 CPUs participating in IPC !!!
[C7x_2 ] 4.855333 s: IPC: Waiting for HLOS to be ready ... !!!
[C7x_2 ] 12.600440 s: IPC: HLOS is ready !!!
[C7x_2 ] 12.602227 s: IPC: Init ... Done !!!
[C7x_2 ] 12.602244 s: APP: Syncing with 4 CPUs ... !!!
[C7x_2 ] 13.397093 s: APP: Syncing with 4 CPUs ... Done !!!
[C7x_2 ] 13.397111 s: REMOTE_SERVICE: Init ... !!!
[C7x_2 ] 13.397261 s: REMOTE_SERVICE: Init ... Done !!!
[C7x_2 ] 13.397284 s: VX_ZONE_INIT:Enabled
[C7x_2 ] 13.397296 s: VX_ZONE_ERROR:Enabled
[C7x_2 ] 13.397334 s: VX_ZONE_WARNING:Enabled
[C7x_2 ] 13.397779 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP-1
[C7x_2 ] 13.397803 s: VX_ZONE_INIT:[tivxInitLocal:145] Initialization Done !!!
[C7x_2 ] 13.397816 s: APP: OpenVX Target kernel init ... !!!
[C7x_2 ] 13.398069 s: APP: OpenVX Target kernel init ... Done !!!
[C7x_2 ] 13.398085 s: UDMA Copy: Init ... !!!
[C7x_2 ] 13.398919 s: UDMA Copy: Init ... Done !!!
[C7x_2 ] 13.398934 s: APP: Init ... Done !!!
[C7x_2 ] 13.398944 s: APP: Run ... !!!
[C7x_2 ] 13.398953 s: IPC: Starting echo test ...
[C7x_2 ] 13.399072 s: APP: Run ... Done !!!
[C7x_2 ] 13.399326 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[x] C7X_1[P] C7X_2[s]
[C7x_2 ] 13.410440 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[P] C7X_1[P] C7X_2[s]
[C7x_2 ] 14.054620 s: IPC: Echo status: mpu1_0[x] mcu2_0[P] mcu2_1[P] C7X_1[P] C7X_2[s]
[ 30.217039] process 'docker/tmp/qemu-check750599151/check' started with executable stack

root@j721s2-evm:/opt/vision_apps# ./run_app_single_cam.sh
APP: Init ... !!!
MEM: Init ... !!!
MEM: Initialized DMA HEAP (fd=4) !!!
MEM: Init ... Done !!!
IPC: Init ... !!!
IPC: Init ... Done !!!
REMOTE_SERVICE: Init ... !!!
REMOTE_SERVICE: Init ... Done !!!
43.144834 s: GTC Frequency = 200 MHz
APP: Init ... Done !!!
43.150019 s: VX_ZONE_INIT:Enabled
43.150033 s: VX_ZONE_ERROR:Enabled
43.150039 s: VX_ZONE_WARNING:Enabled
43.151177 s: VX_ZONE_INIT:[tivxInitLocal:145] Initialization Done !!!
43.152019 s: VX_ZONE_INIT:[tivxHostInitLocal:93] Initialization Done for HOST !!!
sensor_selection = [0]
ldc_enable = [0]
num_frames_to_run = [1000000000]
is_interactive = [1]
IttCtrl_registerHandler: command echo registered at location 0
IttCtrl_registerHandler: command iss_read_2a_params registered at location 1
IttCtrl_registerHandler: command iss_write_2a_params registered at location 2
IttCtrl_registerHandler: command iss_raw_save registered at location 3
IttCtrl_registerHandler: command iss_yuv_save registered at location 4
IttCtrl_registerHandler: command iss_read_sensor_reg registered at location 5
IttCtrl_registerHandler: command iss_write_sensor_reg registered at location 6
IttCtrl_registerHandler: command dev_ctrl registered at location 7
IttCtrl_registerHandler: command iss_send_dcc_file registered at location 8
NETWORK: Opened at IP Addr = 192.168.0.20, socket port=5000!!!
43.165164 s: ISS: Enumerating sensors ... !!!
[MCU2_0] 43.165341 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_ENUMERATE
[MCU2_0] 43.165508 s: write 0xfe to TCA6408 register 0x3
[MCU2_0] 43.265045 s: UB960 config start
[MCU2_0] 43.465297 s: End of UB960 config
[MCU2_0] 43.465322 s: UB960 config start
43.665462 s: ISS: Enumerating sensors ... found 0 : IMX390-UB953_D3
43.665482 s: ISS: Enumerating sensors ... found 1 : AR0233-UB953_MARS
43.665504 s: ISS: Enumerating sensors ... found 2 : AR0820-UB953_LI
43.665509 s: ISS: Enumerating sensors ... found 3 : AR0341-UB953_MARS
43.665515 s: ISS: Enumerating sensors ... found 4 : UB9xxx_RAW12_TESTPATTERN
43.665520 s: ISS: Enumerating sensors ... found 5 : UB96x_UYVY_TESTPATTERN
43.665525 s: ISS: Enumerating sensors ... found 6 : GW_AR0233_UYVY
Select camera port index 0-7 : [MCU2_0] 43.665296 s: End of UB960 config
0
7 registered sensor drivers
a : IMX390-UB953_D3
b : AR0233-UB953_MARS
c : AR0820-UB953_LI
d : AR0341-UB953_MARS
e : UB9xxx_RAW12_TESTPATTERN
f : UB96x_UYVY_TESTPATTERN
g : GW_AR0233_UYVY
Select a sensor above or press '0' to autodetect the sensor : Invalid selection
. Try again
7 registered sensor drivers
a : IMX390-UB953_D3
b : AR0233-UB953_MARS
c : AR0820-UB953_LI
d : AR0341-UB953_MARS
e : UB9xxx_RAW12_TESTPATTERN
f : UB96x_UYVY_TESTPATTERN
g : GW_AR0233_UYVY
Select a sensor above or press '0' to autodetect the sensor : d
Sensor selected : AR0341-UB953_MARS
LDC Selection Yes(1)/No(0) : LDC Selection Yes(1)/No(0) : 0
Querying AR0341-UB953_MARS
51.214608 s: ISS: Querying sensor [AR0341-UB953_MARS] ... !!!
51.214939 s: ISS: Querying sensor [AR0341-UB953_MARS] ... Done !!!
51.214950 s: ISS: Initializing sensor [AR0341-UB953_MARS], doing IM_SENSOR_CMD_PWRON ... !!!
51.215240 s: ISS: Initializing sensor [AR0341-UB953_MARS], doing IM_SENSOR_CMD_CONFIG ... !!!
[MCU2_0] 51.214759 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_QUERY
[MCU2_0] 51.214796 s: Received Query for AR0341-UB953_MARS
[MCU2_0] 51.215079 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_PWRON
[MCU2_0] 51.215114 s: IM_SENSOR_CMD_PWRON : channel_mask = 0x1
[MCU2_0] 51.215366 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_CONFIG
[MCU2_0] 51.215400 s: Application requested features = 0x158
[MCU2_0]
[MCU2_0] 51.215434 s: UB960 config start
[MCU2_0] 51.471127 s: End of UB960 config
[MCU2_0] 51.471154 s: UB960 config start
[MCU2_0] 51.727127 s: End of UB960 config
[MCU2_0] 51.727289 s: UB960 config start
[MCU2_0] 51.731127 s: End of UB960 config
[MCU2_0] 51.831044 s: ub953 config start : slaveAddr = 0x74
[MCU2_0] 52.836135 s: End of UB953 config
[MCU2_0] 52.936044 s: Configuring camera # 0
[MCU2_0] 52.936204 s: UB960 config start
[MCU2_0] 52.940127 s: End of UB960 config
[MCU2_0] 52.990043 s: ub953 config start : slaveAddr = 0x74
[MCU2_0] 53.995134 s: End of UB953 config
[MCU2_0] 54.046322 s: Configuring AR0341 imager .. Please wait till it finishes
[MCU2_0] 56.724045 s: AR0341 config done
[MCU2_0] 56.724069 s: AR0341 config validation of selected registers:
[MCU2_0] 56.725375 s: MIPI deskew pattern width (first reg written after reset): 84b
[MCU2_0] 56.726690 s: PLL_pre_clock_divisor: 3
[MCU2_0] 56.727992 s: PLL_Multiplier: aa
[MCU2_0] 56.729291 s: VT PIX_CLK_DIV: 8
[MCU2_0] 56.730591 s: Line length Pix: f80
56.739911 s: ISS: Initializing sensor [AR0341-UB953_MARS] ... Done !!!
[MCU2_0] 56.731894 s: Frame length Lines: 646
[MCU2_0] 56.733196 s: Serial format: 204
[MCU2_0] 56.734495 s: CSI LANE Mode: 300
[MCU2_0] 56.735798 s: Y address end: 603
[MCU2_0] 56.737100 s: X address end: 787
[MCU2_0] 56.738403 s: Coarse Int time T1: 2d2
[MCU2_0] 56.739709 s: Green Gain T2 (last reg written): 81
[MCU2_0] 56.739737 s: IM_SENSOR_CMD_CONFIG returning status = 0
read_test_image_raw : Unable to open file /opt/vision_apps/test_data/img_test.raw
app_create_viss : sensor_dcc_id = 341
Enabling DSS_M2M
56.789622 s: ISS: Starting sensor [AR0341-UB953_MARS] ... !!!
[MCU2_0] 56.789948 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_STREAM_ON
[MCU2_0] 56.790010 s: IM_SENSOR_CMD_STREAM_ON: channel_mask = 0x1
[MCU2_0] 56.790052 s: UB960 config start
[MCU2_0] 57.046128 s: End of UB960 config
[MCU2_0] 57.046159 s: UB960 config start
[MCU2_0] 57.302128 s: End of UB960 config
[MCU2_0] 57.315323 s: Mode select reg after streaming start: 100
[MCU2_0] 57.315357 s: UB960 config start
[MCU2_0] 57.331128 s: End of UB960 config
57.341185 s: ISS: Starting sensor [AR0341-UB953_MARS] ... !!!


==========================
Demo : Single Camera w/ 2A
==========================

p: Print performance statistics

s: Save Sensor RAW, VISS Output and H3A output images to File System

e: Export performance statistics

u: Update DCC from File System


x: Exit

Enter Choice:
Unsupported command

==========================
Demo : Single Camera w/ 2A
==========================

p: Print performance statistics

s: Save Sensor RAW, VISS Output and H3A output images to File System

e: Export performance statistics

u: Update DCC from File System


x: Exit

Enter Choice: p


Summary of CPU load,
====================

CPU: mpu1_0: TOTAL LOAD = 0.43 % ( HWI = 0. 5 %, SWI = 0. 1 % )
CPU: mcu2_0: TOTAL LOAD = 19. 0 % ( HWI = 0. 0 %, SWI = 0. 0 % )
CPU: mcu2_1: TOTAL LOAD = 14. 0 % ( HWI = 0. 0 %, SWI = 0. 0 % )
CPU: c7x_1: TOTAL LOAD = 1. 0 % ( HWI = 0. 0 %, SWI = 0. 0 % )
CPU: c7x_2: TOTAL LOAD = 0. 0 % ( HWI = 0. 0 %, SWI = 0. 0 % )


HWA performance statistics,
===========================

HWA: VISS: LOAD = 13.43 % ( 85 MP/s )


DDR performance statistics,
===========================

DDR: READ BW: AVG = 507 MB/s, PEAK = 9368 MB/s
DDR: WRITE BW: AVG = 491 MB/s, PEAK = 3014 MB/s
DDR: TOTAL BW: AVG = 998 MB/s, PEAK = 12382 MB/s


Detailed CPU performance/memory statistics,
===========================================

DDR_SHARED_MEM: Alloc's: 21 alloc's of 59074606 bytes
DDR_SHARED_MEM: Free's : 0 free's of 0 bytes
DDR_SHARED_MEM: Open's : 21 allocs of 59074606 bytes
DDR_SHARED_MEM: Total size: 536870912 bytes

CPU: mcu2_0: TASK: IPC_RX: 0. 4 %
CPU: mcu2_0: TASK: REMOTE_SRV: 3.26 %
CPU: mcu2_0: TASK: LOAD_TEST: 0. 0 %
CPU: mcu2_0: TASK: TIVX_CPU_0: 1.34 %
CPU: mcu2_0: TASK: TIVX_V1NF: 0. 0 %
CPU: mcu2_0: TASK: TIVX_V1LDC1: 0. 0 %
CPU: mcu2_0: TASK: TIVX_V1SC1: 0. 0 %
CPU: mcu2_0: TASK: TIVX_V1MSC2: 0. 0 %
CPU: mcu2_0: TASK: TIVXVVISS1: 0.51 %
CPU: mcu2_0: TASK: TIVX_CAPT1: 0. 0 %
CPU: mcu2_0: TASK: TIVX_CAPT2: 0.10 %
CPU: mcu2_0: TASK: TIVX_DISP1: 0. 0 %
CPU: mcu2_0: TASK: TIVX_DISP2: 0. 0 %
CPU: mcu2_0: TASK: TIVX_CSITX: 0.10 %
CPU: mcu2_0: TASK: TIVX_CAPT3: 0. 0 %
CPU: mcu2_0: TASK: TIVX_CAPT4: 0. 0 %
CPU: mcu2_0: TASK: TIVX_CAPT5: 0. 0 %
CPU: mcu2_0: TASK: TIVX_CAPT6: 0. 0 %
CPU: mcu2_0: TASK: TIVX_CAPT7: 0. 0 %
CPU: mcu2_0: TASK: TIVX_CAPT8: 0. 0 %
CPU: mcu2_0: TASK: TIVX_DPM2M1: 0.24 %
CPU: mcu2_0: TASK: TIVX_DPM2M2: 0. 0 %
CPU: mcu2_0: TASK: TIVX_DPM2M3: 0. 0 %
CPU: mcu2_0: TASK: TIVX_DPM2M4: 0. 0 %

CPU: mcu2_0: HEAP: DDR_LOCAL_MEM: size = 16777216 B, free = 16047360 B ( 95 % unused)

CPU: mcu2_1: TASK: IPC_RX: 0. 0 %
CPU: mcu2_1: TASK: REMOTE_SRV: 0. 0 %
CPU: mcu2_1: TASK: LOAD_TEST: 0. 0 %
CPU: mcu2_1: TASK: TIVX_CPU_1: 0. 0 %
CPU: mcu2_1: TASK: TIVX_SDE: 0. 0 %
CPU: mcu2_1: TASK: TIVX_DOF: 0. 0 %
CPU: mcu2_1: TASK: IPC_TEST_RX: 0. 0 %
CPU: mcu2_1: TASK: IPC_TEST_TX: 0. 0 %
CPU: mcu2_1: TASK: IPC_TEST_TX: 0. 0 %
CPU: mcu2_1: TASK: IPC_TEST_TX: 0. 0 %
CPU: mcu2_1: TASK: IPC_TEST_TX: 0. 0 %

CPU: mcu2_1: HEAP: DDR_LOCAL_MEM: size = 16777216 B, free = 16773120 B ( 99 % unused)

CPU: c7x_1: TASK: IPC_RX: 0. 0 %
CPU: c7x_1: TASK: REMOTE_SRV: 0. 0 %
CPU: c7x_1: TASK: LOAD_TEST: 0. 0 %
CPU: c7x_1: TASK: TIVX_C71_P1: 0. 0 %
CPU: c7x_1: TASK: TIVX_C71_P2: 0. 0 %
CPU: c7x_1: TASK: TIVX_C71_P3: 0. 0 %
CPU: c7x_1: TASK: TIVX_C71_P4: 0. 0 %
CPU: c7x_1: TASK: TIVX_C71_P5: 0. 0 %
CPU: c7x_1: TASK: TIVX_C71_P6: 0. 0 %
CPU: c7x_1: TASK: TIVX_C71_P7: 0. 0 %
CPU: c7x_1: TASK: TIVX_C71_P8: 0. 0 %
CPU: c7x_1: TASK: IPC_TEST_RX: 0. 0 %
CPU: c7x_1: TASK: IPC_TEST_TX: 0. 0 %
CPU: c7x_1: TASK: IPC_TEST_TX: 0. 0 %
CPU: c7x_1: TASK: IPC_TEST_TX: 0. 0 %
CPU: c7x_1: TASK: IPC_TEST_TX: 0. 0 %

CPU: c7x_1: HEAP: DDR_LOCAL_MEM: size = 268435456 B, free = 268435200 B ( 99 % unused)
CPU: c7x_1: HEAP: L3_MEM: size = 3964928 B, free = 3964928 B (100 % unused)
CPU: c7x_1: HEAP: L2_MEM: size = 458752 B, free = 458752 B (100 % unused)
CPU: c7x_1: HEAP: L1_MEM: size = 16384 B, free = 16384 B (100 % unused)
CPU: c7x_1: HEAP: DDR_SCRATCH_MEM: size = 385875968 B, free = 385875968 B (100 % unused)

CPU: c7x_2: TASK: IPC_RX: 0. 0 %
CPU: c7x_2: TASK: REMOTE_SRV: 0. 0 %
CPU: c7x_2: TASK: LOAD_TEST: 0. 0 %
CPU: c7x_2: TASK: TIVX_CPU: 0. 0 %
CPU: c7x_2: TASK: IPC_TEST_RX: 0. 0 %
CPU: c7x_2: TASK: IPC_TEST_TX: 0. 0 %
CPU: c7x_2: TASK: IPC_TEST_TX: 0. 0 %
CPU: c7x_2: TASK: IPC_TEST_TX: 0. 0 %
CPU: c7x_2: TASK: IPC_TEST_TX: 0. 0 %

CPU: c7x_2: HEAP: DDR_LOCAL_MEM: size = 16777216 B, free = 16772608 B ( 99 % unused)
CPU: c7x_2: HEAP: L2_MEM: size = 458752 B, free = 458752 B (100 % unused)
CPU: c7x_2: HEAP: L1_MEM: size = 16384 B, free = 16384 B (100 % unused)
CPU: c7x_2: HEAP: DDR_SCRATCH_MEM: size = 67108864 B, free = 67108864 B (100 % unused)


GRAPH: graph_86 (#nodes = 5, #executions = 451)
NODE: CSITX: node_112: avg = 16070 usecs, min/max = 16027 / 16092 usecs, #executions = 451
NODE: CAPTURE2: node_97: avg = 33256 usecs, min/max = 33223 / 38701 usecs, #executions = 451
NODE: VPAC_VISS1: VISS_Processing: avg = 4996 usecs, min/max = 4976 / 5382 usecs, #executions = 451
NODE: MCU2-0: 2A_AlgNode: avg = 1955 usecs, min/max = 1801 / 8169 usecs, #executions = 451
NODE: DSS_M2M1: node_109: avg = 5219 usecs, min/max = 5184 / 5441 usecs, #executions = 451

PERF: TOTAL: avg = 33293 usecs, min/max = 32939 / 37408 usecs, #executions = 452

PERF: TOTAL: 30. 3 FPS

==========================
Demo : Single Camera w/ 2A
==========================

p: Print performance statistics

s: Save Sensor RAW, VISS Output and H3A output images to File System

e: Export performance statistics

u: Update DCC from File System


x: Exit

Enter Choice:
Unsupported command

==========================
Demo : Single Camera w/ 2A
==========================

p: Print performance statistics

s: Save Sensor RAW, VISS Output and H3A output images to File System

e: Export performance statistics

u: Update DCC from File System


x: Exit

Enter Choice: x

89.445346 s: ISS: Stopping sensor [AR0341-UB953_MARS] ... !!!
[MCU2_0] 89.445535 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_STREAM_OFF
[MCU2_0] 89.445598 s: IM_SENSOR_CMD_STREAM_ON: channel_mask = 0x1
[MCU2_0] 89.457047 s: UB960 config start
89.473259 s: ISS: Stopping sensor [AR0341-UB953_MARS] ... Done !!!
[MCU2_0] 89.473132 s: End of UB960 config
89.571886 s: ISS: Stopping sensor [AR0341-UB953_MARS] ... !!!
[MCU2_0] 89.572051 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_STREAM_OFF
[MCU2_0] 89.572089 s: IM_SENSOR_CMD_STREAM_ON: channel_mask = 0x1
[MCU2_0] 89.583044 s: UB960 config start
89.599259 s: ISS: Stopping sensor [AR0341-UB953_MARS] ... Done !!!
[MCU2_0] 89.599128 s: End of UB960 config
[MCU2_0] 89.605312 s: ==========================================================
[MCU2_0] 89.605370 s: Csitx Status: Instance|0
[MCU2_0] 89.605397 s: ==========================================================
[MCU2_0] 89.605435 s: FIFO Overflow Count: 0
[MCU2_0] 89.605460 s: Channel Num | Frame Queue Count | Frame De-queue Count | Frame Repeat Count |
[MCU2_0] 89.605513 s: 0| 964| 964| 0|
89.612841 s: ISS: De-initializing sensor [AR0341-UB953_MARS] ... !!!
89.613109 s: ISS: De-initializing sensor [AR0341-UB953_MARS] ... Done !!!
89.613125 s: VX_ZONE_INIT:[tivxHostDeInitLocal:107] De-Initialization Done for HOST !!!
[MCU2_0] 89.606957 s: ==========================================================
[MCU2_0] 89.607019 s: Display M2M Status: Instance|0
[MCU2_0] 89.607052 s: ==========================================================
[MCU2_0] 89.607089 s: Queue Count: 964
[MCU2_0] 89.607116 s: De-queue Count: 964
[MCU2_0] 89.607146 s: Write-back Frames Count: 964
[MCU2_0] 89.607175 s: Underflow Count: 0
[MCU2_0] 89.610211 s: ==========================================================
[MCU2_0] 89.610275 s: Capture Status: Instance|0
[MCU2_0] 89.610301 s: ==========================================================
[MCU2_0] 89.610338 s: overflowCount: 0
[MCU2_0] 89.610366 s: spuriousUdmaIntrCount: 0
[MCU2_0] 89.610396 s: frontFIFOOvflCount: 0
[MCU2_0] 89.610422 s: crcCount: 1
[MCU2_0] 89.610447 s: eccCount: 0
[MCU2_0] 89.610473 s: correctedEccCount: 0
[MCU2_0] 89.610501 s: dataIdErrorCount: 0
[MCU2_0] 89.610529 s: invalidAccessCount: 0
[MCU2_0] 89.610557 s: invalidSpCount: 0
[MCU2_0] 89.610589 s: strmFIFOOvflCount[0]: 0
[MCU2_0] 89.610622 s: strmFIFOOvflCount[1]: 0
[MCU2_0] 89.610647 s: Channel Num | Frame Queue Count | Frame De-queue Count | Frame Drop Count | Error Frame Count |
[MCU2_0] 89.610711 s: 0 | 966 | 966 | 0 | 0 |
[MCU2_0] 89.611022 s: ==========================================================
[MCU2_0] 89.611083 s: Capture Status: Instance|1
[MCU2_0] 89.611108 s: ==========================================================
[MCU2_0] 89.611144 s: overflowCount: 0
[MCU2_0] 89.611172 s: spuriousUdmaIntrCount: 0
[MCU2_0] 89.611201 s: frontFIFOOvflCount: 0
[MCU2_0] 89.611227 s: crcCount: 0
[MCU2_0] 89.611252 s: eccCount: 0
[MCU2_0] 89.611278 s: correctedEccCount: 0
[MCU2_0] 89.611306 s: dataIdErrorCount: 0
[MCU2_0] 89.611334 s: invalidAccessCount: 0
[MCU2_0] 89.611361 s: invalidSpCount: 0
[MCU2_0] 89.611392 s: strmFIFOOvflCount[0]: 0
[MCU2_0] 89.611425 s: strmFIFOOvflCount[1]: 0
[MCU2_0] 89.611449 s: Channel Num | Frame Queue Count | Frame De-queue Count | Frame Drop Count | Error Frame Count |
89.617550 s: VX_ZONE_INIT:[tivxDeInitLocal:223] De-Initialization Done !!!
APP: Deinit ... !!!
REMOTE_SERVICE: Deinit ... !!!
REMOTE_SERVICE: Deinit ... Done !!!
IPC: Deinit ... !!!
IPC: DeInit ... Done !!!
MEM: Deinit ... !!!
DDR_SHARED_MEM: Alloc's: 21 alloc's of 59074606 bytes
DDR_SHARED_MEM: Free's : 21 free's of 59074606 bytes
DDR_SHARED_MEM: Open's : 0 allocs of 0 bytes
DDR_SHARED_MEM: Total size: 536870912 bytes
MEM: Deinit ... Done !!!
APP: Deinit ... Done !!!
root@j721s2-evm:/opt/vision_apps#

  • So a bit of progress.  By setting local_csitx_config.instId[0]=1, to specify CSITX instance 1 rather than CSITX instance 0, I am seeing output on the J721S2 SOM's CSI TX output connector.  The frame rate of the output video stream is 30 FPS, as expected, and if I capture a frame of the MIPI output and Hexdump the contents, I can see that the output format appears to be RGB-888,as expected, and the number of pixels in the captured frame is consistent with the sensor's frame size (1920 x 1536).

    The bad news is that the image data bears no resemblance to the image being output by the TDA4 ISP.  At the bottom of this message, I've attached the YUV NV12 image that I captured on the EVM using the single camera application's "s' option, which is valid, and a screen capture from the software I am using to display the CSITX output. 

    I am converting the ISP's VX_DF_IMAGE_NV12 output to VX_DF_IMAGE_RGBX using an M2M object before passing the image stream to the csitx object, since the csitx object accept only single plane image formats.  To make this work, I had to add the entry {FVID2_DF_RGBX24_8888, CSL_DSS_WB_ATTRIBUTES_FORMAT_VAL_XBGR32_8888, {32,0,0}} to the gDssWbPipeDataFmt table in the csl_dssWbPipe.c file, as per a suggestion I found in another e2e.ti.com forum post.  I've double checked my M2M and CSITX object configurations, and don't see any obvious mistakes, but it sure likes like something other than the color-converted ISP output is being output by the CSITX block.  My app_single_cam_main.c code is included in the previous post on this thread.

    I would appreciate any thoughts about what might be going wrong.

  • Forgot to include the ISP YUV and CSITX output image files I said I'd include in my last post.  The first image is the viss output I captured on my TDA4 EVM, as displayed using the DCC tool:

    And the second image is the output I'm seeing from the CXI TX connector on the J721S2 SOM, as displayed by a software program we use to view MIPI output:from sensors:

    Unfortunately, I haven't yet figured out how to dump and display the contents of the M2M module's output buffer, which would clarify whether things are going bad during the color conversion in the M2M module, or in the CSITX module.

  • Another step forward -- I now know the problem is that the CSI TX is not picking up image data from the right location.  I added printf statements to the M2M tiovx object to display the memory address where the output of the M2M color conversion is placed, and also in the CSI TX tiovx object to see where it is picking up the image data it is sending to the output port.  The addresses don't match.  I noticed, however, that each address remains stable from test run to test run, so I hardcoded the address being used by the CSI TX block with the address of the M2M block's output image during the CXI TX kernel's create function, and BINGO, I started getting good image data out of the J721s2 SOM's CSI TX output connector.

    So now the remaining problem is to figure out what I've done wrong in my code that is causing the CSI TX tiovx object to pick up data from the wrong place.  Here is the relevant code from the single camera application:

    CSITX configuration:

        /* CSITX Config initialization */
        tivx_csitx_params_init(&local_csitx_config);
        local_csitx_config.numInst                          = 1U;
        local_csitx_config.numCh                            = 1;
        local_csitx_config.instId[0U]                       = 1;
        local_csitx_config.instCfg[0U].rxCompEnable         = (uint32_t)vx_true_e;
        local_csitx_config.instCfg[0U].rxv1p3MapEnable      = (uint32_t)vx_true_e;
        local_csitx_config.instCfg[0U].laneBandSpeed        = TIVX_CSITX_LANE_BAND_SPEED_770_TO_870_MBPS;
        local_csitx_config.instCfg[0U].laneSpeedMbps        = TIVX_CSITX_LANE_SPEED_MBPS_RESERVED;
        local_csitx_config.instCfg[0U].numDataLanes         = 4U;
        for (loopCnt = 0U ;
            loopCnt < local_csitx_config.instCfg[0U].numDataLanes ;
            loopCnt++)
        {
            local_csitx_config.instCfg[0U].lanePolarityCtrl[loopCnt] = 0u;
        }
        for (loopCnt = 0U; loopCnt < 1; loopCnt++)
        {
            local_csitx_config.chVcNum[loopCnt]   = loopCnt;
            local_csitx_config.chInstMap[loopCnt] = 0;
        }
        obj->csitx_config = vxCreateUserDataObject(obj->context, "tivx_csitx_params_t", sizeof(tivx_csitx_params_t), &local_csitx_config);
    
        /* DSS M2M initialization */
        tivx_display_m2m_params_init(&obj->display_m2m_params);
        obj->display_m2m_params.instId     = 0;
        obj->display_m2m_params.numPipe    = 1;
        obj->display_m2m_params.pipeId[0U] = 3;
        obj->display_m2m_params.overlayId  = 3;
    

    Creation of M2M and CSITX tiovx nodes:

            printf ("Enabling DSS_M2M \n");
            obj->display_m2m_output_image = vxCreateImage(obj->context, obj->width_in, obj->height_in, VX_DF_IMAGE_RGBX);
            obj->display_m2m_param_obj = vxCreateUserDataObject(obj->context, "tivx_display_m2m_params_t", sizeof(tivx_display_m2m_params_t), &obj->display_m2m_params);
            obj->displaym2mNode = tivxDisplayM2MNode(obj->graph, obj->display_m2m_param_obj, ldc_in_image, obj->display_m2m_output_image);
            if(status == VX_SUCCESS)
            {
                status = vxSetNodeTarget(obj->displaym2mNode, VX_TARGET_STRING, TIVX_TARGET_DISPLAY_M2M1);
            }
    
            if(status == VX_SUCCESS)
            {
                status = tivxSetNodeParameterNumBufByIndex(obj->displaym2mNode, 2u, obj->num_cap_buf);
            }
            obj->csitx_image_arr = vxCreateObjectArray(obj->context, (vx_reference)obj->display_m2m_output_image, num_capture_frames);
            obj->csitx_node = tivxCsitxNode(obj->graph, obj->csitx_config, obj->csitx_image_arr);
            vxSetNodeTarget(obj->csitx_node, VX_TARGET_STRING, TIVX_TARGET_CSITX2);
        }
    

    I suspect the problem has something to do with the fact that the CSI TX tiovx object is set up to handle multiple instances, and multiple virtual channels per instance, and thus has the ability to output data from different buffers based on the instance id and virtual channel id in question.  I am having a hard time making sense of the tiovx CSI TX configuration structure, and how instances in the tivx_csitx_params_t structure are meant to relate to the actual csi tx hardware in the j721S2 SOC, and suspect something about the way I am configuring the CSI TX tiovx module is causing the CSI TX tiovx object to read data from a buffer associated with a different instance and/or virtual channel ID than where the M2M output is being placed.

  • Hi Peter,

    Sorry for the late reply.

    The above code seems to be correct. You are creating DSS M2M node with the input and output images and then creating an array from output image to create CSITX node. 

    The images are allocated by the framework.

    When you print the image address in the CSITX node, what value do you see? Are they completely junk addresses or do you see some valid location? 

    Also what is the value of num_capture_frames variable in creating object array? Can you try replacing it with 1 because i think you just want to display one channel? 

    Regards,

    Brijesh

  • Hi Brijesh,

    Thanks for responding.  AFAICT, the CSITX node is getting a junk address.  num_capture_frames_variable is already set to 1.

    After reading through the vxCreateOjbectArray code, however, I believe the problem is that this function is using the obj->display_m2m_output_image as an "exemplar" to create a **completely new** vx_image object, rather than placing the display_m2m_output_image vx_image object itself into the array. The new vx_image object is assigned the same image width, height and format as the exemplar (i.e. the m2m output image), but is otherwise a completely new vx_image object, whose memory address is left unassigned.  As such, passing the resulting object array to the CSITX node without first modifying the array's newly created vx_image to point to the display_m2m_output_image object's object descriptor leads to the CSITX node outputting data from some unknown location in memory.

    I found a way to deal with this, but it was messy, and required use of an internal tivx function in the single camera app.  Here's what my updated code looks like:

            printf ("Enabling DSS_M2M \n");
            obj->display_m2m_output_image = vxCreateImage(obj->context, obj->width_in, obj->height_in, VX_DF_IMAGE_RGBX);
            obj->display_m2m_param_obj = vxCreateUserDataObject(obj->context, "tivx_display_m2m_params_t", sizeof(tivx_display_m2m_params_t), &obj->display_m2m_params);
            obj->displaym2mNode = tivxDisplayM2MNode(obj->graph, obj->display_m2m_param_obj, ldc_in_image, obj->display_m2m_output_image);
            if(status == VX_SUCCESS)
            {   
                status = vxSetNodeTarget(obj->displaym2mNode, VX_TARGET_STRING, TIVX_TARGET_DISPLAY_M2M1);
            }
    
            if(status == VX_SUCCESS)
            {
                status = tivxSetNodeParameterNumBufByIndex(obj->displaym2mNode, 2u, obj->num_cap_buf);
            }
     
            }
            //The CSITX tiovx node expects to receive an image array for input, rather than 
            //a single image.  To create such an array, we call the vxCreateObjectArray, using
            //the M2M output buffer as the "exemplar" so that the new vx_image object created
            //and placed in the array have the same size and color format as the M2M output
            //buffer.  Since we are only outputting a single image stream, the object array
            //only needs to contain a single entry.  Note that the vx_image created in the
            //array is a new image, and has its memory location set to NULL.  So once the
            //array has been created, we need to replace the new image's object descriptor
            //id with the object descriptor id from the M2M output image before passing the
            //array to the CSITX tiovx node.
            obj->csitx_image_arr = vxCreateObjectArray(obj->context, (vx_reference)obj->display_m2m_output_image, num_capture_frames);
    
            uint32_t m2m_image_obj_desc_index;
            uint32_t object_array_desc_index;
            tivx_obj_desc_object_array_t *object_array_info;
    
            //Get the m2m output image's object descriptor id
            m2m_image_obj_desc_index = obj->display_m2m_output_image->base.obj_desc->obj_desc_id;
    
            //Get the csitx image object array's object descriptor id, and use it to obtain
            //a pointer to the array's tivx_obj_desc_obj_array_t structure.
            object_array_desc_index = obj->csitx_image_arr->base.obj_desc->obj_desc_id;
            object_array_info = (tivx_obj_desc_object_array_t *)ownObjDescGet(object_array_desc_index);
            
            //replace object descriptor id for the first image object in the array with object
            //descriptor id of the m2m output image
            object_array_info->obj_desc_id[0] = m2m_image_obj_desc_index;
    
            //Now create the CSITX node
            obj->csitx_node = tivxCsitxNode(obj->graph, obj->csitx_config, obj->csitx_image_arr);
            vxSetNodeTarget(obj->csitx_node, VX_TARGET_STRING, TIVX_TARGET_CSITX2);
    

    If you can think of a cleaner way to assign the display_m2m_output_image's info to the new vx_image object in the array, let me know.  Otherwise, you can consider this thread closed.

    Thanks.

    -Pete

    P.S. You may want to update the enable_CSITX_output.patch that is posted here, since my original code, including use of the vxCreateObjectArray() function, was based on this patch.

  • Hi Pete,

    This is not correct way. We should not change object descriptor id in the application. It is allocated and managed completely by the framework, so it should not be changed. 

    You are correct in the above case that creating an object array from an image just uses its properties and creates a completely new object array containing images and so display m2m's output is different from the input to the CSITX.

    and in this case, you should create an object array first, extract the 0th element of the object array using vxGetObjectArrayItem API and use it as output in DSS M2M and use the created object array as input to the CSITX node. In this way the output image in DSS M2M node and the input object array will be same. 

    Regards,

    Brijesh

  • Hi Brijesh,

    Thanks for the suggestion to extract a reference to the first image object in the object array, and then use that as the destination for the M2M node's output when creating the M2M node.  That is a much cleaner solution that my fix, and worked like a charm.  Slight smile

    Regards,

    -Pete

  • Hi Brijesh,

    After viewing the output of the CSITX port more carefully, I've noticed that any motion in the video image appears jerky and disjointed, much as if the camera is running at far less than 30 FPS.  This is despite the fact that the application receiving the CSITX output reports that is receiving 30 FPS over the MIPI interface.

    I noticed that the code I got from TI in the enable_CSITX_output patch configures the M2M node's output buffer to a buffer depth of 4, consistent with the outputs of the capture, VISS, and LDC nodes.  And if I print the address of the M2M node output buffer used during each frame, I can see that it cycles through 4 different addresses, which is consistent with the specified buffer depth.

    However, when I print the address the CSITX node is using as it's input, it is always the same address, equal to one of the four buffers that the M2M node is using for output.  So it seems the choppy motion effects I'm seeing in the CSITX video output is due to the fact that the CSITX node is seeing only one out of every four frames being output by the M2M node (and is retransmitting each frame it does receive four times).

    When I look at a node like the VISS node or the M2M node, which are receiving input from nodes whose outputs each have a buffer depth of four, I don't see any configuration step that tells the VISS or M2M node the buffer depth of the input it is receiving --it seems to be determined implicitly by the openVX framework.  At yet the CSITX node does not seem to operate the same way.

    Am I missing something?  Is there something I need to do when configuring the CSITX node to tell it that the upstream M2M node's output buffer has a depth of four?

    Thanks.

    -Pete

  • Hi Pete,

    Is DSS M2M node replicated? I am suspecting that it is not replicated and so object array that we created is also not allocated multiple times. Can you please replicating the DSS M2M node? I think DSS has enough MHz, so should be able to use for multiple channels. 

    Lets see if this works, we can think about proper solution. 

    Regards,

    Brijesh