DSI output in Jetpack 4.4

Hi,

I’m trying to get the DSI output to work in a TX2 DevKit running Jetpack 4.4 and had partially succeeded.

My setup (same DevKit and same DSI panel) is working properly with Jetpack 3.2 but when I move to 4.4 the board boots with no video in the DSI output. I can see both the HDMI and DSI displays listed in both system settings and using Xrandr and I can get the DSI output to work by disabling and re-enabling it from system settings or xrandr. What this disable/enable does is blank and unblank the display and that makes the video to show in the display.

Is there anything different that has to be done in JP 4.4 to get the DSI output enabled at boot time without having to manually blank/unblank?

In previous versions of the “Linux Developer Guide” there was a section dedicated to enabling the DSI output but I can not find anything similar with this latest jetpack.

Any help will be really appreciated.

Regards,
Edison

Hi,

Please share the dmesg and what you’ve done to jp4.4 dts to enable dsi.

Hi WayneWWW,

I have the following in panel-s-wuxga-8-0.dtsi

/ {
host1x {
	dsi {
		panel_s_wuxga_8_0: panel-s-wuxga-8-0 {
			status = "disabled";
			compatible = "s,wuxga-8-0";
			nvidia,dsi-instance = <2>;
			nvidia,dsi-n-data-lanes = <2>;
			nvidia,dsi-pixel-format = <TEGRA_DSI_PIXEL_FORMAT_24BIT_P>;
			nvidia,dsi-refresh-rate = <60>;
			nvidia,dsi-video-data-type = <TEGRA_DSI_VIDEO_TYPE_VIDEO_MODE>;
			nvidia,dsi-video-clock-mode = <TEGRA_DSI_VIDEO_CLOCK_CONTINUOUS>;
			nvidia,dsi-video-burst-mode = <TEGRA_DSI_VIDEO_NONE_BURST_MODE_WITH_SYNC_END>;
			nvidia,dsi-controller-vs = <DSI_VS_1>;
			nvidia,dsi-virtual-channel = <TEGRA_DSI_VIRTUAL_CHANNEL_0>;
			nvidia,dsi-panel-reset = <TEGRA_DSI_ENABLE>;
			nvidia,dsi-power-saving-suspend = <TEGRA_DSI_ENABLE>;
			nvidia,dsi-ulpm-not-support = <TEGRA_DSI_ENABLE>;
			disp-default-out {
				nvidia,out-type = <TEGRA_DC_OUT_DSI>;
				nvidia,out-width = <256>;
				nvidia,out-height = <144>;
				nvidia,out-flags = <TEGRA_DC_OUT_CONTINUOUS_MODE>;
				nvidia,out-parent-clk = "pll_d_out0";
				nvidia,out-xres = <640>;
				nvidia,out-yres = <400>;
			};
			display-timings {
			  640x400-60Hz {
			    clock-frequency = <21552000>;
			    hactive = <640>;
			    vactive = <400>;
			    hfront-porch = <16>;
			    hback-porch = <48>;
			    hsync-len = <96>;
			    vfront-porch = <12>;
			    vback-porch = <35>;
			    vsync-len = <2>;
			    nvidia,h-ref-to-sync = <1>;
			    nvidia,v-ref-to-sync = <1>;
			  };

Then I added the following to tegra186-quill-p3310-1000-a00-00-base.dts:

	nvdisplay@15200000 {
		status = "okay";
	};

	dsi {
  		status = "okay";
  		nvidia,active-panel = <&panel_s_wuxga_8_0>;
  		panel-s-wuxga-8-0 {
  			bootloader-status = "disabled";
    		status = "okay";
  		};
	};

And here is the dmesg output:

dmesg.txt (62.4 KB)

I have the same configuration working in Jetpack 3.2, but in 4.4 I need to blank/unblank the display after boot to see the video in the DSI output.

When I do that, I see the following in dmesg:

[  221.195976] tegradc 15210000.nvdisplay: unblank
[  221.195996] tegradc 15200000.nvdisplay: blank - powerdown
[  221.233936] tegradc 15200000.nvdisplay: dsi: video fifo overflow. Resetting flag
[  221.233943] tegradc 15200000.nvdisplay: dsi: video fifo underflow. Resetting flag
[  221.243136] tegradc 15200000.nvdisplay: dsi: ClkPrepare mipi range violated
[  225.659939] tegradc 15200000.nvdisplay: blank - powerdown
[  225.659962] tegradc 15200000.nvdisplay: unblank
[  225.668232] tegradc 15200000.nvdisplay: DSI: HS clock rate is 129500
[  225.703085] tegradc 15200000.nvdisplay: unblank
[  225.703127] tegradc 15210000.nvdisplay: unblank

After that, the DSI output works normally.

What I want is to have the build running JP4.4 to behave the same as 3.2, this is, the DSI output working right after the board boots.

Thanks for your help.

Hello Edison,

Could you compare why the code gets MIPI range violation and fifo over/underflow in rel-32 but not in rel-28?

For the MIPI range, I see most of the codes are same between rel-32 and rel-28.
Please check if that one is printed from tegra_dsi_init_hw in dsi.c.

Hi WayneWWW,

In both version I see the same under/overflow messages (I’m attaching the dmesg output for your reference).
The one difference I see is that in JP 3.2, during the boot sequence I the DSI output is banked/unblanked:

[   11.837612] tegradc 15210000.nvdisplay: blank - powerdown
[   11.843344] tegradc 15210000.nvdisplay: unblank

and this doesn’t happen in the latest JP. If I do it manually, after the board boots, then the DSI output works.

dmesg_jp32.txt (65.4 KB)

Hi,

But tegradc 15210000 on your device is for HDMI. It seems have nothing to do with the DSI.

Could you try to hotplug HDMI on JP4.4 and see if it can bring up DSI too?

Hi WayneWWW,

My bad, I took the wrong lines from the log.
In the same log from Jetpack 3.2 (R28) you can see the following:

[    9.456551] tegradc 15200000.nvdisplay: blank - powerdown
...
[   10.780005] tegradc 15200000.nvdisplay: unblank

Which is from the DSI output and that doesn’t happen in JP 4.4 (R32).

In the other hand, I can confirm that when I hotplug the HDMI output, the DSI is brought up.

Here you can see the dmesg output when I disconnect/re-connect the HDMI monitor.

hotplug_log.txt (3.7 KB)

Hi,

We also checked our internal DSI board on jp4.4. However, our board can work and the kernel log gives the same order of blank/unblank as your log.

Could you try to

  1. Disable hdmi node for both jp3.2 and jp4.4. The fb blank/unblank will affect all the displays on board. I want to avoid this interference.

  2. Add stack_dump function in kernel driver and compare the difference between jp3.2 and jp4.4 when that extra unblank happens on jp3.2.

Hi WayneWWW,

Thanks for your help.
I’ll give your suggestions a try.