Hi support,
We are facing to a kernel freeze when we try to read a registry value.
static void vi2_capture_error_status(struct tegra_camera_dev *cam)
{
u32 val = 0;
#ifdef DEBUG
val = TC_VI_REG_RD(cam, TEGRA_CSI_DEBUG_COUNTER_0);
pr_err("TEGRA_CSI_DEBUG_COUNTER_0 0x%08x\n", val);
#endif
val = TC_VI_REG_RD(cam, TEGRA_CSI_CSI_CIL_A_STATUS);
pr_err("TEGRA_CSI_CSI_CIL_A_STATUS 0x%08x\n", val);
val = TC_VI_REG_RD(cam, TEGRA_CSI_CSI_CILA_STATUS);
pr_err("TEGRA_CSI_CSI_CILA_STATUS 0x%08x\n", val);
val = TC_VI_REG_RD(cam, TEGRA_CSI_CSI_CIL_B_STATUS);
pr_err("TEGRA_CSI_CSI_CIL_B_STATUS 0x%08x\n", val);
val = TC_VI_REG_RD(cam, TEGRA_CSI_CSI_CIL_C_STATUS);
pr_err("TEGRA_CSI_CSI_CIL_C_STATUS 0x%08x\n", val);
val = TC_VI_REG_RD(cam, TEGRA_CSI_CSI_CIL_D_STATUS);
pr_err("TEGRA_CSI_CSI_CIL_D_STATUS 0x%08x\n", val);
val = TC_VI_REG_RD(cam, TEGRA_CSI_CSI_CIL_E_STATUS);
pr_err("TEGRA_CSI_CSI_CIL_E_STATUS 0x%08x\n", val);
val = TC_VI_REG_RD(cam, TEGRA_CSI_CSI_PIXEL_PARSER_A_STATUS);
pr_err("TEGRA_CSI_CSI_PIXEL_PARSER_A_STATUS 0x%08x\n", val);
val = TC_VI_REG_RD(cam, TEGRA_CSI_CSI_PIXEL_PARSER_B_STATUS);
pr_err("TEGRA_CSI_CSI_PIXEL_PARSER_B_STATUS 0x%08x\n", val);
val = TC_VI_REG_RD(cam, TEGRA_VI_CSI_0_ERROR_STATUS);
pr_err("TEGRA_VI_CSI_0_ERROR_STATUS 0x%08x\n", val);
val = TC_VI_REG_RD(cam, TEGRA_VI_CSI_1_ERROR_STATUS);
pr_err("TEGRA_VI_CSI_1_ERROR_STATUS 0x%08x\n", val);
}
When the readl function is invoked to read a CSI Status registry, the kernel hangs.
We get the following output on serial console:
[ 840.298821] Unhandled fault: imprecise external abort (0x1406) at 0x00000000
[ 840.299818] MSELECT error detected! status=0x3
[ 840.303089] MSELECT error detected! status=0x3
[ 840.309785] MSELECT error detected! status=0x3
[ 840.313216] MSELECT error detected! status=0x3
[ 840.317673] MSELECT error detected! status=0x3
[ 840.321241] MSELECT error detected! status=0x3
[ 840.328276] MSELECT error detected! status=0x3
[ 840.333134] MSELECT error detected! status=0x3
[ 840.338080] MSELECT error detected! status=0x3
[ 840.343026] MSELECT error detected! status=0x3
[ 840.347953] MSELECT error detected! status=0x3
[ 840.352898] MSELECT error detected! status=0x3
[ 840.357694] MSELECT error detected! status=0x3
[ 840.362680] MSELECT error detected! status=0x3
[ 840.367490] MSELECT error detected! status=0x3
Questions
- Why are we not able to read these registries value ?
- Why the TEGRA_CSI_CSI_CIL_A_INTERRUPT_MASK is not set on vi2.c so that we could get synchronous error events?
Infos
*Jetson TK1 R21.5
*kernel : 3.10.40
*We are using a HDMI to CSI-2 Bridge (From a third party manufacturer) on the Jetson TK1.
The driver tc358743 is used for this card.
Best regards,