HDMI direct output not functional on AGX Orin Industrial (p3701-0008) custom carrier — DCE ch[2] never created

Hardware

  • Module: Jetson AGX Orin Industrial (p3701-0008, INT-fused, TE992M BPMP)
  • Carrier: Custom design (hello-agx-orin-devkit-industrial)
  • Display: Native HDMI on the carrier, wired per DG-10653-001 v1.8 Figure 9-4
    • TMDS lanes use HDMI_DP2_TX[3:0]_P/N
    • HPD uses DP2_HPD (with N-MOSFET inverter, software ACTIVE_LOW correction in place)
    • DDC uses DP2_AUX_CH_P/N
    • VDD_3V3_HDMI / VDD_5V0_HDMI_CON power switches gated by GPIO PAC.06 (hog output-high)

Software

  • L4T: R36.4.4 (JetPack 6.x)
  • conf: hello-agx-orin-devkit-industrial.conf
    • Sources p3701.conf.common (AGX Orin Industrial baseline)

    • Custom PINMUX/PMC dtsi for our carrier (only HDMI-related changes mirror NVIDIA’s NX HDMI pinmux: dp_aux_ch0_hpd_pm0 → rsvd1, gpio-default adds TEGRA234_MAIN_GPIO(M, 0) as input)

    • Mimics NVIDIA’s p3509-a02-p3767-0000.conf HDMI pattern:

      OVERLAY_DTB_FILE += ",tegra234-dcb-p3767-0000-hdmi.dtbo"
      DCE_OVERLAY_DTB_FILE = "tegra234-dcb-p3767-0000-hdmi.dtbo"
      

Symptom

$ cat /sys/class/drm/card1-HDMI-A-1/status
disconnected

$ journalctl -k | grep -E 'dce|drm'
dce: dce_admin_setup_clients_ipc:585  Channel Reset Complete for Type [1]
dce: dce_admin_setup_clients_ipc:561  Get queue info failed for [2]
dce: dce_admin_setup_clients_ipc:585  Channel Reset Complete for Type [3]
dce: dce_start_boot_flow:166  DCE_BOOT_DONE
drm drm: [drm] Cannot find any crtc or sizes
nv_platform 13800000.display: [drm] Cannot find any crtc or sizes

DCE FW boots successfully. IPC client types 1 (HDCP) and 3 (RM_NOTIFY) register.
Type 2 (display IPC channel) is never created — Get queue info failed for [2].

This causes:

  • nvidia-drm cannot find any CRTC
  • HDMI connector permanently disconnected
  • DDC bus i2c-5 timeouts on all addresses

Hardware Verification (confirmed OK)

  • gpio-492 (PAC.06 | hdmi-3v3-enable) out hi — VDD_3V3_HDMI EN GPIO drives HIGH
  • 5V cascade through R274 (10K) → U41 (TPS2065D EN) — VDD_5V0_HDMI_CON cascades on automatically
  • Q12 N-MOSFET HPD inverter circuit works as designed
  • DDC pull-ups (1.8K to VDD_5V0_HDMI_CON) and HPD pull-up (10K to VDD_1V8) verified
  • TMDS lane mapping matches HDMI Type A standard (TX0->Data2, TX2->Data0, etc.)
  • HDMI monitor connected and confirmed working with another source

Experiments Performed

# Attempt Result
1 DCB overlay swap (DP vs Orin Nano HDMI) DRM connector type changes (card1-DP-1 ↔ card1-HDMI-A-1), but ch[2] failure unchanged
2 dce-compat-nx.dtbo overlay (root compatible → nvidia,p3768-0000+p3767-0000) — applied to both OVERLAY_DTB_FILE (kernel DTB) and DCE_OVERLAY_DTB_FILE (DCE FW embedded DTB) No effect on ch[2]
3 DCE FW binary strings analysis No p3701/p3767/p3737 strings in DCE binary — root compatible check via DTB string is unlikely to be the gate
4 Removed dce-compat-nx.dtbo entirely (clean NVIDIA NX HDMI pattern) ch[2] still fails — proves compat-based gating hypothesis wrong
5 NX-emulation BPMP DTB (tegra234-bpmp-3701-0000-as-3767-0000-3737-0000.dtb) Boot fails with FMON_MPLLSB: rate 0 below min 18750000 detected fault 0x80 — Memory PLL off, RAM training mismatched with Industrial module
6 NVIDIA’s official emulation conf p3737-0000-p3701-0000-as-p3767-0000.conf Only supports board_sku=0000/0005, explicitly errors on SKU 0008: Unrecognized module SKU 0008 for emulation

Observations

  1. NVIDIA does not provide an emulation BPMP DTB for p3701-0008. The bootloader/generic/ directory contains:

    tegra234-bpmp-3701-0000-as-3767-0000-3737-0000.dtb   ← exists
    tegra234-bpmp-3701-0005-as-3767-0000-3737-0000.dtb   ← exists
    tegra234-bpmp-3701-0008-as-3767-0000-3737-0000.dtb   ← does NOT exist
    

    This appears intentional — the Industrial module RAM/fuse layout differs and NX-emulation BPMP DTB does not work (confirmed by experiment #5).

  2. DCE FW behavior is identical between AGX Orin and Orin NX configurations from a kernel-visible standpoint, yet ch[2] only succeeds on NX-class boards with the HDMI DCB applied via DCE_OVERLAY_DTB_FILE.

  3. The DCE FW gating mechanism for ch[2] is not explained by:

    • Root compatible string (verified by experiments 2, 4, and binary analysis)
    • DCB content (verified by experiment 1)
    • Linux-side DTB (kernel os_gpio_hotplug_a etc. only affects nvidia-drm HPD reporting)

Questions

  1. Is HDMI direct output officially supported on AGX Orin Industrial (p3701-0008)?

  2. If yes, what conf/overlay/firmware combination enables DCE IPC ch[2] for HDMI on p3701-0008? Specifically, what gates ch[2] creation in DCE FW?

  3. If not officially supported, is a HDMI Active Converter IC (e.g., ANX7625, ANX7530) the only path? Or is there an alternative DCE FW variant for Industrial modules with HDMI capability?

  4. Is a tegra234-bpmp-3701-0008-as-3767-0000-3737-0000.dtb (or equivalent NX-emulation for Industrial SKU) planned for a future L4T release?

Constraints

  • The custom carrier provides HDMI only — no native DP connector.
  • Module replacement to standard p3701-0000 is not viable (Industrial-grade temperature range required).
  • HDMI Active Converter is on the table but represents a board respin and is the last resort.

Any guidance, conf reference, or pointer to the DCE FW HDMI initialization code path would be appreciated.

Just want to clarify.

  1. |5|NX-emulation BPMP DTB (tegra234-bpmp-3701-0000-as-3767-0000-3737-0000.dtb)|Boot fails with FMON_MPLLSB: rate 0 below min 18750000 detected fault 0x80 — Memory PLL off, RAM training mismatched with Industrial module|
    | — | — | — |
    |6|NVIDIA’s official emulation conf p3737-0000-p3701-0000-as-p3767-0000.conf|Only supports board_sku=0000/0005, explicitly errors on SKU 0008: Unrecognized module SKU 0008 for emulation|

These tests are not related to HDMI. I will just ignore those. Doing any emulation here won’t bring you HDMI up.

  1. Please do not use DRM to test first. Those things are separate items.
    Use the default Ubuntu desktop and xrandr command to check first. I can guarantee those would work fine if proper software configuration and correct hardware design are made.
    Tell me what is xrandr showing or xorg log telling when you hotplug your HDMI cable. Will you see xorg log tell you something is connected?

Reply to staff
Thanks for the clarification. Understood — emulation tests (#5, #6 in our matrix) are unrelated, ignoring those.
I tested with the default Ubuntu desktop (gdm + Xorg, vt2) and xrandr as requested. Results below.
System State
$ systemctl get-default
graphical.target
$ systemctl is-active gdm
active
$ pgrep -a Xorg
1046 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority
-nolisten tcp -background none -noreset -keeptty -novtswitch -verbose 3

GNOME desktop is running normally (just no monitor output).
xrandr Output
$ DISPLAY=:0 XAUTHORITY=/run/user/1000/gdm/Xauthority 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)

Only HDMI-0 listed (no DP-0 etc.), and it stays disconnected regardless of monitor connection.
Xorg Log (HDMI-related lines)
[ 23.908] (–) NVIDIA(0): Valid display device(s) on GPU-0 at SoC
[ 23.908] (–) NVIDIA(0): DFP-0
[ 24.043] (–) NVIDIA(GPU-0): DFP-0: disconnected
[ 24.043] (–) NVIDIA(GPU-0): DFP-0: Internal TMDS
[ 24.043] (–) NVIDIA(GPU-0): DFP-0: 165.0 MHz maximum pixel clock
[ 24.043] (–) NVIDIA(0): No enabled display devices found; starting anyway because
[ 24.048] (WW) NVIDIA(0): Unable to get display device for DPI computation.
[ 24.536] (II) modeset(G0): Output HDMI-1-1 has no monitor section
[ 25.936] (–) NVIDIA(GPU-0): DFP-0: disconnected # repeated polling
[ 29.167] (–) NVIDIA(GPU-0): DFP-0: disconnected
[1092.6 ] (–) NVIDIA(GPU-0): DFP-0: disconnected

What this tells me: - NVIDIA driver correctly enumerates DFP-0 as Internal TMDS (HDMI) with 165 MHz max pixel clock — DCB and
TMDS routing recognized OK. - The driver actively polls for HPD/EDID at boot and continues during runtime. - Every poll returns
disconnected.
Hotplug Test
I cleared dmesg, plugged the HDMI cable into a known-good monitor (cable + monitor verified on another machine), waited 10+
seconds, and checked again:
$ sudo dmesg -c # cleared
$ # plug HDMI cable
$ sleep 10
$ sudo dmesg | tail
(no new events) $ sudo tail /var/log/Xorg.0.log
(last DFP-0 disconnected message is still from boot-time poll at 1092s,
no new events triggered by cable insertion)

-> No HPD event is reaching the SoC on cable insertion. No DDC traffic either (i2c-5 shows no activity in dmesg).
What This Suggests
Since NVIDIA driver correctly identifies the SOR0/TMDS path (per Xorg Internal TMDS, 165 MHz), and SW config matches NVIDIA
reference (Pinmux Changes rule applied, DCB modified for HDMI), the failure point appears to be HPD signal not reaching the SoC
from the connector.
Our HPD chain on the custom carrier: HDMI connector J16.P19 (monitor HPD, 5V level) → R267 (10K, NVIDIA Design Guide §9
recommends 1.8K) → Q12 inverter (NPN MOSFET, gate = HPD divider) → R273 (100K, gate-to-GND) → Q12.DRAIN → R263
(10K, pull-up to VDD_1V8) → CVM K50 → SoC DP_AUX_CH0_HPD (PM.00, active-low)
We have not yet been able to measure this chain with DMM (HW engineer unavailable).
Questions
From the Xorg evidence (DFP-0 enumerated + polled but always disconnected), do you concur the issue is on the HPD signal
path (HW side, not SW)?
With monitor connected, the SoC gpio-424 (PM.00) shows no edge events at all (/sys/kernel/debug/gpio PM.00 entry has
empty owner). Should we expect at least a transition even if downstream DDC fails? Or is the lack of any HPD edge consistent
with the HW chain being open/dead?
The DCE log at boot consistently shows: dce: dce_ipc_channel_init:311 Invalid Channel State [0x0] for ch_type [2]
dce: dce_admin_setup_clients_ipc:561 Get queue info failed for [2] while ch[1] and ch[3] succeed. Is this a known
consequence of no HPD signal reaching DCE, or an independent issue?
Is there an NVIDIA-provided test pattern or force on procedure that drives SOR0 even without HPD, to verify TMDS output at
the connector with an oscilloscope? (We want to isolate “SoC TMDS dead” vs “HPD path broken”.)
Attached again (same files as the previous post, with the latest pinmux dtsi reflecting the NVIDIA Bidirectional + 3.3V Tolerance
Disable rule applied to PA.03 / PY.01).
Thanks for the time

forum_post_20260512.tar.gz (19.9 KB)

Are you sure your pinmux setting is really taking effect?

Are you sure the file which you modified pinmux really gets flashed to the board?

Same question to your hotplug gpio definition in the kernel device tree. Are you sure you do the full flash?

You don’t need to keep doing those analysis by yourself. Only need to reply the questions I requested.

Reply to WayneWWW

Hi Wayne,

Per your four questions:


Q1: Pinmux setting taking effect?

Yes. PM.00 (dp_aux_ch0_hpd_pm0) pinmux register confirmed via devmem:

$ sudo busybox devmem 0x02440030 32
0x00001050

Decode: function=F0 (dp), tristate=ENABLE, enable-input=ENABLE, io-high-voltage=DISABLE.

Matches the xlsm-generated reference dtsi exactly.


Q2: File flashed?

Yes. The MB1 BCT containing the updated pinmux is on the active boot slot (A). Verified by register readback above (was 0x1051 before flash with function=rsvd1, now 0x1050 with function=dp).


Q3: Hotplug GPIO defined?

Yes. In display@13800000:

$ xxd /proc/device-tree/display@13800000/os_gpio_hotplug_a
00000000: 0000 00f1 0000 0060 0000 0001

phandle 0xf1 → gpio controller, gpio 0x60 = TEGRA234_MAIN_GPIO(M, 0) = PM.00, polarity 0x01 = active-low (Q12 NMOS inverter on our board).


Q4: Full flash done?

Yes. Full flash completed via:

sudo ./flash.sh <board.conf> mmcblk0p1

(no partial -k flag)


Current state after the above:

xrandr:                          HDMI-0 disconnected
/sys/class/drm/card1-HDMI-A-1/status: disconnected
Xorg.0.log:                      DFP-0: Internal TMDS, 165.0 MHz maximum pixel clock, disconnected
dmesg DCE:                       DCE_BOOT_DONE, Channel Reset Complete for Type [1] and [3]
i2c-5 (DDC, 31b0000.i2c):        I2C transfer timed out (all addresses)

NVKMS recognizes DFP-0 as Internal TMDS 165MHz capable, but reports disconnected. DDC i2c-5 controller is alive but signal does not reach the monitor.


HW verification:

Our custom carrier’s HPD path uses an inverter (NMOS), so the HPD signal is active-low at the SoC pin. This is why we set the polarity flag to 0x01 (active-low) in os_gpio_hotplug_a (Q3).

Probed the HPD line at the SoC pin (PM.00, dp_aux_ch0_hpd_pm0) with a DMM:

  • HDMI cable plugged in : 0 V (asserted)
  • HDMI cable removed : 1.8 V (deasserted)

So the HPD electrical signal does arrive at the SoC pin and toggles correctly with cable insertion, but NVKMS still reports DFP-0 as disconnected.

What additional check should we run next?

Thanks

? Your pinmux setting is wrong. We need hpd pinmux to be a GPIO but not SFIO when using for HDMI.