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.

Help Debugging DM365 Single-Shot Resize lockup

I am using DVSDK 2_10_01_18 with DM365, and have configured the Resizer to use single-shot mode.  I boot the kernel with "dm365_imp.oper_mode=1".  I configure the Resizer with UYVY input format, and 420SP output.  It works some of the time on our board; when it doesn't work, the Resize_execute function never returns.  Our board is USB powered, and replugging the board (hard reset) will sometimes correct the issue.  If the problem occurs, it will always continue to occur after rebooting the board from the console (soft-reset).  The problem does not occur on the EVM board using the exact same kernel image and test program.  I'm looking for advice on how to solve this problem on my own.

I've traced the Resize_execute call to the kernel function imp_common_start() in imp_common.c at the line "wait_for_completion_interruptible(&(imp_serializer_info.sem_isr));" and the completion event never comes: the imp_common_isr() function never gets called.  I used imp_hw_if->dump_hw_config() to print the registers, and they are exactly the same for the normal and problem cases (aside from the ENABLE registers in the normal case, which apparently get cleared when the single-shot operation completes.)  Here are the registers from the problem case:

[   50.560000] **************************************************
[   50.560000] Operation mode = SINGLE SHOT
[   50.570000] Resizer not chained
[   50.570000] Serializer is disabled
[   50.570000] IPIPEIF Registers
[   50.580000] **************************************************
[   50.580000] IPIPEIF ENABLE = 0x1
[   50.580000] IPIPEIF CFG = 0x40d
[   50.590000] IPIPEIF PPLN = 0x2d8
[   50.590000] IPIPEIF LPFR = 0x1ea
[   50.590000] IPIPEIF HNUM = 0x2d0
[   50.600000] IPIPEIF VNUM = 0x1e0
[   50.600000] IPIPEIF ADDRU = 0x437
[   50.600000] IPIPEIF ADDRL = 0x7100
[   50.610000] IPIPEIF ADOFS = 0x2d
[   50.610000] IPIPEIF RSZ = 0x10
[   50.610000] IPIPEIF GAIN = 0x200
[   50.620000] IPIPEIF DPCM = 0x0
[   50.620000] IPIPEIF CFG2 = 0x0
[   50.620000] IPIPEIF INIRSZ = 0x0
[   50.630000] IPIPEIF OCLIP = fff
[   50.630000] IPIPEIF DTUDF = 0
[   50.630000] IPIPEIF CLKDIV = 5
[   50.640000] IPIPEIF DPC1 = 0
[   50.640000] IPIPEIF DPC2  = 0
[   50.640000] IPIPEIF DFSGVL  = 0
[   50.650000] IPIPEIF DFSGTH  = fff
[   50.650000] IPIPEIF RSZ3A  = 10
[   50.650000] IPIPEIF INIRSZ3A  = 0
[   50.650000] IPIPE Registers
[   50.660000] **************************************************
[   50.660000] IPIPE_SRC_EN = 0x0
[   50.670000] IPIPE_SRC_MODE = 0x0
[   50.670000] IPIPE_SRC_FMT = 0x0
[   50.670000] IPIPE_SRC_COL = 0xe4
[   50.680000] IPIPE_SRC_VPS = 0x0
[   50.680000] IPIPE_SRC_VSZ = 0x0
[   50.680000] IPIPE_SRC_HPS = 0x0
[   50.690000] IPIPE_SRC_HSZ = 0x1
[   50.690000] IPIPE_SEL_SBU = 0x0
[   50.690000] IPIPE_DMA_STA = 0x0
[   50.700000] IPIPE_GCK_MMR = 0x1
[   50.700000] IPIPE_GCK_PIX = 0xe
[   50.700000] Resizer Registers
[   50.700000] **************************************************
[   50.720000] RSZ_SRC_EN = 0x1
[   50.720000] RSZ_SRC_MODE = 0x1
[   50.720000] RSZ_SRC_FMT0 = 0x1
[   50.720000] RSZ_SRC_FMT1 = 0x0
[   50.720000] RSZ_SRC_VPS = 0x0
[   50.730000] RSZ_SRC_VSZ = 0x1df
[   50.730000] RSZ_SRC_HPS = 0x0
[   50.730000] RSZ_SRC_HSZ = 0x2cf
[   50.740000] RSZ_DMA_RZA = 0x0
[   50.740000] RSZ_DMA_RZB = 0x0
[   50.740000] RSZ_DMA_STA = 0x0
[   50.740000] RSZ_GCK_MMR = 0x1
[   50.750000] RSZ_GCK_SDR = 0x1
[   50.750000] RSZ_IRQ_RZA = 0x1fff
[   50.750000] RSZ_IRQ_RZB = 0x1fff
[   50.760000] RSZ_YUV_Y_MIN = 0x0
[   50.760000] RSZ_YUV_Y_MAX = 0xff
[   50.760000] RSZ_YUV_C_MIN = 0x0
[   50.770000] RSZ_YUV_C_MAX = 0xff
[   50.770000] RSZ_YUV_PHS = 0x0
[   50.770000] RSZ_SEQ = 0x0
[   50.770000] RSZ A EN = 0x1
[   50.780000] RSZ A MODE = 0x1
[   50.780000] RSZ A 420 = 0x3
[   50.780000] RSZ A I_VPS = 0x0
[   50.790000] RSZ A I_HPS = 0x0
[   50.790000] RSZ A O_VSZ = 0x1df
[   50.790000] RSZ A O_HSZ = 0x2cf
[   50.800000] RSZ A V_PHS_Y = 0x0
[   50.800000] RSZ A V_PHS_C = 0x0
[   50.800000] RSZ A V_DIF = 0x100
[   50.810000] RSZ A V_TYP = 0x0
[   50.810000] RSZ A V_LPF = 0x0
[   50.810000] RSZ A H_PHS = 0x0
[   50.810000] RSZ A H_PHS_ADJ = 0x0
[   50.820000] RSZ A H_DIF = 0x100
[   50.820000] RSZ A H_TYP = 0x0
[   50.820000] RSZ A H_LPF = 0x0
[   50.830000] RSZ A DWN_EN = 0x0
[   50.830000] RSZ A DWN_AV = 0x0
[   50.830000] RSZ A RGB_EN = 0x0
[   50.840000] RSZ A RGB_TYP = 0x0
[   50.840000] RSZ A RGB_BLD = 0x0
[   50.840000] RSZ A SDR_Y_BAD_H = 0x8705
[   50.850000] RSZ A SDR_Y_BAD_L = 0xc000
[   50.850000] RSZ A SDR_Y_SAD_H = 0x8705
[   50.850000] RSZ A SDR_Y_SAD_L = 0xc000
[   50.860000] RSZ A SDR_Y_OFT = 0x2e0
[   50.860000] RSZ A SDR_Y_Y_PTR_S = 0x0
[   50.860000] RSZ A SDR_Y_PTR_E = 0x1e0
[   50.870000] RSZ A SDR_C_BAD_H = 0x870b
[   50.870000] RSZ A SDR_C_BAD_L = 0x2400
[   50.880000] RSZ A SDR_C_SAD_H = 0x870b
[   50.880000] RSZ A SDR_C_SAD_L = 0x2400
[   50.880000] RSZ A SDR_C_OFT = 0x2e0
[   50.890000] RSZ A SDR_C_PTR_S = 0x0
[   50.890000] RSZ A SDR_C_PTR_E = 0xf0
[   50.890000] RSZ B EN = 0x0
[   50.900000] RSZ B MODE = 0x1
[   50.900000] RSZ B 420 = 0x0
[   50.900000] RSZ B I_VPS = 0x0
[   50.910000] RSZ B I_HPS = 0x0
[   50.910000] RSZ B O_VSZ = 0x1df
[   50.910000] RSZ B O_HSZ = 0x27f
[   50.910000] RSZ B V_PHS_Y = 0x0
[   50.920000] RSZ B V_PHS_C = 0x0
[   50.920000] RSZ B V_DIF = 0x100
[   50.920000] RSZ B V_TYP = 0x0
[   50.930000] RSZ B V_LPF = 0x0
[   50.930000] RSZ B H_PHS = 0x0
[   50.930000] RSZ B H_PHS_ADJ = 0x0
[   50.940000] RSZ B H_DIF = 0x100
[   50.940000] RSZ B H_TYP = 0x0
[   50.940000] RSZ B H_LPF = 0x0
[   50.950000] RSZ B DWN_EN = 0x0
[   50.950000] RSZ B DWN_AV = 0x0
[   50.950000] RSZ B RGB_EN = 0x0
[   50.950000] RSZ B RGB_TYP = 0x0
[   50.960000] RSZ B RGB_BLD = 0x0
[   50.960000] RSZ B SDR_Y_BAD_H = 0x0
[   50.960000] RSZ B SDR_Y_BAD_L = 0x0
[   50.970000] RSZ B SDR_Y_SAD_H = 0x0
[   50.970000] RSZ B SDR_Y_SAD_L = 0x0
[   50.980000] RSZ B SDR_Y_OFT = 0x500
[   50.980000] RSZ B SDR_Y_Y_PTR_S = 0x0
[   50.980000] RSZ B SDR_Y_PTR_E = 0x1e0
[   50.990000] RSZ b SDR_C_BAD_H = 0x0
[   50.990000] RSZ B SDR_C_BAD_L = 0x0
[   50.990000] RSZ B SDR_C_SAD_H = 0x0
[   51.000000] RSZ B SDR_C_SAD_L = 0x0
[   51.000000] RSZ B SDR_C_OFT = 0x0
[   51.000000] RSZ B SDR_C_PTR_S = 0x0
[   51.010000] RSZ B SDR_C_PTR_E = 0xf0

Any advice on how to proceed in debugging this problem would be greatly appreciated!

  • Perhaps this is related to Errata sprz294c Advisory 1.2.6 "The Buffer Logic of VPSS is Not Reset by System Reset Pin" - that could explain why the VPSS_RSZ_INT_SDR interrupt is never received.

    We have added the code in the workaround for this advisory and the problem appears to be resolved.