Hdmi port cannot display when config the dcb to be hdmi

Hi guys, I met a problem when config the dcb from DP to HDMI.

Our custom board use an converter to convert the HDMI signal to VGA. Here is my configuration:

# Linux_for_Tegra/nano.conf
source "${LDK_DIR}/jetson-orin-nano-devkit-nvme.conf";

PINMUX_CONFIG="tegra234-mb1-bct-pinmux-p3767-hdmi-a03.dtsi";    # hdmi
PMC_CONFIG="tegra234-mb1-bct-padvoltage-p3767-hdmi-a03.dtsi";   # hdmi
EMMC_CFG="flash_t234_qspi_nvme.xml";

# ref: https://docs.nvidia.com/jetson/archives/r35.3.1/DeveloperGuide/text/HR/JetsonModuleAdaptationAndBringUp/JetsonOrinNxNanoSeries.html#configuring-the-uphy-lane
ODMDATA="gbe-uphy-config-9,hsstp-lane-map-3,hsio-uphy-config-0";

# https://docs.nvidia.com/jetson/archives/r36.2/DeveloperGuide/SD/FlashingSupport.html#using-flash-sh-with-orin-nx-and-nano
UPHYLANE="c7x2"
if [ "${UPHYLANE}" = "c7x1" ]; then
	UPHYLANE_CONFIG="tegra234-mb1-bct-uphylane-si-c7x1.dtsi";
	EMMC_CFG="flash_t234_qspi_nvme_c7.xml";
elif [ "${UPHYLANE}" = "c7x2" ]; then
	UPHYLANE_CONFIG="tegra234-mb1-bct-uphylane-si-c7x2.dtsi";
	EMMC_CFG="flash_t234_qspi_nvme_c7.xml";
fi

# update_flash_args:
update_flash_args()
{
	# All updates should go into update_flash_args_common to allow
	# for other files to include this file and override variables.
	update_flash_args_common "$@"

	if [ "${board_sku}" = "0001" ]; then
		DTB_FILE=kenexs-v700.dtb;
	elif [ "${board_sku}" = "0003" ]; then
		DTB_FILE=kenexs-v700-nano.dtb;
	else
		echo "Error: Unrecognized module SKU ${board_sku}";
		exit 1;
	fi
	TBCDTB_FILE="${DTB_FILE}";
}
# Linux_for_Tegra/sources/hardware/nvidia/platform/t23x/p3768/kernel-dts/kenexs-v700.dts
/dts-v1/;

#include "tegra234-p3767-0001-p3768-0000-a0.dts"
#include "tegra234-dcb-p3767-0000-hdmi.dtsi"
#include "cvb/kenexs-v700-common.dtsi"

/ {
	model = "KENEXS V700 V01 Board";

	/* C4 - PCIe0 10GigE AQC113-B1-I */
	pcie@14160000 {
		status = "okay";
                max-link-speed = <0x3>;
	};
};

When the #include "tegra234-dcb-p3767-0000-hdmi.dtsi" is not included in dts, the xrandr show as following:

Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 527mm x 296mm
   1920x1080     60.00*+  59.94
   1600x900      60.00
   1280x1024     75.02    60.02
   1280x720      59.94
   1152x864      75.00
   1024x768      75.03    60.00
   800x600       75.00    60.32
   720x480       59.94    59.94
   640x480       75.00    59.94

The screen list is not correct, and hot plug does not work.

But when the #include "tegra234-dcb-p3767-0000-hdmi.dtsi" is included, the display is failed to show up. It shows something like “input signal is not supported” on screen. And the xrandr’s output is:

Screen 0: minimum 8 x 8, current 640 x 480, maximum 32767 x 32767

Here are the logs:

Xorg.0.log (17.7 KB)
debug_serial.log (100.9 KB)

Could you try a native HDMI monitor first instead of converter?

Also, you have to do full flash but not just replace kernel dtb in /boot/dtb.

Hi, @WayneWWW

Could you try a native HDMI monitor first instead of converter?

Sorry. As the converter is soldered on our board, we cannot do for that.

Also, you have to do full flash but not just replace kernel dtb in /boot/dtb.

Yes, I’ve seen another post motioned it. I did do tho full flash by ./tools/kernel_flash/l4t_initrd_flash.sh

It is possible to test Xavier NX devkit + Orin NX with that monitor you are using and see if you would see same issue?

Sorry again. We do not have the devkit. 😳

How about you directly flash your board with p3509 config first? We guarantee the full display software from this config is correct.

Does “p3509 config” means p3509-a02+p3767-0000-maxn.conf ?

p3509-a02+p3767-0000.conf

OK, I’ll try it.

diff --git a/tegra234-p3767-0001-p3509-a02.dts b/tegra234-p3767-0001-p3509-a02.dts
index 7457939..021321f 100644
--- a/tegra234-p3767-0001-p3509-a02.dts
+++ b/tegra234-p3767-0001-p3509-a02.dts
@@ -22,4 +22,24 @@
        nvidia,dtbbuildtime = __DATE__, __TIME__;
        compatible = "nvidia,p3509-0000+p3767-0001", "nvidia,p3767-0001", "nvidia,tegra234", "nvidia,tegra23x";
        model = "NVIDIA Orin NX Developer Kit";
+
+       pcie@14100000 {
+               status = "okay";
+       };
+
+       /* C7 - PCIe2 M.2 Key-M */
+       pcie@141e0000 {
+               status = "okay";
+               num-lanes = <0x01>;
+               phys = <&p2u_gbe_0>;
+               phy-names = "p2u-0";
+       };
+
+       /* C9 - PCIe3 GigE RTL8111H */
+       pcie@140c0000 {
+               status = "okay";
+               num-lanes = <0x01>;
+               phys = <&p2u_gbe_1>;
+               phy-names = "p2u-0";
+       };
 };

As our pcie config is as above, I change the dts, and rebuild and update it to kernel/dtb/tegra234-p3767-0001-p3509-a02.dtb. Then I do a full flash. After the system boot up. The xrandr’s output and the screen is the same as before.

please share lsmod result.

Module                  Size  Used by
fuse                  131072  3
lzo_rle                16384  36
lzo_compress           16384  1 lzo_rle
zram                   32768  6
ramoops                28672  0
reed_solomon           20480  1 ramoops
gevfilter              69632  0
mvUniversalForEthernet   221184  0
nvgpu                2764800  14
aes_ce_blk             36864  0
crypto_simd            24576  1 aes_ce_blk
snd_soc_tegra210_ope    36864  1
snd_soc_tegra186_asrc    40960  1
cryptd                 28672  1 crypto_simd
snd_soc_tegra186_dspk    20480  2
snd_soc_tegra210_iqc    16384  0
snd_soc_tegra186_arad    28672  2 snd_soc_tegra186_asrc
snd_soc_tegra210_mvc    20480  2
aes_ce_cipher          20480  1 aes_ce_blk
snd_soc_tegra210_dmic    20480  4
snd_soc_tegra210_afc    20480  6
snd_soc_tegra210_adx    32768  4
snd_soc_tegra210_mixer    49152  1
snd_soc_tegra210_amx    36864  4
ghash_ce               28672  0
snd_soc_tegra210_admaif   131072  1
snd_soc_tegra210_i2s    24576  6
snd_soc_tegra210_adsp   774144  1
snd_soc_tegra210_sfc    61440  4
snd_soc_tegra_pcm      16384  1 snd_soc_tegra210_admaif
sha2_ce                20480  0
snd_soc_tegra_machine_driver    16384  0
sha256_arm64           28672  1 sha2_ce
snd_hda_codec_hdmi     65536  1
sha1_ce                20480  0
nvadsp                118784  1 snd_soc_tegra210_adsp
atlantic              188416  0
snd_soc_tegra_utils    32768  3 snd_soc_tegra210_admaif,snd_soc_tegra_machine_driver,snd_soc_tegra210_adsp
r8168                 499712  0
snd_soc_simple_card_utils    24576  1 snd_soc_tegra_utils
snd_soc_spdif_tx       16384  0
pwm_fan                24576  0
snd_hda_tegra          16384  0
snd_hda_codec         135168  2 snd_hda_codec_hdmi,snd_hda_tegra
userspace_alert        16384  0
snd_soc_tegra210_ahub  1273856  3 snd_soc_tegra210_ope,snd_soc_tegra210_sfc
ina3221                24576  0
tegra_bpmp_thermal     16384  0
tegra210_adma          28672  2 snd_soc_tegra210_admaif,snd_soc_tegra210_adsp
snd_hda_core           94208  3 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_tegra
spi_tegra114           32768  0
nv_imx219              20480  0
nvidia               1327104  0
nvmap                 217088  32 nvgpu
ip_tables              36864  0
x_tables               53248  1 ip_tables

I don’t know what I’ve missed. But now the problem disappear. Here is what I’ve done.

We use USB-A as the flash port, and the ID pin is always pulled up. Referring to this, I use the following command to do flash:

# create system.img with usb host
echo "create system.img with usb host"
sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
       --external-device nvme0n1p1 \
       -c tools/kernel_flash/flash_l4t_external.xml \
       -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml \
       --no-systemimg" \
       --network usb0 \
       --no-flash nano external

# create initrd with usb device mode
echo "create initrd with usb device mode"
sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
       --external-device nvme0n1p1 \
       -c tools/kernel_flash/flash_l4t_external.xml \
       -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml \
       --no-systemimg" \
       --network usb0 \
       --use-backup-image nano-usb-client external

With the above command, no matter how many times I flash it, the display port is always missed in xrandr, which is the reason of this post. But after I’ve done a normal flash as the following:

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
  -c tools/kernel_flash/flash_l4t_external.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" \
  --showlogs --network usb0 nano-usb-client internal

The problem disappear, the HDMI-0 shows up in xrandr’s output.

I try to reproduce the problem, but failed. May be it’s because that some device tree file is not updated.

Yes, that sounds like some software didn’t get updated in your method.