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.