16 virtual channel for xavier

Hi,

The Xavier Series SoC Technical Reference Manual document says that the CSI camera section supports 16 virtual channels, so it is being tested by referring to the imx390 camera devicetree.

  1. I tested by changing the vc-id from 0 to 15, but the vc-id value works up to 0, 1, 2, and 3, but does not work from 4 on. I think it’s because the dphy version is low, right?

  2. If the dphy version is low, does 16 virtual channel support mean that 4 CSI ports and 4 virtual channels are combined to support 16?


  1. This is a separate question from the virtual channel, but I want to use two csi ports, so I added channel@1 to the devicetree and uses 2lane, so I assigned the port-index to 1. Also, changing num_csi_lanes to 4 in tegra-camera-platform does not work. Is there any reference material?
/*
 * Copyright (c) 2022, VSI Inc.  All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/ {
	host1x {
		vi@15c10000 {
			num-channels = <2>;
			status = "okay";
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					status = "okay";
					ar1820_vi_in0: endpoint {
						vc-id = <0>;
						status = "okay";
						port-index = <0>;
						bus-width = <2>;						// 2Lane
						remote-endpoint = <&ar1820_csi_out0>;
					};
				};
				port@1 {
					reg = <1>;
					status = "okay";
					ar1820_vi_in1: endpoint {
						vc-id = <0>;
						status = "okay";
						port-index = <1>;
						bus-width = <2>;						// 2Lane
						remote-endpoint = <&ar1820_csi_out1>;
					};
				};
			};
		};

		nvcsi@15a00000 {
			num-channels = <2>;
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";
			channel@0 {
				reg = <0>;
				status = "okay";
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						ar1820_csi_in0: endpoint@0 {
							status = "okay";
							port-index = <0>;
							bus-width = <2>;					// 2Lane
							remote-endpoint = <&ar1820_out0>;
						};
					};
					port@1 {
						reg = <1>;
						ar1820_csi_out0: endpoint@1 {
							status = "okay";
							remote-endpoint = <&ar1820_vi_in0>;
						};
					};
				};
			};
			channel@1 {
				reg = <1>;
				status = "okay";
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						ar1820_csi_in1: endpoint@2 {
							status = "okay";
							port-index = <1>;
							bus-width = <2>;					// 2Lane
							remote-endpoint = <&ar1820_out1>;
						};
					};
					port@1 {
						reg = <1>;
						ar1820_csi_out1: endpoint@3 {
							status = "okay";
							remote-endpoint = <&ar1820_vi_in1>;
						};
					};
				};
			};
		};
	};

	i2c@3180000 {
		ar1820_a@37 {
            .....
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					ar1820_out0: endpoint {
						vc-id = <0>;
						port-index = <0>;
						bus-width = <2>;				// 2Lane
						status = "okay";
						remote-endpoint = <&ar1820_csi_in0>;
					};
				};
			};
		};

		ar1820_b@36 {
            .....
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					ar1820_out1: endpoint {
						vc-id = <0>;
						port-index = <1>;
						bus-width = <2>;				// 2Lane
						status = "okay";
						remote-endpoint = <&ar1820_csi_in1>;
					};
				};
			};
		};
	};
};

/ {
	tegra-camera-platform {
		compatible = "nvidia, tegra-camera-platform";
		num_csi_lanes = <4>;							// 2Lane
		max_lane_speed = <1500000>;
		min_bits_per_pixel = <10>;
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
		max_pixel_rate = <750000>;
		isp_peak_byte_per_pixel = <5>;
		isp_bw_margin_pct = <25>;

		modules {
			module0 {
				badge = "ar1820_rear";
				position = "rear";
				orientation = "1";
				status = "okay";
				drivernode0 {
					pcl_id = "v4l2_sensor";
					devname = "ar1820 2-0037";
					proc-device-tree = "/proc/device-tree/i2c@3180000/ar1820_a@37";
					status = "okay";
				};
			};
			module1 {
				badge = "ar1820_front";
				position = "front";
				orientation = "1";
				status = "okay";
				drivernode0 {
					pcl_id = "v4l2_sensor";
					devname = "ar1820 2-0036";
					proc-device-tree = "/proc/device-tree/i2c@3180000/ar1820_b@36";
					status = "okay";
				};
			};
		};
	};
};

Each port support to 4 virtual channel only. And 16 is the system max support cameras instead of each port support 16 cameras.

Thanks

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.