Jetson Thor 3 HDMI hotplug issue

We use JetPack7.1/L4T 38.4 SDK and custom PCB to setup 3 HDMI output. There are 3 HMDI output but HDMI hotplug only hpd1 work. hpd0 and hpd2 are failed.

1.dcb

=== Reading DCB blob ===
=== Chip Variant T26X ===

########## 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]
        Pad Link           : [0]
    Display Devices : [1]
        Type               : [TMDS]
        CCB                : [1]
        Heads              : 0:[Y] 1:[Y]
        Sor                : [0 ]
        HDMI capable       : [1]
        Connector          : [1]
        Bus                : [1]
        Pad Link           : [1]
    Display Devices : [2]
        Type               : [TMDS]
        CCB                : [2]
        Heads              : 0:[Y] 1:[Y]
        Sor                : [1 ]
        HDMI capable       : [1]
        Connector          : [2]
        Bus                : [2]
        Pad Link           : [2]
############### 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]
    CCB Index : 1
        I2C Port           : [10]
        AUX Port           : [1]
    CCB Index : 2
        I2C Port           : [4]
        AUX Port           : [2]
########### Connector entries #############
Connectors::
    Connector Index : 0x0
        Type               : [HDMI]
        Hotplug            : A:[Y]
    Connector Index : 0x1
        Type               : [HDMI]
        Hotplug            : A:[Y]
    Connector Index : 0x2
        Type               : [HDMI]
        Hotplug            : A:[Y]

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

2.device tree

display@8808c00000 {
        status = "okay";
        os_gpio_hotplug_a = <&gpio_main TEGRA264_MAIN_GPIO(F, 4) GPIO_ACTIVE_LOW>;
        os_gpio_hotplug_b = <&gpio_main TEGRA264_MAIN_GPIO(F, 3) GPIO_ACTIVE_LOW>;
        os_gpio_hotplug_c = <&gpio_main TEGRA264_MAIN_GPIO(F, 5) GPIO_ACTIVE_LOW>;
        nvdisplay-niso {
            status = "okay";
        };
    };

3.gpio

gpio@ac300000 {
         default {
                gpio-input = <
                        TEGRA264_MAIN_GPIO(F, 3)
                        TEGRA264_MAIN_GPIO(F, 4)
                        TEGRA264_MAIN_GPIO(F, 5)
                >;
       };
};

4.pinmux

                        dp_aux_ch0_p {
                                nvidia,pins = "dp_aux_ch0_p";
-                               nvidia,function = "dp_aux_ch0_p";
+                               nvidia,function = "i2c6_clk";
                                nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                                nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                nvidia,enable-input = <TEGRA_PIN_ENABLE>;
@@ -592,7 +592,7 @@

                        dp_aux_ch0_n {
                                nvidia,pins = "dp_aux_ch0_n";
-                               nvidia,function = "dp_aux_ch0_n";
+                               nvidia,function = "i2c6_dat";
                                nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                                nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                nvidia,enable-input = <TEGRA_PIN_ENABLE>;
@@ -625,7 +625,7 @@

                        dp_aux_ch2_p {
                                nvidia,pins = "dp_aux_ch2_p";
-                               nvidia,function = "dp_aux_ch2_p";
+                               nvidia,function = "i2c4_clk";
                                nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                                nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                nvidia,enable-input = <TEGRA_PIN_ENABLE>;
@@ -636,7 +636,7 @@

                        dp_aux_ch2_n {
                                nvidia,pins = "dp_aux_ch2_n";
-                               nvidia,function = "dp_aux_ch2_n";
+                               nvidia,function = "i2c4_dat";
                                nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                                nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                nvidia,enable-input = <TEGRA_PIN_ENABLE>;

Is xorg log giving you any new log when you do hotplug?

I plugin HDMI1 power on. The HDMI1 video output normally. Then I plugin and plugout HDMI0, The Xorg has no new update and no video output on HDMI0. If I plugin HDMI0 (It has no video) and then I plugout HDMI1, the Xorg log “/var/log/Xorg.0.log“ has new update and the HDMI0 video output normally. Xorg new update as folling.

[  1322.758] (--) NVIDIA(GPU-0): DFP-1: disconnected
[  1322.758] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
[  1322.758] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
[  1322.758] (--) NVIDIA(GPU-0):
[  1322.899] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): connected
[  1322.899] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): Internal TMDS
[  1322.899] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): 600.0 MHz maximum pixel clock
[  1322.899] (--) NVIDIA(GPU-0):
[  1322.932] (--) NVIDIA(GPU-0): DFP-1: disconnected
[  1322.932] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
[  1322.932] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
[  1322.932] (--) NVIDIA(GPU-0):
[  1323.028] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): connected
[  1323.028] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): Internal TMDS
[  1323.028] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): 600.0 MHz maximum pixel clock
[  1323.028] (--) NVIDIA(GPU-0):
[  1323.062] (--) NVIDIA(GPU-0): DFP-1: disconnected
[  1323.062] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
[  1323.062] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
[  1323.062] (--) NVIDIA(GPU-0):
[  1323.160] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): connected
[  1323.160] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): Internal TMDS
[  1323.160] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): 600.0 MHz maximum pixel clock
[  1323.160] (--) NVIDIA(GPU-0):
[  1323.256] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): connected
[  1323.256] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): Internal TMDS
[  1323.256] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): 600.0 MHz maximum pixel clock
[  1323.256] (--) NVIDIA(GPU-0):
[  1323.290] (--) NVIDIA(GPU-0): DFP-1: disconnected
[  1323.290] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
[  1323.290] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
[  1323.290] (--) NVIDIA(GPU-0):
[  1323.301] (--) NVIDIA(GPU-0): DFP-2: disconnected
[  1323.301] (--) NVIDIA(GPU-0): DFP-2: Internal TMDS
[  1323.301] (--) NVIDIA(GPU-0): DFP-2: 165.0 MHz maximum pixel clock
[  1323.301] (--) NVIDIA(GPU-0):
[  1323.368] (II) NVIDIA(0): Setting mode "HDMI-0: nvidia-auto-select @2560x1440 +0+0 {ViewPortIn=2560x1440, ViewPortOut=2560x1440+0+0}"
[  1323.649] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): connected
[  1323.649] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): Internal TMDS
[  1323.649] (--) NVIDIA(GPU-0): Asustek Computer Inc VG27AQ3A (DFP-0): 600.0 MHz maximum pixel clock
[  1323.649] (--) NVIDIA(GPU-0):
[  1323.684] (--) NVIDIA(GPU-0): DFP-1: disconnected
[  1323.684] (--) NVIDIA(GPU-0): DFP-1: Internal TMDS
[  1323.684] (--) NVIDIA(GPU-0): DFP-1: 165.0 MHz maximum pixel clock
[  1323.684] (--) NVIDIA(GPU-0):
[  1323.695] (--) NVIDIA(GPU-0): DFP-2: disconnected
[  1323.695] (--) NVIDIA(GPU-0): DFP-2: Internal TMDS
[  1323.695] (--) NVIDIA(GPU-0): DFP-2: 165.0 MHz maximum pixel clock
[  1323.695] (--) NVIDIA(GPU-0):

If I plugin HDMI0 (It has no video) and then I plugout HDMI1, the Xorg log “/var/log/Xorg.0.log“ has new update and the HDMI0 video output normally.

What would happen if you plug in the HDMI1 after above situation? Will it detect in xorg or not?

Yes, it can detect hpd1 and xorg update new data. It became dual-screen output.

[ 36452.767] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): connected
[ 36452.767] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): Internal TMDS
[ 36452.767] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): 600.0 MHz maximum pixel clock
[ 36452.767] (--) NVIDIA(GPU-0):
[ 36452.912] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): connected
[ 36452.912] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): Internal TMDS
[ 36452.912] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): 600.0 MHz maximum pixel clock
[ 36452.912] (--) NVIDIA(GPU-0):
[ 36453.009] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): connected
[ 36453.009] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): Internal TMDS
[ 36453.009] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): 600.0 MHz maximum pixel clock
[ 36453.009] (--) NVIDIA(GPU-0):
[ 36453.106] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): connected
[ 36453.106] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): Internal TMDS
[ 36453.106] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): 600.0 MHz maximum pixel clock
[ 36453.106] (--) NVIDIA(GPU-0):
[ 36453.202] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): connected
[ 36453.202] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): Internal TMDS
[ 36453.202] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): 600.0 MHz maximum pixel clock
[ 36453.202] (--) NVIDIA(GPU-0):
[ 36453.298] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): connected
[ 36453.298] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): Internal TMDS
[ 36453.298] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): 600.0 MHz maximum pixel clock
[ 36453.298] (--) NVIDIA(GPU-0):
[ 36453.309] (--) NVIDIA(GPU-0): DFP-2: disconnected
[ 36453.309] (--) NVIDIA(GPU-0): DFP-2: Internal TMDS
[ 36453.309] (--) NVIDIA(GPU-0): DFP-2: 165.0 MHz maximum pixel clock
[ 36453.309] (--) NVIDIA(GPU-0):
[ 36453.357] (II) NVIDIA(0): Setting mode "HDMI-0: nvidia-auto-select @1920x1080 +0+0 {ViewPortIn=1920x1080, ViewPortOut=1920x1080+0+0}, HDMI-1: nvidia-auto-select @1920x1080 +1920+0 {ViewPortIn=1920x1080, ViewPortOut=1920x1080+0+0}"
[ 36453.827] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): connected
[ 36453.827] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): Internal TMDS
[ 36453.827] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): 600.0 MHz maximum pixel clock
[ 36453.827] (--) NVIDIA(GPU-0):
[ 36453.922] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): connected
[ 36453.922] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): Internal TMDS
[ 36453.922] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): 600.0 MHz maximum pixel clock
[ 36453.922] (--) NVIDIA(GPU-0):
[ 36454.017] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): connected
[ 36454.017] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): Internal TMDS
[ 36454.017] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): 600.0 MHz maximum pixel clock
[ 36454.017] (--) NVIDIA(GPU-0):
[ 36454.113] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): connected
[ 36454.113] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): Internal TMDS
[ 36454.113] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): 600.0 MHz maximum pixel clock
[ 36454.113] (--) NVIDIA(GPU-0):
[ 36454.252] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): connected
[ 36454.252] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): Internal TMDS
[ 36454.252] (--) NVIDIA(GPU-0): ViewSonic VX2257 (DFP-0): 600.0 MHz maximum pixel clock
[ 36454.252] (--) NVIDIA(GPU-0):
[ 36454.348] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): connected
[ 36454.348] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): Internal TMDS
[ 36454.348] (--) NVIDIA(GPU-0): Samsung SMBX2231 (DFP-1): 600.0 MHz maximum pixel clock
[ 36454.348] (--) NVIDIA(GPU-0):
[ 36454.359] (--) NVIDIA(GPU-0): DFP-2: disconnected
[ 36454.359] (--) NVIDIA(GPU-0): DFP-2: Internal TMDS
[ 36454.359] (--) NVIDIA(GPU-0): DFP-2: 165.0 MHz maximum pixel clock
[ 36454.359] (--) NVIDIA(GPU-0):

Could you do this test first and tell me what is the result there?

  1. Do not connect anything monitor. Just boot up Thor.
  2. When you are sure the device boots up, connect your HDMI for HPD0.
  3. Use ssh or UART to check Xorg log status and attach me the full Xorg log.

The attached file is the Xorg log.(by ssh)

hpd_xorg.log (22.6 KB)

[ 21.061] (–) NVIDIA(GPU-0): LTM 2CH 1080 (DFP-1): connected
[ 21.061] (–) NVIDIA(GPU-0): LTM 2CH 1080 (DFP-1): Internal TMDS
[ 21.061] (–) NVIDIA(GPU-0): LTM 2CH 1080 (DFP-1): 600.0 MHz maximum pixel clock
[ 21.061] (–) NVIDIA(GPU-0):

Looks like HPD is detected. How is the actual status of the monitor?

There is one HDMI switch chip on custom PCB. It has 2 input and 1 output. Thor HDMI1 output connect to the one of the input. The chip output connect to the HDMI connector. And I don’t connect any monitor. Just connect HDMI0 to monitor.

We didn’t validate such design. From software side log it looks like HPD is working fine.

Even in this status. I plug out and plug in HPD0/HPD2. It has no any response. And Xorg log not update. No video output.

If I plug in or plug out HPD1. It can read all EDID data (HDMI0, HDMI1, HDMI2) and output video and update Xorg log.

Hi

我用中文確認一下好了… 感覺前面的實驗你沒做正確.

  1. Do not connect anything monitor. Just boot up Thor.
  2. When you are sure the device boots up, connect your HDMI for HPD0.
  3. Use ssh or UART to check Xorg log status and attach me the full Xorg log.

這裡沒有請你接任何螢幕在HPD1.

但看起來你的實驗還是插著HPD1在做…

請注意一下我們現在完全不需要HPD1有任何螢幕接上. 只需要做HPD0的插拔

Hi

我也再說明一下。我們的板子HDMI1輸出先接到一顆HDMI switch的IC,透過HMDI switch IC再接到HDMI的connector.所以即使HDMI1 connector沒有接monitor,也會偵測到HDMI1有東西,就是HDMI switch IC.

所以現在我們把HPD1跳開,直接接到HDMI1 connector. I2C_10 跳開(原本接到HDMI switch IC)

,一樣按照你說的3個步驟,不接任何monitor開機,確認開機完成後ssh連線,再接HPD0,然後cat Xorg.log.如附檔

hpd_xorg_01.log (21.9 KB)

Hi,

請問/sys/kernel/debug/gpio裡面有偵測到hpd gpio的變化嗎?

或是gpioinfo + gpioget的方式

Hi

HPD0插拔訊號如下,但Xorg_log沒更新

nvthor@tegra-ubuntu:~$ sudo busybox devmem 0x810c313060
0x00000001
nvthor@tegra-ubuntu:~$ sudo busybox devmem 0x810c313068  //HPD0 plug in
0x00000000
nvthor@tegra-ubuntu:~$ sudo busybox devmem 0x810c313068  //HPD0 plug out
0x00000001
nvthor@tegra-ubuntu:~$

能請你把 “os_gpio_hotplug_a = <&gpio_main TEGRA264_MAIN_GPIO(F, 4) GPIO_ACTIVE_LOW>;
os_gpio_hotplug_b = <&gpio_main TEGRA264_MAIN_GPIO(F, 3) GPIO_ACTIVE_LOW>;
os_gpio_hotplug_c = <&gpio_main TEGRA264_MAIN_GPIO(F, 5) GPIO_ACTIVE_LOW>;”

這一串改成只有hpd0的狀況然後再測試一次嗎?

也將DCB中 HDMI1/HDMI2也先移除

DCB要如何移除HDMI1/HDMI2? 用dcb_tool做成如下可以嗎?

########## 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]
                Pad Link           : [0]
        Display Devices : [1]
                Type               : [TMDS]
                CCB                : [1]
                Heads              : 0:[Y] 1:[Y]
                Sor                : [0 ]
                HDMI capable       : [1]
                Connector          : [1]
                Bus                : [1]
                Pad Link           : [1]
        Display Devices : [2]
                Type               : [TMDS]
                CCB                : [2]
                Heads              : 0:[Y] 1:[Y]
                Sor                : [1 ]
                HDMI capable       : [1]
                Connector          : [2]
                Bus                : [2]
                Pad Link           : [2]
############### 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]
        Connector Index : 0x1
                Type               : [SKIP_ENTRY]
                Hotplug            : A:[N]
        Connector Index : 0x2
                Type               : [SKIP_ENTRY]
                Hotplug            : A:[N]

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

 display@8808c00000 {
                status = "okay";
               os_gpio_hotplug_b = <&gpio_main TEGRA264_MAIN_GPIO(F, 3) GPIO_ACTIVE_LOW>;
                nvdisplay-niso {
                        status = "okay";
                };
nvthor@tegra-ubuntu:~$ xrandr
Screen 0: minimum 8 x 8, current 640 x 480, maximum 32767 x 32767
HDMI-0 disconnected primary (normal left inverted right x axis y axis)
VGA-0 disconnected (normal left inverted right x axis y axis)
VGA-1 disconnected (normal left inverted right x axis y axis)
nvthor@tegra-ubuntu:~$

一樣按照你說的3個步驟,不接任何monitor開機,確認開機完成後ssh連線,再接HPD0,然後cat Xorg.log.如附檔

hpd_xorg_02.log (22.0 KB)

DCB 不使用的項目全部設定成skip.

然後 os_gpio_hotplug_b也改成用os_gpio_hotplug_a

########## 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]
                Pad Link           : [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]

################# ******* #################
        display@8808c00000 {
                status = "okay";
               os_gpio_hotplug_a = <&gpio_main TEGRA264_MAIN_GPIO(F, 3) GPIO_ACTIVE_LOW>;
                nvdisplay-niso {
                        status = "okay";
                };
nvthor@tegra-ubuntu:~$ xrandr
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080     60.00*+  59.94    50.00
   1680x1050     59.95
   1600x1200     60.00
   1440x900      74.98    59.89
   1280x1024     75.02    60.02
   1280x960      60.00
   1280x800      59.81
   1280x720      60.00    59.94    50.00
   1152x864      75.00
   1024x768      75.03    70.07    60.00
   800x600       75.00    72.19    60.32    56.25
   720x576       50.00
   720x480       59.94
   640x480       75.00    72.81    59.94
nvthor@tegra-ubuntu:~$

一樣不接任何monitor開機,確認開機完成後ssh連線,再接HPD0,然後cat Xorg.log.如附檔

看起來HPD0是有反應的

hpd_xorg_03.log (22.7 KB)

ok. 能否也幫我實驗HPD2單獨使用類似以上配置的方法看能不能功能正常?