HDMI Output cannnot work in AGX Orin based CustomBoard 35.3.1

SOM board: AGX Orin 32GB (900-13701-0040-000)
Board ID(3701) version(500) sku(0004) revision(G.0)

We are using custom conf based on jetson-agx-orin-devkit.conf

I have tried to enable HDMI according to the following Guide,POST, but it does not appear in HDMI Output.
HDMI driver does not seem to recognize HPD input (PM.00).

https://docs.nvidia.com/jetson/archives/r34.1/DeveloperGuide/text/SD/Kernel/DisplayConfigurationAndBringUp.html#for-jetson-agx-orin-enabling-hdmi-on-custom-carrier-boards

PINMUX and DTB definitions have already been done as follows.

[pinmux.dtsi]

			dp_aux_ch0_hpd_pm0 {
				nvidia,pins = "dp_aux_ch0_hpd_pm0";
				nvidia,function = "rsvd1";
				nvidia,pull = <TEGRA_PIN_PULL_NONE>;
				nvidia,tristate = <TEGRA_PIN_ENABLE>;
				nvidia,enable-input = <TEGRA_PIN_ENABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};

[gpio.dtsi]

	gpio@2200000 {
		gpio-init-names = "default";
		gpio-init-0 = <&gpio_main_default>;

		gpio_main_default: default {
			gpio-input = <
...
				TEGRA234_MAIN_GPIO(M, 0)

[dts]

	display@13800000 {
		os_gpio_hotplug_a = <&tegra_main_gpio TEGRA234_MAIN_GPIO(M, 0) GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

# hexdump -C /proc/device-tree/display@13800000/os_gpio_hotplug_a
00000000  00 00 00 04 00 00 00 60  00 00 00 00              |.......`....|
0000000c

・ lsmod 

# lsmod | grep nvidia
nvidia_modeset       1093632  3
nvidia               1339392  7 nvidia_modeset

As shown below, The HPD pin input is operating normally because the HPD status can be obtained via GPIO input.

# echo 424 >/sys/class/gpio/export
# echo in >/sys/class/gpio/gpio424/direction
# cat /sys/class/gpio/gpio424/value
1  // HDMI cable plugged
# cat /sys/class/gpio/gpio424/value
0  // HDMI cable unplugged

How can I make the HDMI driver recognize the HPD status?
Thank you.

Hi,

What is your result of xrandr in this situation? Did you already change the dcb image in device tree?

Also, which version are you using? I hope you are not using rel-34.1.

Hi,

What is your result of xrandr in this situation?

$ export DISPLAY=:0
$ xrandr
No protocol specified
Can't open display :0

First of all, we suppose that the HPD is not recognized
because we cannot see the HDMI connected log in the journalctl -f.

Also, which version are you using?

Do you mean the Version of [tegra234-dcb-p3701-0000-a02-p3737-0000-a01_hdmi.dtsi] ?
We are using this.
https://developer.nvidia.com/embedded/l4t/r34_release_v1.1/tegra234-dcb-p3701-0000-a02-p3737-0000-a01_hdmi.dtsi

Could you tell me where I can find the 35.3.1 version of this file if it exists?

Hi

We don’t provide those files on rel-35.3.1 directly. You need to learn the mechanism behind this.

https://docs.nvidia.com/jetson/archives/r35.3.1/DeveloperGuide/text/SD/Kernel/DisplayConfigurationAndBringUp/OrinDisplayconfig.html?highlight=dcb

As for the pinmux issue, check the flash log to make sure the pinmux file you modified really get flashed to the board.

This is dcb_tool -r output.

Linux_for_Tegra_dev/tools/dcb_tool/dcb_tool -r tegra234-dcb-p3701-0000-a02-p3737-0000-a01_hdmi.dtsi

=== Reading DCB blob ===

########## Tegra DCB BLOB ###############
########### Display Devices #############
Display Devices::
	Display Devices : [0]
		Type               : [TMDS]
		CCB                : [0]
		Heads              : 0:[Y] 1:[Y]
		Sor                : [0 ]
		HDMI capable       : [1]
		Connector          : [0]
		Bus                : [0]
############### CCB Entries ###############
CCB::
*CCB entries that have both I2C and AUX ports unused (value = 31) are not displayed
	CCB Index : 0
		I2C Port           : [6]
		AUX Port           : [0]
########### Connector entries #############
Connectors::
	Connector Index : 0x0
		Type               : [HDMI]
		Hotplug            : A:[Y]

################# ******* #################

Type is TDMS and HDMI.
There does not appear to be any elements that need to be changed by L4T Version.

As for the pinmux issue, check the flash log to make sure the pinmux file you modified really get flashed to the board.

We already fixed other peripheral pins and changes confirmed.

Linux_for_Tegra_dev$ time sudo ./flash.sh dx-m2000+p3701-0000 mmcblk0p1
...
Board ID(3701) version(500) sku(0004) revision(G.0)
Copy Linux_for_Tegra_dev/kernel/dtb/tegra234-p3701-0004-dx-m2000.dtb to /Linux_for_Tegra_dev/kernel/dtb/tegra234-p3701-0004-dx-m2000.dtb.rec
copying bctfile(/Linux_for_Tegra_dev/bootloader/t186ref/BCT/tegra234-p3701-0000-sdram-l4t.dts)... done.
copying minratchet_config(/Linux_for_Tegra_dev/bootloader/t186ref/BCT/tegra234-mb1-bct-ratchet-p3701-0000.dts)... done.
copying device_config(/Linux_for_Tegra_dev/bootloader/t186ref/BCT/tegra234-mb1-bct-device-p3701-0000.dts)... done.
copying misc_config(/Linux_for_Tegra_dev/bootloader/t186ref/BCT/tegra234-mb1-bct-misc-p3701-0000.dts)... done.
copying pinmux_config(/Linux_for_Tegra_dev/bootloader/t186ref/BCT/tegra234-mb1-bct-pinmux-p3701-dx-m2000.dtsi)... done.

Hi,

The only check items for Orin HDMI are

  1. Pinmux
  2. DCB in dtb file needs to be correct. hotplug properties need to be added.
  3. Full flash instead of partial update.

And the only method to check this is xorg.0.log and xrandr result. Dmesg won’t show and /sys/kernel/debug/gpio won’t show anything either because the hotplug is handled by DCE R5 core. Not CCPLEX.

After full flashing, we sometimes could see following WARN log at plugging/unplugging.

[  126.089647] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[  126.099459] ---[ end trace 6b57f8c10cd215a9 ]---
[  131.352131] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[  131.361913] ---[ end trace 6b57f8c10cd215aa ]---

But At Xorg0.log, we couldn’t see any HDMI connected log.

[    25.249] (II) event0  - gpio-keys: is tagged by udev as: Keyboard
[    25.249] (II) event0  - gpio-keys: device is a keyboard
[    25.893] (--) NVIDIA(GPU-0): DFP-0: disconnected
[    25.894] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
[    25.894] (--) NVIDIA(GPU-0): DFP-0: 165.0 MHz maximum pixel clock
[    25.894] (--) NVIDIA(GPU-0):

Xorg.0.log (13.7 KB)

If you hotplug the cable, will xorg log show anything new?

No, nothing.
But WARN log somtimes appeared.

root@ubuntu:~# tail -f  /var/log/Xorg.0.log
[    25.247] (**) Option "config_info" "udev:/sys/devices/platform/gpio-keys/input/input0/event0"
[    25.247] (II) XINPUT: Adding extended input device "gpio-keys" (type: KEYBOARD, id 6)
[    25.247] (**) Option "xkb_model" "pc105"
[    25.247] (**) Option "xkb_layout" "us"
[    25.249] (II) event0  - gpio-keys: is tagged by udev as: Keyboard
[    25.249] (II) event0  - gpio-keys: device is a keyboard
[    25.893] (--) NVIDIA(GPU-0): DFP-0: disconnected
[    25.894] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
[    25.894] (--) NVIDIA(GPU-0): DFP-0: 165.0 MHz maximum pixel clock
[    25.894] (--) NVIDIA(GPU-0):
[ 3897.181002] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[ 3897.190799] ---[ end trace 743e74b308172ed1 ]---
[ 3897.195639] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[ 3897.205313] ---[ end trace 743e74b308172ed2 ]---
[ 3897.210106] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[ 3897.219792] ---[ end trace 743e74b308172ed3 ]---
[ 3904.338279] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[ 3904.348043] ---[ end trace 743e74b308172ed4 ]---
[ 3904.352853] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[ 3904.362544] ---[ end trace 743e74b308172ed5 ]---
[ 3904.367348] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[ 3904.377037] ---[ end trace 743e74b308172ed6 ]---

According to the POST above, [tegra234-dcb-p3701-0000-a02-p3737-0000-a01_hdmi.dtsi] cannot handle HPD.

So we applied [tegra234-dcb-p3701-0000-a02-p3737-0000-a01-hdmi-4-ga5.0.2.dtsi],
There was no change in the recognition of HPD.

As far as I could see with dcb_tool -r, there was no difference.

$ dcb_tool -r tegra234-dcb-p3701-0000-a02-p3737-0000-a01_hdmi.dtsi
=== Reading DCB blob ===

########## Tegra DCB BLOB ###############
########### Display Devices #############
Display Devices::
	Display Devices : [0]
		Type               : [TMDS]
		CCB                : [0]
		Heads              : 0:[Y] 1:[Y]
		Sor                : [0 ]
		HDMI capable       : [1]
		Connector          : [0]
		Bus                : [0]
############### CCB Entries ###############
CCB::
*CCB entries that have both I2C and AUX ports unused (value = 31) are not displayed
	CCB Index : 0
		I2C Port           : [6]
		AUX Port           : [0]
########### Connector entries #############
Connectors::
	Connector Index : 0x0
		Type               : [HDMI]
		Hotplug            : A:[Y]

################# ******* #################


$ dcb_tool -r tegra234-dcb-p3701-0000-a02-p3737-0000-a01-hdmi-4-ga5.0.2.dtsi 
=== Reading DCB blob ===

########## Tegra DCB BLOB ###############
########### Display Devices #############
Display Devices::
	Display Devices : [0]
		Type               : [TMDS]
		CCB                : [0]
		Heads              : 0:[Y] 1:[Y]
		Sor                : [0 ]
		HDMI capable       : [1]
		Connector          : [0]
		Bus                : [0]
############### CCB Entries ###############
CCB::
*CCB entries that have both I2C and AUX ports unused (value = 31) are not displayed
	CCB Index : 0
		I2C Port           : [6]
		AUX Port           : [0]
########### Connector entries #############
Connectors::
	Connector Index : 0x0
		Type               : [HDMI]
		Hotplug            : A:[Y]

################# ******* #################

Since WARN logs are generated according to HPD, I think pinmux does not have a problem.

What modifications are needed to dcb-image for R35.3.1?

Hi,

There is actually not much change between rel-35.1 and rel-35.3.1 for DCB/pinmux change.

They are totally same. What you need to change on rel-35.1 are same as rel-35.3.1.

There is actually not much debug could be done here. Orin DCE firmware does not print log and kernel log does not help either.

For now, if you are sure your dcb/dtb/pinmux are all correct, I could only ask you to compare the HDMI schematic with the xavier nx p3509 HDMI part.

Please also convert your finalized dtb to dts and attach it here.

It looks like this thing was not shared in this post before.

They are totally same. What you need to change on rel-35.1 are same as rel-35.3.1.

OK. We will use [tegra234-dcb-p3701-0000-a02-p3737-0000-a01-hdmi-4-ga5.0.2.dtsi] for rel35.3.1.

For now, if you are sure your dcb/dtb/pinmux are all correct, I could only ask you to compare the HDMI schematic with the xavier nx p3509 HDMI part.

I would like to ask if our HW design is correct.
We follow the Design Guide and connect the BUS Lane as follows.

HDMI0


HDMI2

On the other hand, the following user described that after adjusting data lane it solved the problem.

Will the HDMI Output work with our design?

Please also convert your finalized dtb to dts and attach it here.

The finalized dtb to dts is here.
tegra234-p3701-0004-dx-m2000-gen.dts (523.4 KB)

We applied only the EEPROM, PINMUX, and HDMI changes to the R35.1 environment.

As a result, HDMI OUTPUT was appeared at booting UEFI.
In R35.3.1, we have not yet confirmed the output in UEFI either.

Therefore, there seems to be no problem connecting the HDMI Data Lane at the HW level.

However, after transitioning to the Linux Kernel, the HDMI screen was not displayed and
the HPD connected log was not output by Xorg.

root@ubuntu:~# tail -f /var/log/Xorg.0.log
[   135.965] (**) Option "config_info" "udev:/sys/devices/platform/gpio-keys/input/input0/event0"
[   135.965] (II) XINPUT: Adding extended input device "gpio-keys" (type: KEYBOARD, id 6)
[   135.965] (**) Option "xkb_model" "pc105"
[   135.965] (**) Option "xkb_layout" "us"
[   135.966] (II) event0  - gpio-keys: is tagged by udev as: Keyboard
[   135.966] (II) event0  - gpio-keys: device is a keyboard
[   136.977] (--) NVIDIA(GPU-0): DFP-0: disconnected
[   136.977] (--) NVIDIA(GPU-0): DFP-0: Internal TMDS
[   136.977] (--) NVIDIA(GPU-0): DFP-0: 165.0 MHz maximum pixel clock
[   136.977] (--) NVIDIA(GPU-0):
[  170.924436] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[  170.934537] ---[ end trace 9917025e2f6c611c ]---
[  173.093386] WARNING: CPU: 0 PID: 0 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[  173.103465] ---[ end trace 9917025e2f6c611d ]---
[  183.312647] WARNING: CPU: 0 PID: 274 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[  183.322817] ---[ end trace 9917025e2f6c611e ]---
[  183.908692] WARNING: CPU: 0 PID: 7388 at drivers/gpio/gpio-tegra186.c:937 tegra186_gpio_irq+0x1ac/0x1f0
[  183.918840] ---[ end trace 9917025e2f6c611f ]---

What is the difference between R35.1 and R35.3.1 regarding HDMI Output in UEFI?

What is your method to update device tree here? What is your board config now? If it is customized one, please share the content.

Also, just a suggestion. Please stop sharing all these log as partial snippet. The full log is always the best one to check.
Attach your full log as text file here instead of copy and paste.

This is about R35.1.

What is your method to update device tree here?
Fullflash by flash.sh

Linux_for_Tegra_dev$ time sudo ./flash.sh jetson-agx-orin-devkit mmcblk0p1

What is your board config now?

・for Board conf
jetson-agx-orin-devkit.conf (3.6 KB)

・for EEPROM
tegra234-mb2-bct-common.dtsi (31.6 KB)

・for PINMUX
tegra234-mb1-bct-padvoltage-p3701-0000-a04.dtsi (2.4 KB)
tegra234-mb1-bct-pinmux-p3701-0000-a04.dtsi (65.7 KB)
tegra234-mb1-bct-gpio-p3701-0000-a04.dtsi (4.5 KB)

・for DTB
tegra234-p3737-0000-a00.dtsi (8.8 KB)
tegra234-dcb-p3701-0000-a02-p3737-0000-a01-hdmi-4-ga5.0.2.dtsi (26.8 KB)
tegra234-p3701-0004-p3737-0000.dts (6.5 KB)

Result

202307271354_R35.1_HDMI_trial_console_log.txt (86.6 KB)

Hi,

TBCDTB_FILE=“tegra234-p3701-0000-p3737-0000.dtb”;

This is bootloader dtb which is in use by UEFI. If this is mismatch from your kernel dtb, then behavior would be different.

Also, please share your p3701.conf.common too.

If this is mismatch from your kernel dtb, then behavior would be different.

So, do we always need to change TBCDTB_FILE same as DTB_FILE ?

Also, please share your p3701.conf.common too.

We haven’t change p3701.conf.common. It is default file.

p3701.conf.common (9.2 KB)

Yes please update to same.

Also, share me the whole flash log from flash.sh here.