Problems with Second HDMI output on TX2

We have a custom TX2 carrier board that supports 2 hdmi outputs.
The first HDMI out works fine.
I followed the instructions here

https://devtalk.nvidia.com/default/topic/1004141/?comment=5164427

to add to the dtb to support the second hdmi port. Now there is some
activity, but no display.

I’m not sure exactly how to test it. The normal desktop is on HDMI1. Someone
suggested

cat /dev/urandom > /dev/fb2

But that didn’t do anything.

There are two errors I have seen:

[  319.402540] tegra-i2c 31b0000.i2c: no acknowledge from address 0x50
[  319.411605] PD DISP0 index2 UP
[  319.415532] PD DISP2 index4 UP
[  319.419025] PD DISP2 index4 DOWN
[  319.422494] PD DISP0 index2 DOWN
[  319.432835] tegra-i2c 31b0000.i2c: no acknowledge from address 0x50
[  319.441725] tegradc 15220000.nvdisplay: hdmi: edid read failed
[  319.447683] tegradc 15220000.nvdisplay: hdmi: using fallback edid
[  319.454017] tegradc 15220000.nvdisplay: hdmi: plugged

and

[  673.777118] tegra-i2c 31b0000.i2c: arb lost in communicate to add 0x50
[  673.786352] tegra-i2c 31b0000.i2c: Un-recovered Arb lost
[  673.792825] PD DISP0 index2 UP
[  673.797054] PD DISP2 index4 UP
[  673.800610] PD DISP2 index4 DOWN
[  673.806264] PD DISP0 index2 DOWN
[  673.810617] tegra-i2c 31b0000.i2c: arb lost in communicate to add 0x50
[  673.819812] tegra-i2c 31b0000.i2c: Un-recovered Arb lost
[  673.828056] tegradc 15220000.nvdisplay: hdmi: edid read failed
[  673.833998] tegradc 15220000.nvdisplay: hdmi: using fallback edid
[  673.840273] tegradc 15220000.nvdisplay: hdmi: plugged

Any ideas on what could be wrong? What I should try next?

Thanks in Advance,

Cary

Hi cobrien,

I believe it could be a hw issue so that your i2c failed to read edid from HDMI. Could you share your schematic through private message?

You were correct about it being a hardware issue. My hardware engineer went over the board and
found that the second HDMI port was disabled to save power. He added a pull-up to enable it
and now it’s good.

But thanks for the offer of help. We will likely have more such questions
as the project progresses. In the long term we hope to drive 4 HDMI outputs.

Cary

Hi Cary, I want to ask where you opened the second HDMI port to configure the second HDMI display.

Thank you in advance, I really need this answer.

Once I made the change in the device tree it showed up as HDMI-1 (So I had HDMI-0 and HDMI-1) in xrandr. The X driver added it to the virtual space so that if I had 2 1920x1024 monitors the virtual X desktop was 3840x1024. I would position the displays I wanted based on that information.

There was also a /dev/fb device and the /sys fs entries.

Does that help?

There should be a device tree for dual HDMI inside kernel source. Please try to build it to dtb and use it when flash.

I am very happy to hear from you. We have configured the device tree, built it to dtb and used it when flash,but we found the following information when viewing the status of the two HDMI ports:

root@tegra-ubuntu:/sys/kernel/debug/tegra_hdmi1# cat hdmi_status
hotplug state: 0
SCDC present: 1
Forum VSDB present: 1
YCbCr4:2:0 VDB present: 1
root@tegra-ubuntu:/sys/kernel/debug/tegra_hdmi1# cat …/tegra_hdmi/hdmi_status
hotplug state: 1
SCDC present: 0
Forum VSDB present: 0
YCbCr4:2:0 VDB present: 0
root@tegra-ubuntu:/sys/kernel/debug/tegra_hdmi1#

The first one is HDMI normal output, the second one is still not working properly.

Please refer to “tegra186-quill-p3310-1000-c03-00-dsi-hdmi-hdmi.dts”.

Also, if second HDMI is still not working after update dtb, please share full dmesg as attachment.

The attachment is our dmesg file and the changed device tree file. Our goal is to use a dsi and two hdmi screens, now the dsi and an hdmi screen are working.
Thank you very much for your help!

#include "tegra186-quill-p3310-1000-c03-00-base.dts"

/ {
	nvidia,dtsfilename = __FILE__;
	nvidia,dtbbuildtime = __DATE__, __TIME__;

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

		dsi {
			status = "okay";
			panel-s-wuxga-8-0 {
				status = "okay";
			};
		};
		nvdisplay@15210000 {
                        status = "okay";
                        /delete-property/ vdd-dp-pwr-supply;
                        /delete-property/ avdd-dp-pll-supply;
                        /delete-property/ vdd-edp-sec-mode-supply;
                        /delete-property/ vdd-dp-pad-supply;
                        /delete-property/ vdd_hdmi_5v0-supply;
                        avdd_hdmi-supply = <&spmic_ldo7>;
                        avdd_hdmi_pll-supply = <&spmic_sd2>;
                        vdd_hdmi_5v0-supply = <&vdd_hdmi>;
                };

                sor1 {
                        status = "okay";
                        dp-display {
                                bootloader-status = "disabled";
                                status = "disabled";
                        };
                        hdmi-display {
                                bootloader-status = "okay";
                                status = "okay";
                                                disp-default-out {
                                        nvidia,out-hdcp-policy = <TEGRA_DC_HDCP_POLICY_ALWAYS_OFF>;
                                };
                        };
                };

		nvdisplay@15220000 {
			status = "okay";
			/delete-property/ vdd-dp-pwr-supply;
			/delete-property/ avdd-dp-pll-supply;
			/delete-property/ vdd-edp-sec-mode-supply;
			/delete-property/ vdd-dp-pad-supply;
			/delete-property/ vdd_hdmi_5v0-supply;
			avdd_hdmi-supply = <&spmic_ldo7>;
			avdd_hdmi_pll-supply = <&spmic_sd2>;
			vdd_hdmi_5v0-supply = <&vdd_hdmi>;
		};

		sor {
			status = "okay";
			dp-display {
				bootloader-status = "disabled";
				status = "disabled";
			};
			hdmi-display {
				bootloader-status = "okay";
				status = "okay";
 						disp-default-out {
					nvidia,out-hdcp-policy = <TEGRA_DC_HDCP_POLICY_ALWAYS_OFF>;
				};
			};
		};

		dpaux@155c0000 {
			status = "okay";
		};
	};

	i2c@3160000 {
		e3320_tca_gpio: tca9539@75 {
			compatible = "ti,tca9539";
			status = "okay";
			reg = <0x75>;
			gpio-controller;
			#gpio-cells = <2>;
			vcc-supply = <&battery_reg>;
			5v0_hdmi_en {
				gpio-hog;
				gpios = <14 0>;
				output-high;
				label = "hdmi_en";
			};
		};

		gpio_i2c_0_21: gpio@21 {
			compatible = "ti,tca6408";
			status = "okay";
			reg = <0x21>;
			gpio-controller;
			#gpio-cells = <2>;
			vcc-supply = <&battery_reg>;
			vpp-vmm-rails {
				gpio-hog;
				gpios = <2 0 3 0>;
				output-high;
				label = "vmm-en-rail", "vmm-en-rail";
			};
		};

		tps65132@3e {
			reg = <0x3e>;
			compatible = "ti,tps65132";
			status = "okay";
			vpp_lcd: outp {
				regulator-name = "outp";
				regulator-min-microvolt = <4000000>;
				regulator-max-microvolt = <6000000>;
				enable-active-high;
				ti,enable-gpio = <&gpio_i2c_0_77 4 0>;
			};

			vmm_lcd: outn {
				regulator-name = "outn";
				regulator-min-microvolt = <4000000>;
				regulator-max-microvolt = <6000000>;
				enable-active-high;
				ti,enable-gpio = <&gpio_i2c_0_21 2 0>;
				ti,active-discharge-gpio = <&gpio_i2c_0_21 3 0>;
				ti,active-discharge-time = <2000>; /* in us */
			};
		};

		lp8557-backlight-s-wuxga-8-0@2c {
			status = "okay";
		};
	};

	fixed-regulators {
		regulator@10 {
			gpio = <&gpio_i2c_0_21 0 0>;
		};
	};

	plugin-manager {
		/delete-node/ fragment-e3320-dp;
	};
};

dmesg.log (115 KB)

Could you make sure your carrier board design matches the OEM design guide? BTW, the dmesg is being cut by the kernel panic log.

I just added some errors to the file and added it again. You can refresh it to see my last answer.

Our board is designed according to the OEM design guide, but now it’s like not plugging in a second HDMI screen. In addition, we can also read the corresponding edid information, is there any place to disable the second hdmi port? If not, is there any workable way to get the second hdmi port to work?

Thanks!

It needs to debug into the driver to see why second display cannot work.

You could try to disable dsi and first hdmi in device tree because it would influence the log.
After that, please find out which function is causing the kernel panic in dmesg.

Also, you could use the same way in device tree to disable the second HDMI.

Where can I debug the driver? I am sorry to trouble you.

We have 2 HDMI (and a DSI) on our carrier board.

We monitor the presence of the HDMI by reading

HDMI-0: /sys/devices/virtual/switch/hdmi/state
HDMI-1: /sys/devices/virtual/switch/hdmi1/state

We get a “1” if the monitor is plugged in.

The following only applies if you are running the X server.

If Xorg is running, you can use xrandr to see if you have both monitors.

export DISPLAY=:0
xrandr --listmonitors
Monitors: 3
 0: +*DSI-0 1920/508x1080/286+0+0  DSI-0
 1: +HDMI-0 1920/600x1080/340+1920+0  HDMI-0
 2: +HDMI-1 1920/600x1080/340+3840+0  HDMI-1

The numbers show the location in the X virtual desktop space.

xrandr can also dump the edid information

xrandr --current
...
HDMI-1 connected 1920x1080+3840+0 (0x18e) normal (normal left inverted right x axis y axis) 600mm x 340mm
        Identifier: 0x1ac
        Timestamp:  42900
        Subpixel:   unknown
        Gamma:      1.0:1.0:1.0
        Brightness: 1.0
        Clones:    
        CRTC:       2
        CRTCs:      2
        Transform:  1.000000 0.000000 0.000000
                    0.000000 1.000000 0.000000
                    0.000000 0.000000 1.000000
                   filter: 
        TegraOverlayBlendmode: Opaque 
                supported: Opaque, SourceAlphaBlend, PremultSourceAlphaBlend
        TegraOverlayPriority: 255 
                range: (0, 255)
        EDID: 
                00ffffffffffff0022f08c3201010101
                24190103803c22782a53a5a756529c26
                115054210800d1c081c0a9c0b3009500
                818081000101023a801871382d40582c
                450056502100001e000000fd00323c1e
                5011000a202020202020000000fc0048
                5020563237320a2020202020000000ff
                0036434d35333631374c440a20200142
                020321f149901f041303021211012309
                07078301000067030c0010000022e200
                2b023a801871382d40582c4500565021
                00001e023a80d072382d40582c450056
                502100001e0000000000000000000000
                00000000000000000000000000000000
                00000000000000000000000000000000
                00000000000000000000000000000055
        BorderDimensions: 4 
                supported: 4
...

We had problems with the i2c lines going to the monitor that were used to read back
the EDID information as described above. There may be i2c errors in dmesg output
indicating this.

Hope this helps.

Cary

Hi 2397482256,

Please download the kernel source from our download center, follow the instructions in L4T document for building kernel/modules.

The drivers you may look into are kernel/display/video/tegra/dc/. -> dc.c, hdmi2.0.c.

Hi Cary:
Thank you for your reply. We read the status according to your method and found that the second display is still not inserted, but we can now read edid, so we now suspect that our hardware has some problems.

This really makes a headache, thank you again for your help!

Ok, we will try it as you said.