Hi,
We have a reproducible CSI-2 corruption that follows the NVCSI CIL-A partition exactly,
and we would like guidance on the correct brick lane configuration (lane_swizzle) or the next
diagnostic step.
Setup
-
Carrier: Connect Tech Boson for Orin (NGX020)
-
Module: Jetson Orin NX 16GB
-
L4T 36.4.4 / JetPack 6.2.1, kernel 5.15.148-tegra (Connect Tech BSP ORIN-NX-NANO-36.4.4-V005)
-
Sensors: 4x Allied Vision Alvium 1800 C-511c, MIPI CSI-2, each in 2-lane mode
(num_lanes = “2”, avt_csi2 driver) -
Capture: V4L2 / GStreamer with bypass_mode=0 (not Argus)
Symptom
Four identical cameras, identical device-tree mode entries. Two ports stream a perfect image
(verified: correct geometry, correct colors, zero artifacts). The other two ports produce heavy
per-line color-streak (“rainbow”) corruption on every frame — scene geometry is faintly
recognizable, so the packet stream arrives, but the pixel data is scrambled line by line.
Swapping cameras between connectors keeps the fault on the same two connectors, so the cameras are not the cause.
The corruption maps 1:1 to the CIL-A partition of BOTH bricks:
| tegra_sinterface | port-index | partition | result |
|---|---|---|---|
| serial_a | 0 | brick0 CIL-A | CORRUPTED |
| serial_c | 2 | brick1 CIL-A | CORRUPTED |
| serial_b | 1 | brick0 CIL-B | clean |
| serial_d | 3 | brick1 CIL-B | clean |
On this carrier the CIL-A ports are the x4-capable connectors and route through an on-board
MIPI switch; the CIL-B ports are direct x2 routes. All four run at link-frequency 750 MHz,
discontinuous_clk = “no”, cil_settletime = “0”.
VI errors while streaming the corrupted ports
The attached rtcpu trace (10-buffer capture on the corrupted port) shows a continuous storm of
correctable stream errors on the CIL-A partition itself — about 10,500 lines of
rtcpu_nvcsi_intr: class:CORRECTABLE_ERR type:STREAM_VC phy:0 cil:0 status:0x00000004
— plus CSIMUX_FRAME errors (data 0x…00600060 / 0x…00e00060), CHANSEL_SHORT_FRAME and
CHANSEL_FAULT (data 0x470100) events. The clean CIL-B ports do not generate this storm.
tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame N, flags: 0, err_data 0x400061
(PIXEL_MISSING_LE + PIXEL_RUNAWAY + VI_PFSD_FAULT; occasionally err_data 0x20000 / FORCE_FE).
The per-line color streaking looks like data-lane byte mis-interleave on the CIL-A half of the
brick.
Already tried — no fix (all verified with GStreamer captures):
- cil_settletime = “0” is our default. Any value > 0 blanks the stream to all-zero frames on
these ports, at both 750 MHz and 200 MHz. - link-frequency sweep 750 → 375 → 200 MHz: corruption reduces but never clears (sensor driver floors at ~196.4 MHz).
- deskew_initial_enable = “true” on the CIL-A ports: no change.
- Clock boost per your usual recipe (nvpmodel -m 0, jetson_clocks, bpmp mrq_rate_locked=1 and rate=max_rate for vi/isp/nvcsi/emc — confirmed vi 832 MHz, nvcsi 642.9 MHz, emc 3199 MHz): no change.
- All 8 lane_polarity values, both MIPI-switch positions, data-lane reorder in the endpoint,
every pixel format the camera offers, byte-order/offset reinterpretation of the raw buffer:
no change.
A similar report on this forum (“Corrupted Camera stream with 4 lane MIPI port in Orin NX
series” — Connect Tech carrier, CSI0+CSI1 corrupted while CSI2+CSI3 clean with the same
camera) was solved by cil_settletime = “0”. Our tree already has that, and the corruption
remains, which is why we suspect a CIL-A lane-order issue rather than timing.
Questions
- When a brick’s CIL-A partition is used in 2-lane DPHY mode on Orin NX, is a non-zero
brick_config.lane_swizzle(csi5 NVCSI_PHY brick config) ever required? How is the correct swizzle value determined for CIL-A vs CIL-B? - Is there any device-tree or V4L2 mechanism to set the brick lane swizzle, or is patching
csi5_fops.c the only way? - Given err_data 0x400061 with otherwise healthy frame delivery, do you agree this points to
lane/byte mis-ordering at the PHY level, or is there another known cause we should chase? - We have the rtcpu trace log captured while streaming a corrupted port
(modprobe rtcpu_debug + tegra_rtcpu/freertos/camera_common events) — attached. What should we look for?
Attachments: device tree source, rtcpu trace log, sample frame from a clean port and a
corrupted port (same scene, same camera model, same settings).
rtcpu_trace_CSI0.txt (1.7 MB)
device_tree_v7_dts.txt (319.5 KB)
Thanks!

