Toshiba 4K HDMI to CSI (8-lane) bridge on TX2 NX

Following the instruction in Problem of getting data from MIPI CSI Jetson TX2, I added more debug info to check necessary parameters for gang mode :

diff --git a/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/channel.c b/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/channel.c
index 5de404504..4c88363dc 100644
--- a/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/channel.c
+++ b/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/channel.c
@@ -133,6 +133,10 @@ static void update_gang_mode(struct tegra_channel *chan)
                chan->valid_ports = 1;
        }
 
+        dev_info(&chan->video->dev,
+                        "[L4ES] %s: chan->gang_mode=%d, chan->valid_ports=%d, width=%d, height=%d\n",
+                        __func__, chan->gang_mode, chan->valid_ports, width, height);
+
        update_gang_mode_params(chan);
 }

diff --git a/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/graph.c b/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/graph.c
index 6c14896ad..3d26f8645 100644
--- a/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/graph.c
+++ b/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/graph.c
@@ -556,6 +556,8 @@ int tegra_vi_get_port_info(struct tegra_channel *chan,
                                dev_err(chan->vi->dev, "port index error\n");
                        chan->port[0] = value;
 
+                       dev_info(chan->vi->dev, "[L4ES] %s: chan->port[0]=port-index=%d\n", __func__, chan->port[0]);
+
                        if (value > NVCSI_PORT_H) {
                                dev_err(chan->vi->dev, "port index >%d!\n",
                                        NVCSI_PORT_H);
@@ -568,6 +570,8 @@ int tegra_vi_get_port_info(struct tegra_channel *chan,
                                dev_err(chan->vi->dev, "num lanes error\n");
                        chan->numlanes = value;
 
+                       dev_info(chan->vi->dev, "[L4ES] %s: chan->numlanes=bus-width=%d\n", __func__, chan->numlanes);
+
                        if (value > 12) {
                                dev_err(chan->vi->dev, "num lanes >12!\n");
                                return -EINVAL;

diff --git a/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi4_fops.c b/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi4_fops.c
index 7b19eb1d3..7f5ecce53 100644
--- a/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi4_fops.c
+++ b/kerneltree/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi4_fops.c
@@ -470,6 +470,10 @@ static int tegra_channel_capture_setup(struct tegra_channel *chan,
                width = chan->gang_width;
        }
 
+        dev_info(chan->vi->dev,
+                "[L4ES] %s: chan->valid_ports=%d, chan->gang_height=%d, chan->gang_width=%d\n",
+                __func__, chan->valid_ports, chan->gang_height, chan->gang_width);
+
        err = tegra_channel_notify_enable(chan, index);
        if (err < 0) {
                dev_err(chan->vi->dev,

And debug log is as below :

  • On system startup :
[    1.497478] tegra-vi4 15700000.vi: [L4ES] tegra_vi_get_port_info: chan->port[0]=port-index=0
[    1.497481] tegra-vi4 15700000.vi: [L4ES] tegra_vi_get_port_info: chan->numlanes=bus-width=8
[    4.466558] video4linux video0: [L4ES] update_gang_mode: chan->gang_mode=0, chan->valid_ports=1, width=1920, height=1080
  • During streaming with v4l2-ctl -d /dev/video0 --set-fmt-video=width=3840,height=2160,pixelformat=UYVY --set-ctrl bypass_mode=0 --stream-mmap --stream-skip=10 --stream-count=15 --stream-to=toto.raw
$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=3840,height=2160,pixelformat=UYVY --set-ctrl bypass_mode=0 --stream-mmap --stream-skip=10 --stream-count=15 --stream-to=toto.raw
New timings found
[  807.726734] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[  807.733222] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[  807.745210] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  807.745501] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  807.745511] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  807.745668] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  807.946772] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[  807.953270] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[  807.963409] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  807.963669] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  807.963676] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  807.963829] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  808.166737] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[  808.173229] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[  808.183528] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  808.183911] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  808.183932] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  808.184083] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  808.386760] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[  808.393299] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[  808.405305] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  808.405523] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  808.405529] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  808.405662] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  808.606727] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[  808.613179] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[  808.623360] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  808.623717] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  808.623738] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  808.623968] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  808.826762] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[  808.833218] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[  808.843439] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  808.843862] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  808.843871] tegra-vi4 15700000.vi: [L4ES] tegra_channel_capture_setup: chan->valid_ports=2, chan->gang_height=2160, chan->gang_width=1920
[  808.844103] tegra-vi4 15700000.vi: Create Surface with imgW=1920, imgH=2160, memFmt=203
[  809.046746] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
...

I don’t understand why gang_width go back to 1920 instead of 3840.

Regards,
K.