Watchdog Timer Error‑Interrupt Status Is Masked Out Due to Incorrect Masking in the Callback Function for all VHWA IPs (DOF,SDE,MSC,VISS,LDC,NF)

XMLWordPrintable

    • Type: Bug
    • Resolution: Fixed
    • Priority: Urgent
    • Imaging System Software
    • ISS-1171
    • PSDK_11.0
    • psdk_11.1.1
    • Hide
      j721s2-evm
      j742s2-evm
      j784s4-evm
      Show
      j721s2-evm j742s2-evm j784s4-evm

      A bug has been identified in the Watchdog Timer time-out error interrupt callback defined in the target kernels in the imaging layer where the interrupt status is set incorrectly due to incorrect masking of the error event passed by the driver.

      As a result, the system may fail to detect related error conditions, allowing actual failures to go undetected and specifically prevent detection of watchdog timer time-out error. This can leave the IP in an unrecovered error state until a manual reset is performed.

      Workaround/Fix:

      The below fix can be used in the code base to overcome the issue.

      1. /kernels/hwa/dmpac_dof/vx_dmpac_dof_target.c
      @@ -2499,7 +2499,7 @@ static void tivxDmpacDofWdTimerErrorCb(Fvid2_Handle handle, uint32_t wdTimerErrE
           tivxDmpacDofObj *dof_obj = (tivxDmpacDofObj *)appData;
           if (NULL != dof_obj)
           {

      •        dof_obj->wdTimerErrStatus = dof_obj->enableErrorEvents & wdTimerErrEvents;
        +        dof_obj->wdTimerErrStatus = dof_obj->wdTimererrEvtPrms.WdTimererrEvents & wdTimerErrEvents;
         
                 if(0u != dof_obj->wdTimerErrStatus)
                 {
        2. /kernels/hwa/dmpac_sde/vx_dmpac_sde_target.c
        @@ -1430,7 +1430,7 @@ static void tivxDmpacSdeWdTimerErrorCb(Fvid2_Handle handle, uint32_t wdTimerErrE
             tivxDmpacSdeObj *sde_obj = (tivxDmpacSdeObj *)appData;
             if (NULL != sde_obj)
             {
      •        sde_obj->wdTimerErrStatus = sde_obj->enableErrorEvents & wdTimerErrEvents;
        +        sde_obj->wdTimerErrStatus = sde_obj->wdTimererrEvtPrms.WdTimererrEvents & wdTimerErrEvents;
                 
                 if(0u != sde_obj->wdTimerErrStatus)
                 {
        3. /kernels/hwa/vpac_ldc/vx_vpac_ldc_target.c
        @@ -3212,7 +3212,7 @@ static void tivxVpacLdcWdTimerErrorCb(Fvid2_Handle handle, uint32_t wdTimerErrEv
             tivxVpacLdcObj *ldc_obj = (tivxVpacLdcObj *)appData;
             if (NULL != ldc_obj)
             {
      •        ldc_obj->wdTimerErrStatus = ldc_obj->enableErrorEvents & wdTimerErrEvents;
        +        ldc_obj->wdTimerErrStatus = ldc_obj->wdTimererrEvtPrms.WdTimererrEvents & wdTimerErrEvents;
         
                 if(0u != ldc_obj->wdTimerErrStatus)
                 {
        4. /kernels/hwa/vpac_msc/vx_vpac_msc_multi_scale_output_target.c
        @@ -3602,7 +3602,7 @@ static void tivxVpacMscMultiScaleWdTimerErrorCb(Fvid2_Handle handle, uint32_t wd
         
             if (NULL != msc_obj)
             {
      •        msc_obj->wdTimerErrStatus = msc_obj->enable_error_events & wdTimerErrEvents;
        +        msc_obj->wdTimerErrStatus = msc_obj->wdTimererrEvtPrms.WdTimererrEvents & wdTimerErrEvents;
         
                 if(0u != msc_obj->wdTimerErrStatus)
                 {
        5. /kernels/hwa/vpac_msc/vx_vpac_msc_pyramid_target.c
        @@ -3259,7 +3259,7 @@ static void tivxVpacMscPmdWdTimerErrorCb(Fvid2_Handle handle, uint32_t wdTimerEr
             
             if (NULL != msc_obj)
             {
      •        msc_obj->wdTimerErrStatus = msc_obj->enable_error_events & wdTimerErrEvents;
        +        msc_obj->wdTimerErrStatus = msc_obj->wdTimererrEvtPrms.WdTimererrEvents & wdTimerErrEvents;
         
                 if(0u != msc_obj->wdTimerErrStatus)
                 {
        6. /kernels/hwa/vpac_nf/vx_vpac_nf_bilateral_target.c
        @@ -1917,7 +1917,7 @@ static void tivxVpacNfBilateralWdTimerErrorCb(Fvid2_Handle handle, uint32_t wdTi
             tivxVpacNfBilateralObj *nf_bilateral_obj = (tivxVpacNfBilateralObj *)appData;
             if (NULL != nf_bilateral_obj)
             {
      •        nf_bilateral_obj->wdTimerErrStatus = nf_bilateral_obj->enableErrorEvents & wdTimerErrEvents;
        +        nf_bilateral_obj->wdTimerErrStatus = nf_bilateral_obj->wdTimererrEvtPrms.WdTimererrEvents & wdTimerErrEvents;
         
                 if(0u != nf_bilateral_obj->wdTimerErrStatus)
                 {
        7. /kernels/hwa/vpac_nf/vx_vpac_nf_generic_target.c
        @@ -1734,7 +1734,7 @@ static void tivxVpacNfGenericWdTimerErrorCb(Fvid2_Handle handle, uint32_t wdTime
             tivxVpacNfGenericObj *nf_generic_obj = (tivxVpacNfGenericObj *)appData;
             if (NULL != nf_generic_obj)
             {
      •        nf_generic_obj->wdTimerErrStatus = nf_generic_obj->enableErrorEvents & wdTimerErrEvents;
        +        nf_generic_obj->wdTimerErrStatus = nf_generic_obj->wdTimererrEvtPrms.WdTimererrEvents & wdTimerErrEvents;
         
                 if(0u != nf_generic_obj->wdTimerErrStatus)
                 {
        8. /kernels/hwa/vpac_viss/vx_vpac_viss_target.c
        @ -3738,7 +3738,7 @@ static void tivxVpacVissWdTimerErrorCb(Fvid2_Handle handle, uint32_t wdTimerErrE
             tivxVpacVissObj *vissObj = (tivxVpacVissObj *)appData;
             if (NULL != vissObj)
             {
      •        vissObj->wdTimerErrStatus = vissObj->enableErrorEvents & wdTimerErrEvents;
        +        vissObj->wdTimerErrStatus = vissObj->wdTimererrEvtPrms.WdTimererrEvents & wdTimerErrEvents;
         
                 if(0u != vissObj->wdTimerErrStatus)
                 {

            Assignee:
            TI User
            Reporter:
            TI User
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:

                Connection: Intermediate to External PROD System
                EXTSYNC-5979 - Watchdog Timer Error‑Interrupt Stat...
                SYNCHRONIZED
                • Last Sync Date: