Custom OV5647 on Jetson Orin NX (P3767/P3768): probe/bind succeeds, /dev/video0 exists, but capture times out with uncorr_err

I am bringing up a custom OV5647 tegracam driver on Jetson Orin NX (P3767) with P3768 carrier.

  • Jetson Orin NX (P3767) + P3768
  • JetPack / L4T: R36.5.0
  • Kernel: 5.15.185-tegra
  • Camera: OV5647 Raspberry Pi v1.3-style module via CSI adapter cable

Current status:

  • Custom OV5647 driver probes successfully
  • Sensor chip ID is read correctly:
    • 0x300a = 0x56
    • 0x300b = 0x47
    • chip ID = 0x5647
  • Sensor binds successfully to tegra-capture-vi
  • /dev/video0 is created
  • media graph looks correct
  • VIDIOC_STREAMON succeeds

But capture always fails with:
tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 2500 ms

So the control path seems OK, but no valid frame reaches VI.

Probe log:
[ 60.942192] ov5647_mini 9-0036: ov5647_probe: starting probe
[ 60.942200] ov5647_mini 9-0036: ov5647_probe: could not force MCLK extperiph1
[ 60.942377] ov5647_mini 9-0036: tegracam sensor driver:ov5647_mini_v2.0.6
[ 60.942381] ov5647_mini 9-0036: ov5647_board_setup: calling ov5647_power_on
[ 60.953180] ov5647_mini 9-0036: ov5647_board_setup: ov5647_power_on done
[ 60.953385] ov5647_mini 9-0036: ov5647_board_setup: chip ID MSB read = 0x56
[ 60.953583] ov5647_mini 9-0036: ov5647_board_setup: chip ID LSB read = 0x47
[ 60.953586] ov5647_mini 9-0036: ov5647_board_setup: detected OV5647 chip ID 0x5647
[ 60.959290] tegra-camrtc-capture-vi tegra-capture-vi: subdev ov5647_mini 9-0036 bound

Streaming log:
[ 61.026311] ov5647_mini 9-0036: ov5647_set_mode: writing common mode table
[ 61.043772] ov5647_mini 9-0036: ov5647_set_mode: writing 640x480@30 mode table
[ 61.049459] ov5647_mini 9-0036: ov5647_set_mode: mode tables applied
[ 61.049471] ov5647_mini 9-0036: ov5647_start_streaming: writing start stream table
[ 61.053809] ov5647_mini 9-0036: ov5647_start_streaming: start stream table applied
[ 61.053819] ov5647_mini 9-0036: ov5647_dump_regs: 0x0100 = 0x01
[ 61.053824] ov5647_mini 9-0036: ov5647_dump_regs: 0x3000 = 0x0f
[ 61.053828] ov5647_mini 9-0036: ov5647_dump_regs: 0x3001 = 0xff
[ 61.053833] ov5647_mini 9-0036: ov5647_dump_regs: 0x3002 = 0xe4
[ 61.053846] ov5647_mini 9-0036: ov5647_dump_regs: 0x4800 = 0x04
[ 61.053851] ov5647_mini 9-0036: ov5647_dump_regs: 0x4837 = 0x16
[ 61.053855] ov5647_mini 9-0036: ov5647_dump_regs: 0x380c = 0x07
[ 61.053860] ov5647_mini 9-0036: ov5647_dump_regs: 0x380d = 0x3c
[ 61.053864] ov5647_mini 9-0036: ov5647_dump_regs: 0x380e = 0x01
[ 61.053868] ov5647_mini 9-0036: ov5647_dump_regs: 0x380f = 0xf8
[ 63.708522] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 2500 ms
[ 66.268519] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 2500 ms
[ 68.828707] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 2500 ms

media-ctl -p:
Media controller API version 5.15.185

Media device information

driver tegra-camrtc-ca
model NVIDIA Tegra Video Input Device
driver version 5.15.185

Device topology

  • entity 1: 13e00000.host1x:nvcsi@15a00000- (2 pads, 2 links)
    pad0: Sink ← “ov5647_mini 9-0036”:0 [ENABLED]
    pad1: Source → “vi-output, ov5647_mini 9-0036”:0 [ENABLED]

  • entity 4: ov5647_mini 9-0036 (1 pad, 1 link)
    device node /dev/v4l-subdev1
    pad0: Source
    [fmt:SBGGR10_1X10/640x480@1/60 field:none colorspace:srgb]
    → “13e00000.host1x:nvcsi@15a00000-”:0 [ENABLED]

  • entity 6: vi-output, ov5647_mini 9-0036 (1 pad, 1 link)
    device node /dev/video0
    pad0: Sink
    ← “13e00000.host1x:nvcsi@15a00000-”:1 [ENABLED]

v4l2-ctl --list-formats-ext -d /dev/video0:
[0]: ‘BG10’ (10-bit Bayer BGBG/GRGR)
Size: Discrete 640x480
Interval: Discrete 0.017s (60.000 fps)

What I already tried:

  • Ported DTS from Jetson IMX219-C reference
  • Updated sensor node for OV5647
  • Changed discontinuous_clk and tested
  • Changed reset-gpios polarity and tested
  • Adjusted OV5647 mode table
  • Enabled OV5647 internal color bar test pattern (0x503d = 0x80)
  • Disabled gain/exposure/frame-rate writes during bring-up
  • Confirmed stream-related registers keep expected values after STREAMON

At this point the sensor clearly probes and enters streaming state at register level, but VI still times out and no frame is captured.

Questions:

  1. Which DTS / CSI link settings should I inspect next on tegra234/P3767-P3768 for OV5647 in this exact situation?
  2. Is there any known OV5647 reference DTS / tegracam driver for Jetson Orin NX / P3767-P3768?
  3. Should I add a dedicated pwdn-gpios path for OV5647 instead of reusing reset-gpios semantics from the IMX219-based reference?https://drive.google.com/drive/folders/1pIGo3pTRfN6bDVHZEd9_Pos7CvYHT2op?usp=sharing

Make sure the port-index/bus-width match the HW.

Get the trace log to know more.

sudo su
modprobe rtcpu_debug

echo 1 > /sys/kernel/debug/tracing/tracing_on
echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb
echo 1 > /sys/kernel/debug/tracing/events/tegra_rtcpu/enable
echo 1 > /sys/kernel/debug/tracing/events/freertos/enable
echo 3 > /sys/kernel/debug/camrtc/log-level
echo 1 > /sys/kernel/debug/tracing/events/camera_common/enable
echo > /sys/kernel/debug/tracing/trace

v4l2-ctl --stream-mmap -c bypass_mode=0

cat /sys/kernel/debug/tracing/trace

Thanks. I checked the trace log as suggested.

Current status:

  • probe/bind succeeds
  • sensor ID 0x5647 is read correctly
  • /dev/video0 is created
  • VIDIOC_STREAMON succeeds
  • but capture still times out with uncorr_err

The RTCPU/NVCSI trace shows repeated PHY interrupt / correctable PHY errors after stream-on, for example:

rtcpu_nvcsi_intr … class:CORRECTABLE_ERR type:PHY_INTR phy:1 cil:0 st:0 vc:0 …

I also tried several DTS-side experiments:

  • changed discontinuous_clk
  • changed reset-gpios polarity
  • tried different lane_polarity values
  • tried cil_settletime tuning
  • switched to 1920x1080@30 test mode
  • enabled OV5647 internal test pattern

These changes affect the PHY interrupt pattern, but I still do not get valid frames into VI.

So at this point it looks like the issue is in the CSI PHY / lane / link path rather than I2C or basic driver probe.

Would you like me to share:

  1. the current DTS endpoint/sensor node
  2. the current RTCPU trace log
  3. the driver power_on / start_streaming sections
    so you can help verify whether port-index / bus-width / lane mapping match the hardware correctly?

Trace excerpt:

tegra_channel_capture_setup: vnc_id 0 W 1920 H 1080 fmt c4
tegra_channel_set_stream: ov5647_mini 9-0036 : 0x1
rtcpu_nvcsi_intr: … class:CORRECTABLE_ERR type:PHY_INTR phy:1 cil:0 st:0 vc:0 status:0x00000001
rtcpu_nvcsi_intr: … class:CORRECTABLE_ERR type:PHY_INTR phy:1 cil:0 st:0 vc:0 status:0x00000009

This tell the lane control error.

It’s devkit? Do you try another connector?

Title:
OV5647 on CAM0 (Orin NX devkit) - STREAMON succeeds but capture times out, NVCSI PHY_INTR errors

Post body:
Hi NVIDIA team,

I am bringing up an OV5647 (Raspberry Pi Camera Module v1.3) on Jetson Orin NX devkit (P3767 + P3768).

Hardware setup:

Camera: OV5647, Pi Camera v1.3
Connector: CAM0
Ribbon cable marking: AWM 20706 105C 60V VW-1
Current status:

Driver probe/bind succeeds
Sensor ID 0x5647 is read correctly
/dev/video0 is created
Media graph looks correct (sensor → nvcsi → vi)
VIDIOC_STREAMON succeeds
But real capture still times out and output file size is 0
Runtime DT mode0 currently shows:

discontinuous_clk: yes
cil_settletime: 0
line_length: 1936
pix_clk_hz: 56000000
Capture test:
timeout 12 v4l2-ctl -d /dev/video0 --set-fmt-video=width=640,height=480,pixelformat=BG10 --stream-mmap=4 --stream-count=60 --stream-to=./ov5647_test.raw
Result:

rc=124
ov5647_test.raw size = 0
dmesg excerpt:

ov5647_set_mode: applying mode tables
ov5647_start_streaming: streaming started
tegra-capture-vi: uncorr_err: request timed out after 2500 ms (repeated)
From previous RTCPU/NVCSI trace I also saw repeated:

class: CORRECTABLE_ERR
type: PHY_INTR
phy:1 cil:0 st:0 vc:0
status: 0x00000001 and 0x00000009
I already tried:

discontinuous_clk changes
lane_polarity tuning
cil_settletime tuning
different OV5647 modes
internal test pattern
Could you help confirm:

For CAM0 on P3767 + P3768, what are the exact expected values for tegra_sinterface, port-index, bus-width, and lane_polarity?
For Tegra234, what do PHY_INTR status 0x1 and 0x9 indicate exactly (lane control, polarity, swap, clock lane issue)?
Does this symptom suggest connector/cable/lane mapping issue on CAM0, and should I test CAM1 with the same setup?
Do you have a known-good OV5647 DTS snippet for CAM0 on this devkit?
I can provide full trace log, full DTS nodes, and current driver power_on/start_streaming sections if needed.

Thanks.

Please verify on CAM1(CSI-C) you can reference to IMX219’s dts config.

Thanks

Is this still an issue to support? Any result can be shared?