Unable to get camera stream from Orin NX

We’re developing a GMSL camera system for Orin NX. We built the drivers for the cameras we’re running over an AGX Xavier Devkit running JetPack 5.1.2 and the cameras are working fine and streaming.
Then we started porting the drivers and device trees to Orin NX and this is where we’re stuck.

The NVCSI/VI layer don’t seem to be getting any pixels out of the camera , so we hit a timeout on vi_capture_status which triggers this error: “uncorr_err: request timed out after %d ms\n”
We’ve checked that the sensor actually produces frames. Both the ser and dser are receiving packets but nothing reaches the Orin NX.
We’re out of ideas as to what could be the cause, as there’s no error messages anywhere in the system. We suspect there’s something about the Orin NX that makes it behave differently than the AGX Xavier that we don’t know about.

Below you can find some logs and our device tree. We are trying to make the ox05b_a working. It is connected physically to port A.

Any idea that would get us unstuck is highly appreciated.
dmesg.log (70.1 KB)
trace.log (4.2 KB)
tegra234-orin-nx-cti-NGX010-ox05b.txt (8.4 KB)

Did you try connect to another port?

Hi @alexander.soklev
From the device-tree you posted I noticed that the second camera node (ox05b_c@36) was set to be on the serial_a:

tegra_sinterface = "serial_a";

This is a clear mismatch, it might have caused issues when trying to capture. This should be updated to:

tegra_sinterface = "serial_c";

How are you testing for the video output? I would recommend using v4l2-ctl to check if you are able to receive data from the sensors

v4l2-ctl -d /dev/video0 --set-fmt-video=width=2592,height=1944,pixelformat=< YOUR SENSOR PIXEL FORMAT> --set-ctrl bypass_mode=0 --stream-mmap

Thanks for your replied.
@ShaneCCC yep, tried all ports, same behaviour
@jafeth.garcia Thanks for pointing that copy/paste error! Though it’s not the cause for the troubles. We do try to stream with V4L as that involves less clutter than gstreamer and argus.
Any other idea would be greatly appreciated.
By the way, somethig we noticed is that enabling kernel traces are much less verbose than previously on the Xavier systems. Is there another way to enable more verbose NVCSI/VI traces?

Suppose if NVCSI/VI receive data from sensor should show more information but from your attached file looks like NVCSI/VI didn’t receive any data from MIPI bus. Maybe you need to probe the MIPI signal to confirm it.

Hi @alexander.soklev
It possible that the GMSL settings in the device-tree also need some changes. I noticed that both cameras are connected to the same src-csi-port and dst-csi-port. Also check the num-lanes are correct:

            gmsl-link {
				src-csi-port = "b";
				dst-csi-port = "a";
				serdes-csi-link = "a";
				csi-mode = "1x4";
				num-lanes = <4>;
				streams = "ued-u1", "raw12";

Is the camera device being detected by the Orin board?
Can you read/write registers from the camera or is communication with it not possible?

The Orin board does detect the camera and it shows as a v4l device. Probing of the ser/des/sensor devices during initialization goes without errors. We’ve verified that we can communicate with the devices over i2c. When we start streaming, we can see the sensor frame counters are incremented and we can see in the ser/des that the packet counters are also incremented. Still, the Orin doesn’t seem to be getting any of that information.

@alexander.soklev if the sensor is sending data but the Orin is not able to correctly receive the data, it sounds like the issue is with the timing settings on either sensor or driver/device-tree. There might be mismatching CLK frequencies or settings that is causing for the data to be discarded.