We are using 2 cameras connected to a single CSI port through GMSL and using virtual channels (Orin nano platform + JPack 6.1):
Camera 1 is an imx715 using vc-id=<0>, the second is a adsd3500 sensor using vc-id=<1>
Our DT : (it’s possible to have config with 2 x 2 cams)
tegra-capture-vi {
num-channels = <4>;
status="okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
status="okay";
port@0 {
reg = <0>;
Sensor_vi_in0: endpoint {
status="okay";
vc-id = <0> ;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&imx715_csi_out0>;
};
};
port@1 {
reg = <1>;
Sensor_vi_in1: endpoint {
status="okay";
vc-id = <1>;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&adsd3500_csi_out1>;
};
};
port@2 {
reg = <2>;
Sensor_vi_in2: endpoint {
status="okay";
vc-id = <0> ;
port-index = <1>;
bus-width = <2>;
remote-endpoint = <&imx715_csi_out2>;
};
};
port@3 {
reg = <3>;
Sensor_vi_in3: endpoint {
status="okay";
vc-id = <1> ;
port-index = <1>;
bus-width = <2>;
remote-endpoint = <&adsd3500_csi_out3>;
};
};
};
};
We are using 2 applications running in parallel using these sensors separately: the application using the imx715 is based on ARGUS and the adsd3500 application uses v4l2.
So we can start and then stop the 2 cameras in any order…. worked perfectly with JetPack 5.1.2
With Jetpack6.1 if we stop the first camera (imx715) by stopping the application using it (VC=0), the application using the second camera does not receive data any more and we have a timeout in the kernel …
dmesg:
[ 2275.432709] imx715 9-001a: [T300] imx715_start_streaming entered.
[ 2275.472054] adsd3500 9-0040: [T300] adsd3500_start_streaming entered.
[ 2282.808832] imx715 9-001a: [T300] imx715_stop_streaming entered
[ 2285.989635] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 3000 ms
[ 2285.989664] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: attempting to reset the capture channel
[ 2285.991165] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: successfully reset the capture channel
[ 2289.061533] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 3000 ms
[ 2289.061560] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: attempting to reset the capture channel
[ 2289.062964] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: successfully reset the capture channel
[ 2292.069436] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 3000 ms
[ 2292.069465] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: attempting to reset the capture channel
[ 2292.071143] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: successfully reset the capture channel
[ 2292.071197] adsd3500 9-0040: [T300] adsd3500_stop_streaming entered.
[ 2293.388227] tegra-camrtc-capture-vi tegra-capture-vi: subdev imx715 9-001a unbind
[ 2293.389269] adsd3500 9-0040: adsd3500_remove
[ 2293.391624] tegra-camrtc-capture-vi tegra-capture-vi: subdev adsd3500 9-0040 unbind
[ 2293.391777] adsd3500 9-0040: [T300] adsd3500_remove: ADSD3500 driver removed.
But the measurement with an oscilloscope shows that the mipi data on VC=1 still arrive without any problem until we stop the adsd3500 camera
This does not happen if we stop the camera using *adsd3500 first (*VC=1…)… Data are still received on VC=0 ???
Any idea what could produce this behavior?