jetson xavier hdmitocsi debug v4l2-compliance ''Unable to handle kernel NULL pointer dereference at virtual address 000001e0"

hi,

I have tested with tc358840 for xavier, but there is still without correct streaming.

jetpack4.2.3 r32.2.3

when I run v4l2-compliance, The following happened:

js@js-desktop:~$ v4l2-compliance
v4l2-compliance SHA : not available

Driver Info:
Driver name : tegra-video
Card type : vi-output, tc358840 2-000f
Bus info : platform:15c10000.vi:0
Driver version: 4.9.140
Capabilities : 0x84200001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format

Compliance test for device /dev/video0 (not using libv4l2):

Required ioctls:
test VIDIOC_QUERYCAP: OK

Allow for multiple opens:
test second video open: OK
test VIDIOC_QUERYCAP: OK
test VIDIOC_G/S_PRIORITY: OK
test for unlimited opens: OK

Debug ioctls:
test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
test VIDIOC_LOG_STATUS: OK

Input ioctls:
test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
test VIDIOC_ENUMAUDIO: OK (Not Supported)
test VIDIOC_G/S/ENUMINPUT: OK
test VIDIOC_G/S_AUDIO: OK (Not Supported)
Inputs: 1 Audio Inputs: 0 Tuners: 0

Output ioctls:
test VIDIOC_G/S_MODULATOR: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_ENUMAUDOUT: OK (Not Supported)
test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 Audio Outputs: 0 Modulators: 0

Input/Output configuration ioctls:
test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK
test VIDIOC_DV_TIMINGS_CAP: OK
test VIDIOC_G/S_EDID: OK

Test input 0:

    Control ioctls:
            test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
            test VIDIOC_QUERYCTRL: OK
            test VIDIOC_G/S_CTRL: OK

[b]
Unable to handle kernel NULL pointer dereference at virtual address 000001e0
[ 178.896421] Mem abort info:
[ 178.896489] ESR = 0x96000005
[ 178.896559] Exception class = DABT (current EL), IL = 32 bits
[ 178.896718] SET = 0, FnV = 0
[ 178.896787] EA = 0, S1PTW = 0
[ 178.896852] Data abort info:
[ 178.896914] ISV = 0, ISS = 0x00000005
[ 178.896993] CM = 0, WnR = 0
[ 178.897066] user pgtable: 4k pages, 39-bit VAs, pgd = ffffffc38ed30000
[ 178.897224] [00000000000001e0] *pgd=0000000000000000, *pud=0000000000000000
[ 178.897415] Internal error: Oops: 96000005 [#1] PREEMPT SMP
[ 178.897527] Modules linked in: fuse zram overlay nvgpu bluedroid_pm ip_tables x_tables
[ 178.897796] CPU: 0 PID: 7238 Comm: v4l2-compliance Not tainted 4.9.140 #31
[ 178.897918] Hardware name: Jetson-AGX (DT)
[ 178.898010] task: ffffffc388dbe200 task.stack: ffffffc39105c000
[ 178.898393] PC is at tegra_vi5_g_volatile_ctrl+0x48/0x120
[ 178.898792] LR is at tegra_vi5_g_volatile_ctrl+0x2c/0x120
[ 178.899222] pc : [] lr : [] pstate: 40400145
[ 178.904213] sp : ffffffc39105fac0
[ 178.907455] x29: ffffffc39105fac0 x28: ffffffc3d7b82c00
[ 178.913239] x27: 000000000f000000 x26: 0000000000000000
[ 178.919079] x25: ffffff8009f9fd20 x24: 0000000000000047
[ 178.924679] x23: 0000000000000001 x22: 0000000000000018
[ 178.929951] x21: ffffffc39105fb60 x20: ffffffc3ec229420
[ 178.935354] x19: ffffffc3d7b82c00 x18: 0000000000000001
[ 178.941131] x17: 0000007fa31c7b10 x16: ffffff80082739b0
[ 178.946406] x15: ffffffffffffffff x14: ffffffc39105fac0
[ 178.952329] x13: ffffffc39105f9c5 x12: 0000000000000000
[ 178.957794] x11: ffffffc39105f980 x10: ffffffc39105f980
[ 178.963466] x9 : 0000000000000002 x8 : 0000000000000002
[ 178.969236] x7 : ffffff8008fb6d88 x6 : 0000000000000090
[ 178.974993] x5 : 000000000000008d x4 : 0000000000000001
[ 178.980329] x3 : 00000000009a2033 x2 : 0000000000000000
[ 178.985666] x1 : ffffffc388dbe200 x0 : 00000000009a2032

[ 178.992159] Process v4l2-compliance (pid: 7238, stack limit = 0xffffffc39105c000)
[ 178.999411] Call trace:
[ 179.001703] [] tegra_vi5_g_volatile_ctrl+0x48/0x120
[ 179.007846] [] v4l2_g_ext_ctrls+0x22c/0x2f0
[ 179.013413] [] v4l_g_ext_ctrls+0xa0/0xd8
[ 179.018229] [] __video_do_ioctl+0x204/0x2c8
[ 179.023826] [] video_usercopy+0x2a0/0x6a0
[ 179.029165] [] video_ioctl2+0x3c/0x50
[ 179.033740] [] v4l2_ioctl+0x88/0x118
[ 179.038538] [] do_vfs_ioctl+0xb0/0x8d8
[ 179.043859] [] SyS_ioctl+0x8c/0xa8
[ 179.048417] [] el0_svc_naked+0x34/0x38
[ 179.053503] —[ end trace 6faf8fbdf52a7b49 ]—

[/b]

DT:

/ {
nvidia,dtsfilename = FILE;
nvidia,dtbbuildtime = DATE, TIME;

/* set camera gpio direction to output */
gpio@2200000 {
	camera-control-output-low {
		status = "okay";
		gpio-hog;
		output-low;
		gpios = <TEGRA194_MAIN_GPIO(H, 3) 0>;
		label = "cam0-rst";
	};

	camera-control-input {
		status = "okay";
		gpio-hog;
		input;
		gpios = <TEGRA194_MAIN_GPIO(H, 6) 0>;
		label = "cam0-int";
	};
};

i2c@3180000 {
	status = "okay";

	#address-cells = <1>;
	#size-cells = <0>;

	/* HDMI IN A (4K) */
	tc358840@0f {
		compatible = "toshiba,tc358840";
		reg = <0x0f>;
		status = "okay";
		devnode = "video0";

		/* Power Supply */
        vdig-supply = <&p2822_vdd_sys_en>;//<&p2822_vdd_1v8_cvb>;
		vif-supply = <&p2822_vdd_1v8_cvb>;

		/* Reset */
		reset-gpios = <&tegra_main_gpio TEGRA194_MAIN_GPIO(H, 3) GPIO_ACTIVE_HIGH>;

		/* Interrupt */
		interrupt-parent = <&tegra_main_gpio>;
		//interrupts = <TEGRA194_MAIN_GPIO(H, 6) IRQ_TYPE_LEVEL_HIGH>;
		interrupts = <TEGRA194_MAIN_GPIO(H, 6) GPIO_ACTIVE_HIGH>;

		refclk_hz = <48000000>; /* 40 - 50 MHz */  

		ddc5v_delay = <1>;		/* 50 ms */

		/* HDCP */
		/* TODO: Not yet implemented */
		enable_hdcp = <0>;

		/* CSI Output */
		/* Enable TX0 (4 lanes) & TX1 (4 lanes) */
		csi_port = <3>;

		lineinitcnt = <0x00000FA0>;
		lptxtimecnt = <0x00000004>;
		tclk_headercnt = <0x00180203>;
		tclk_trailcnt = <0x00040005>;
		ths_headercnt = <0x000D0004>;
		twakeup = <0x00003E80>;
		tclk_postcnt = <0x0000000A>;
		ths_trailcnt = <0x00080006>;
		hstxvregcnt = <0x00000020>;

		/* PLL */
		/* Bps per lane is (refclk_hz / pll_prd) * pll_fbd */
		pll_prd = <10>;
		pll_fbd = <125>;
		//pll_fbd = <230>;
		//pll_frs = <0>;

		port@0 {
			ret = <0>;
			hdmi2csi_tc358840_out0: endpoint {
				// csi-port = <0>;
				port-index = <0>;
				bus-width = <8>;
				remote-endpoint = <&hdmi2csi_csi_in0>;
			};
		};
	};
};

host1x {
	vi@15c10000 {
		num-channels = <1>;
		ports {
			#address-cells = <1>;
			#size-cells = <0>;
			port@0 {
				status = "okay";
				reg = <0>;
				hdmi2csi_vi_in0: endpoint {
					status = "okay";
					// csi-port = <0>;
					port-index =<0>;
					bus-width = <8>;
					remote-endpoint = <&hdmi2csi_csi_out0>;
				};
			};
		};
	};

	nvcsi@15a00000 {
		num-channels = <1>;
		#address-cells = <1>;
		#size-cells = <0>;
		channel@0 {
			status = "okay";
			reg = <0>;
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					status = "okay";
					reg = <0>;
					hdmi2csi_csi_in0: endpoint@0 {
						status = "okay";
						// csi-port = <0>;
						port-index = <0>;
						bus-width = <8>;
						remote-endpoint = <&hdmi2csi_tc358840_out0>;
					};
				};
				port@1 {
					status = "okay";
					reg = <1>;
					hdmi2csi_csi_out0: endpoint@1 {
						status = "okay";
						remote-endpoint = <&hdmi2csi_vi_in0>;
					};
				};
			};
		};
	};
};

tegra-camera-platform {
    compatible = "nvidia, tegra-camera-platform";
	/**
	* Physical settings to calculate max ISO BW
	*
	* num_csi_lanes = <>;
	* Total number of CSI lanes when all cameras are active
	*
	* max_lane_speed = <>;
	* Max lane speed in Kbit/s
	*
	* min_bits_per_pixel = <>;
	* Min bits per pixel
	*
	* vi_peak_byte_per_pixel = <>;
	* Max byte per pixel for the VI ISO case
	*
	* vi_bw_margin_pct = <>;
	* Vi bandwidth margin in percentage
	*
	* max_pixel_rate = <>;
	* Max pixel rate in Kpixel/s for the ISP ISO case
	*
	* isp_peak_byte_per_pixel = <>;
	* Max byte per pixel for the ISP ISO case
	*
	* isp_bw_margin_pct = <>;
	* Isp bandwidth margin in percentage
	*/
	num_csi_lanes = <4>;
	max_lane_speed = <1500000>;
	min_bits_per_pixel = <10>;
	vi_peak_byte_per_pixel = <2>;
	vi_bw_margin_pct = <25>;
	// max_pixel_rate = <0>;
	isp_peak_byte_per_pixel = <2>;
	isp_bw_margin_pct = <25>;

	/**
	* The general guideline for naming badge_info contains 3 parts, and is as follows,
	* The first part is the camera_board_id for the module; if the module is in a FFD
	* platform, then use the platform name for this part.
	* The second part contains the position of the module, ex. “rear” or “front”.
	* The third part contains the last 6 characters of a part number which is found
	* in the module's specsheet from the vender.
	*/
	modules {
		module0 {
			status = "okay";
			badge = "hdmi2csi_left_358840";
			position = "left";
			orientation = "1";
			drivernode0 {
				/* Declare PCL support driver (classically known as guid)  */
				pcl_id = "v4l2_sensor";
				/* Driver v4l2 device name */
				devname = "tc358840 6-000f";
				/* Declare the device-tree hierarchy to driver instance */
				proc-device-tree = "/proc/device-tree/i2c@3180000/tc358840@0f";
			};
		};
	};
};

};

hello 8519120,

it usually a device tree issue of this “unable to handle kernel NULL pointer” failure.
you may access Sensor Software Driver Programming Guide and also review DT properties.

your failures should caused by get controls which is NULL.
please also dig into below kernel function to check which property is missing,
for example,

<i>$l4t-r32.2/public_sources/kernel_src/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi5_fops.c</i>

static int tegra_vi5_g_volatile_ctrl(struct v4l2_ctrl *ctrl){...}

hi,

v4l2-compliance test  already can pass.but I run cmd:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=720, --set-ctrl bypass_mode=0 --stream-mmap --stream-count=5000

] tegra194-vi5 15c10000.vi: err_rec: attempting to reset the capture channel
[ 1373.989352] tegra194-vi5 15c10000.vi: err_rec: successfully reset the capture channel
[ 1376.546126] tegra194-vi5 15c10000.vi: no reply from camera processor
[ 1376.546280] tegra194-vi5 15c10000.vi: uncorr_err: request timed out after 2500 ms
[ 1376.546421] tegra194-vi5 15c10000.vi: err_rec: attempting to reset the capture channel
[ 1376.549256] tegra194-vi5 15c10000.vi: err_rec: successfully reset the capture channel
[ 1379.105992] tegra194-vi5 15c10000.vi: no reply from camera processor
[ 1379.106169] tegra194-vi5 15c10000.vi: uncorr_err: request timed out after 2500 ms
[ 1379.106312] tegra194-vi5 15c10000.vi: err_rec: attempting to reset the capture channel
[ 1379.108286] tegra194-vi5 15c10000.vi: err_rec: successfully reset the capture channel
[ 1381.665831] tegra194-vi5 15c10000.vi: no reply from camera processor
[ 1381.665992] tegra194-vi5 15c10000.vi: uncorr_err: request timed out after 2500 ms
[ 1381.666134] tegra194-vi5 15c10000.vi: err_rec: attempting to reset the capture channel
[ 1381.668281] tegra194-vi5 15c10000.vi: err_rec: successfully reset the capture channel

hello 8519120,

v4l2-compliance test only perform a sanity test, below failures usually related to sensor signaling.

tegra194-vi5 15c10000.vi: no reply from camera processor
tegra194-vi5 15c10000.vi: uncorr_err: request timed out after 2500 ms

please review your power-on sequence, ensure you had assign regulators correctly.
you may also arrange an oscilloscope to probe the MIPI signaling.
besides,
please enable VI tracing logs as below to gather more details. thanks

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
echo > /sys/kernel/debug/tracing/trace
cat /sys/kernel/debug/tracing/trace

hi,

I modified the device tree,The above error has been resolved,But there are some new errors.

tegra194-vi5 15c10000.vi: corr_err: discarding frame 0, flags: 0, err_data 256

debug info:

kworker/0:3-1854 [000] … 1253.631429: rtos_queue_send_from_isr_failed: tstamp:39372313906 queue:0x0bcb41f8
kworker/0:3-1854 [000] … 1253.631429: rtos_queue_send_from_isr_failed: tstamp:39372314068 queue:0x0bcb8a60
kworker/0:3-1854 [000] … 1253.631430: rtos_queue_send_from_isr_failed: tstamp:39372314250 queue:0x0bcba5e0
kworker/0:3-1854 [000] … 1253.631430: rtos_queue_send_from_isr_failed: tstamp:39372314407 queue:0x0bcbb3a0
kworker/0:3-1854 [000] … 1253.631430: rtos_queue_send_from_isr_failed: tstamp:39372314562 queue:0x0bcbc160
kworker/0:3-1854 [000] … 1253.631431: rtcpu_vinotify_event: tstamp:39372793433 tag:RESERVED_19 channel:0x23 frame:0 vi_tstamp:40142730528 data:0x08021824
kworker/0:3-1854 [000] … 1253.631431: rtcpu_vinotify_event: tstamp:39372793583 tag:CHANSEL_FAULT channel:0x23 frame:0 vi_tstamp:39372294992 data:0x00000100
kworker/0:3-1854 [000] … 1253.631431: rtcpu_vinotify_event: tstamp:39372793775 tag:RESERVED_19 channel:0x23 frame:0 vi_tstamp:40142757376 data:0x01021824
kworker/0:3-1854 [000] … 1253.631432: rtcpu_vinotify_event: tstamp:39372820553 tag:FE channel:0x00 frame:0 vi_tstamp:39372794896 data:0x00000020
kworker/0:3-1854 [000] … 1253.631432: rtcpu_vinotify_event: tstamp:39372820726 tag:CHANSEL_SHORT_FRAME channel:0x01 frame:0 vi_tstamp:39372794896 data:0x01000000
kworker/0:3-1854 [000] … 1253.631432: rtcpu_vinotify_event: tstamp:39372820890 tag:RESERVED_19 channel:0x23 frame:0 vi_tstamp:40158742272 data:0x01021824
kworker/0:3-1854 [000] … 1253.631433: rtcpu_vinotify_event: tstamp:39372821082 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:39372794898 data:0x00000000
kworker/0:3-1854 [000] … 1253.631433: rtcpu_vinotify_event: tstamp:39372821227 tag:RESERVED_19 channel:0x23 frame:0 vi_tstamp:40158757536 data:0x07021825
kworker/0:3-1854 [000] … 1253.631433: rtcpu_vinotify_event: tstamp:39372821417 tag:FS channel:0x00 frame:0 vi_tstamp:39372796363 data:0x00000010
kworker/0:3-1854 [000] … 1253.631434: rtcpu_vinotify_event: tstamp:39372821567 tag:ATOMP_FS channel:0x00 frame:0 vi_tstamp:39372796365 data:0x00000000
kworker/0:3-1854 [000] … 1253.631434: rtcpu_vinotify_event: tstamp:39372821755 tag:RESERVED_18 channel:0x23 frame:0 vi_tstamp:40158828576 data:0x10000000
kworker/0:3-1854 [000] … 1253.631434: rtcpu_vinotify_event: tstamp:39372821899 tag:RESERVED_18 channel:0x23 frame:0 vi_tstamp:40158862208 data:0x31001826
kworker/0:3-1854 [000] … 1253.631435: rtcpu_vinotify_event: tstamp:39372822087 tag:CHANSEL_PXL_SOF channel:0x23 frame:0 vi_tstamp:39372815401 data:0x00000001
kworker/0:3-1854 [000] … 1253.631435: rtcpu_vinotify_event: tstamp:39372822249 tag:RESERVED_19 channel:0x23 frame:0 vi_tstamp:40159385024 data:0x08021825
kworker/0:3-1854 [000] … 1253.631435: rtcpu_vinotify_event: tstamp:39372822437 tag:CHANSEL_FAULT channel:0x23 frame:0 vi_tstamp:39372815631 data:0x00000100
kworker/0:3-1854 [000] … 1253.631436: rtcpu_vinotify_event: tstamp:39372822581 tag:RESERVED_19 channel:0x23 frame:0 vi_tstamp:40159411456 data:0x01021825

hello 8519120,

according to VI tracing logs, VI engine report a short frame failure.

tag: CHANSEL_FAULT channel:0x23 frame:0 vi_tstamp:39372294992 data:0x00000100
tag: CHANSEL_SHORT_FRAME channel:0x01 frame:0 vi_tstamp:39372794896 data:0x01000000

since VI engine allocate the buffers from the DT property settings, it’s line-length in the horizontal direction, frame-length in the vertical direction.
such short frame failure means the coming signal is less then VI engine expected. could you please reduce the active_h in the device tree property for confirmation.
you should also note that we did not support image resolution in odd-numbers.
thanks

hi, JerryChang

  There should be no problem with the DT.

Because of the difference between vi5 and VI4, in vi5_fops.c:

FUN:tegra_vi5_g_volatile_ctrl()
Structure camera common data * s data is involved in tegra_vi5_g_volatile_ctrl() = to_camera_common_data(sd->dev);

In tc358840.c, to_camera_common_data() is not implemented. So I deleted tegra_vi5_g_volatile_ctrl(), and I suspect that this operation caused the above problems.

If I don’t delete the function, what’s the correct way?

hello 8519120,

it’s different drivers for different Jetson platforms. TX2 working with VI4 and Xavier use VI5.
also, that’s not correct to delete tegra_vi5_g_volatile_ctrl() function calls.
due to VI4 also has have similar function call to complete these sensor configuration and blob controls.
you may check tegra_channel_write_blobs() for reference.

please also refer to below header file for the content of to_camera_common_data()

<i>$l4t-r32.2/public_sources/kernel_src/kernel/nvidia/include/media/camera_common.h</i>

static inline struct camera_common_data *to_camera_common_data(
 	const struct device *dev)
{
  	if (sensor_common_parse_num_modes(dev))
  		return container_of(dev_get_drvdata(dev),
  		    struct camera_common_data, subdev);
  	return NULL;
}

you should also refer to reference drivers to extend the implementation if necessary.
for example,
$l4t-r32.2/public_sources/kernel_src/kernel/nvidia/drivers/media/i2c/*

hi,JerryChang

Based on https://github.com/InES-HPMM , R32.2.1 TX 2works fine.

In tegra_channel_write_blobs(),by add:

if(!strncmp(“tc358840”, sd->name, 8))
goto no_camera_data;

no_camera_data:
return 0;

but I do not plan to implement to_camera_common_data() in tc358840.c at present.

I wanted to port on Xavier based on tx2 drivers, but so far I have encountered the above situation.

hello 8519120,

according to your comment #8,
did you means tc358840 driver works well by deleting tegra_vi5_g_volatile_ctrl()?
thanks

hi,JerryChang.

You can’t say it works, but at least it’s a step closer to working, because tc358840.c doesn’t implement

to_camera_common_data, so you must skip to_camera_common_data ().

When I try to remove tegra_vi5_g_volatile_ctrl (), the errors in the # 6,

Invi5_fops.c,fun vi5_capture_dequeue(),even if I remove

else {
dev_warn(vi->dev,
"corr_err: discarding frame %d, flags: %d, "
“err_data %d\n”,
descr->status.frame_id, descr->status.flags,
descr->status.err_data);
buf->vb2_state = VB2_BUF_STATE_REQUEUEING;
goto done;
}

the screen can also appear not complete image, it shows that I was already very close to success.

hello 8519120,

that tegra_vi5_g_volatile_ctrl() is the operation to get volatile controls, that’s for controls that return a volatile register.
for example, such as a signal strength read-out that changes continuously.
please check the registers which are read-only, more appropriate workarounds should be hacking the control values instead of removing function calls.

you may still investigate your sensor device tree property settings,
according to below, it’ll get sensor properties from DT instead.
for example,

<i>$l4t-r32.2/public_sources/kernel_src/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi5_fops.c</i>

static int vi5_channel_start_streaming(struct vb2_queue *vq, u32 count)
{
...
		s_data = to_camera_common_data(sd->dev);

		/* get sensor properties from DT */
		if (s_data != NULL && node != NULL) {
			int idx = s_data->mode_prop_idx;

			emb_buf_size = 0;
			if (idx < s_data->sensor_props.num_modes) {
				sensor_mode =
					&s_data->sensor_props.sensor_modes[idx];

hi,JerryChang

         In  tegra_vi5_g_volatile_ctrl():

         memcpy(ctrl->p_new.p, cfg, sizeof(struct sensor_cfg));

The main purpose is to copy relevant information of IIC, which has no effect on my overall image acquisition. Therefore, I think it is ok to delete this function.

Specifically, it is mainly to read the configuration information of some sensors through iic or spi. Therefore, it does not have a great impact on my subsequent acquisition of images. Right?

hello 8519120,

all right, let’s moving forward to check not complete images.
you shall solve CHANSEL_SHORT_FRAME failures, could you please modify active_h for testing.

please also refer to similar discussion thread, Topic 1064874.
you should disable gang-mode since the multi-brick streams did NOT implemented for Xavier’s VI drivers.
thanks

hi,JerryChang

          Has been able to successfully preview the image.

          thank you very much!