Timing 720P 60FPS is not working when NVCSI port bus-width is set to 4


We are porting an HDMI-to-MIPI-CSI-2 function on Jetson Xavier NX platform.
The L4T version is R32.4.3.
We had successfully seen the preview of 720P@60FPS by referring to this topic.

We used the v4l2-ctl command to get some frames.

v4l2-ctl --device /dev/video0 --stream-mmap --set-fmt-video=width=1280,height=720,pixelformat=UYVY

And we used the following gstreamer command to get the preview.

gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,format=UYVY,width=1280,height=720,framerate=60/1' ! \
        nvvidconv ! 'video/x-raw(memory:NVMM),format=I420,width=1920,height=1080' ! nvoverlaysink

The 720P preview is OK when the bus-width is <2> in the device tree.
nvcsi@15a00000 {
    num-channels = <1>;
    #address-cells = <1>;
    #size-cells = <0>;

    csi_chan0: channel@0 {
        reg = <0>;
        ports { 
            #address-cells = <1>;
            #size-cells = <0>;
            port@0 {
                reg = <0>;
                tc358743_csi_in0: endpoint@0 {
                    port-index = <0>;
                    bus-width = <2>;
                    remote-endpoint = <&tc358743_out0>;
            port@1 {
                reg = <1>;
                tc358743_csi_out0: endpoint@1 {
                    remote-endpoint = <&tc358743_vi_in0>;

We try to move on by setting the bus-width from <2> to <4>.
However, after changing the bus-width to <4>, we cannot get frames by using the v4l2-ctl command.

                tc358743_csi_in0: endpoint@0 {
                    port-index = <0>;
-                    bus-width = <2>;
+                    bus-width = <4>;
                    remote-endpoint = <&tc358743_out0>;

In the dmesg, we saw the following reset log every 2.5 seconds when the v4l2-ctl command is running.
[   92.513060] tegra194-vi5 15c10000.vi: no reply from camera processor
[   92.513218] tegra194-vi5 15c10000.vi: uncorr_err: request timed out after 2500 ms
[   92.513404] tegra194-vi5 15c10000.vi: err_rec: attempting to reset the capture channel
[   92.515911] tegra194-vi5 15c10000.vi: err_rec: successfully reset the capture channel

We use the following scripts to trace the VI related log.

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 2 > /sys/kernel/debug/camrtc/log-level

In the trace log, we see these two lines which are NOT showing up when the bus-width is set as <2>.

kworker/1:2-1737  [001] ....    87.441401: rtcpu_nvcsi_intr: tstamp:3062917566 class:GLOBAL type:PHY_INTR0 phy:0 cil:0 st:0 vc:0 status:0x00000110
kworker/1:2-1737  [001] ....    87.441402: rtcpu_nvcsi_intr: tstamp:3062917566 class:CORRECTABLE_ERR type:PHY_INTR phy:0 cil:0 st:0 vc:0 status:0x00000110

The full trace logs are uploaded.
nvcsi_bw2.log (61.8 KB)
nvcsi_bw4.log (33.2 KB)

We are now not sure where we should keep debugging/digging.
Please advise how the 720P@60FPS can work with 4-lane NVCSI.

Does the sensor output as 4 lane mode too?
Have try to boost the clocks to try?

sudo su
echo 1 > /sys/kernel/debug/bpmp/debug/clk/vi/mrq_rate_locked
echo 1 > /sys/kernel/debug/bpmp/debug/clk/isp/mrq_rate_locked
echo 1 > /sys/kernel/debug/bpmp/debug/clk/nvcsi/mrq_rate_locked
cat /sys/kernel/debug/bpmp/debug/clk/vi/max_rate |tee /sys/kernel/debug/bpmp/debug/clk/vi/rate
cat /sys/kernel/debug/bpmp/debug/clk/isp/max_rate | tee  /sys/kernel/debug/bpmp/debug/clk/isp/rate
cat /sys/kernel/debug/bpmp/debug/clk/nvcsi/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/nvcsi/rate

Hi Shane,

Thank you for your help.

Yes, it is also 4-lane mode for the sensor output.
We follow the devicetree document to do the configuration.

After boosting the clocks as you suggested, the errors in trace and dmesg remain.
Is there any method we can check the VI or NVCSI is working under 4-lane mode?

In this doc, we see a 4-lane CSI is combined by CSI A and CSI B.
Is it possible we can check the combination?

You can print the configure by csi4_fops.c/vi4_fops.c to check. And I think the tc358743 may have the same configure to print out to check.