HDMI output not working


We designed an own carrier card for the module. However, our HDMI is not working. We used HDMI_DP2 and HDMI_DP1 ports as HDMI. So, we have 2 HDMI output (HDMI_DP0 does not use).
We don’t use any controllers for HDMI ports. HDMI lines come out of the module and only go to HDMI level shifter. Then it goes directly to the connector.
Also 5V required for HDMI is given directly. There is no circuit structure for voltage and USB type C like in the Xavier developer kit board.
What change do we need to make in the tegra194-p2888-0001-p2822-0000-common.dtsi file. Or do we need to modify any other dtsi files (like tegra194-p2822-disp.dtsi)?

  1. Such issue needs to debug each port one by one. Thus, please disable other nvdisplay when you debug specific port.
    For example, if you want to debug HDMI_DP2, disable other nvdisplays which are not using sor2.

  2. Since our devkit by default has HDMI port on HDMI_DP2, this shall directly work without much change. Please tell us if this port can work or not.

  3. If it can work, just write similar nvdisplay/sor configuration for HDMI_DP1.

  4. Share us the dmesg when you hit error.

One of our HDMI outputs is the HDMI_DP2 port. However, that port does not work either.
As you said, we disabled other nvdisplays that do not use sor2. We just left the HDMI_DP2 port open. But the result has not changed. HDMI output on customer board still does not work. Moreover, when we did this, the HDMI output on the Nvidia developer kit also stopped working. It only prints the boot logo.
I made changes to the tegra194-p2888-0001-p2822-0000-common.dtsi and tegra194-p2822-disp.dtsi files related to HDMI. The dtsi files I changed are attached.

tegra194-p2888-0001-p2822-0000-common.dtsi (8.3 KB) tegra194-p2822-disp.dtsi (3.1 KB)

Are there any errors? Or is there any other dtsi file I need to change for the HDMI? Can you explain exactly the changes I have to make?

When all nvdisplays are on, I attached dmesg that I got from the customer board and devkit (HDMI output is taken from devkit when all nvdisplays are on, the HDMI output of the customer board is not working).

all_nvdisplay_on_customer_board.TXT (91.6 KB) all_nvdisplay_on_nvidia_developer_kit.TXT (100.6 KB)

In addition, after the changes I made for nvdisplays ports (DP0/sor0 and DP1/sor1 are off), I attached logs that I got from the customer board and devkit.

DP0_off_DP1_off_customer_board.TXT (28.8 KB) DP0_off_DP1_off_nvidia_developer_kit.TXT (28.1 KB)

Where is the problem exactly? Can you suggest a solution?


Before we starting, there are few things to modify first.

  1. If you read your own log, you will find out your kernel log is very short… which almost has nothing there.

That is because by default the kernel log is silent from UART log. Thus, you can enable them by removing the “quiet” in /boot/extlinux/extlinux.conf and reboot.

Or you can directly use command dmesg and dump that log.

  1. I don’t see you disable any nvdisplay at all. nvdisplay is the “head” in your tegra194-p2822-disp.dtsi .

  2. You can read xavier TRM for display controller chapter to know more about what is nvdisplay and what is SOR.

I got logs with the command “dmesg --follow” while all nvdisplays were open. I am sending it again in the attachment. Unfortunately, I can send the logs on Monday that I got with “dmesg --follow” command while nvdisplays were off. However, if you still say the kernel logs are short, I can do as you say and retrieve them and send them all again on Monday.
“you can enable them by removing the “quiet” in /boot/extlinux/extlinux.conf and reboot.”

all_nvdisplay_on_customer_board - dmesg.TXT (62.4 KB) all_nvdisplay_on_nvidia_developer_kit - dmesg.TXT (72.4 KB)

Sorry, I sent the wrong file tegra194-p2822-disp.dtsi. The correct file is as follows (head1, head2, sor0 and ask1 disable, head0 and sor2 okay).

tegra194-p2822-disp.dtsi (3.3 KB)

Do I need to modify only tegra194-p2822-disp.dtsi file for nvdisplays settings? Is the following place in the file tegra194-p2888-0001-p2822-0000-common.dtsi correct? Or do I need to make a change here as well?

&head0 {
extcon-cables = <&typec_port0 2 &typec_port1 2>;
extcon-cable-names = “typec0”, “typec1”;
#extcon-cells = <1>; };
&head1 {
extcon-cables = <&typec_port0 2 &typec_port1 2>;
extcon-cable-names = “typec0”, “typec1”;
#extcon-cells = <1>; };
&head2 {
extcon-cables = <&typec_port0 2 &typec_port1 2>;
extcon-cable-names = “typec0”, “typec1”;
#extcon-cells = <1>; };
&sor0 {
/* nvidia,typec-port = /bits/ 8 <0>;/
&sor1 {
nvidia,typec-port = /bits/ 8 <1>;*/

  1. The log is correct now. You can see “tegradc” is showing up in your text file.

2.1 Is there any problem in your log “all_nvdisplay_on_nvidia_developer_kit - dmesg.TXT” ? I see the mode 640x480 is detected by devkit. And there is no error in this log.

2.2 As for your custom board, I see you indeed only enable HDMI head. However, it looks like tegra side does not detect your HDMI at all. If you hotplug the HDMI cable after system boots up, will you see any new log from dmesg?

  1. If there are no type C port on your board, remove those nvidia,typec-port under your sor.

2.1 There is no problem on the “all_nvdisplay_on_nvidia_developer_kit - dmesg.TXT” log. I sent it in case you want to compare it with the customer board log. But when I turn off DP0 and DP1 on tegra194-p2822-disp file, the HDMI output also turns off in the developer kit. It just prints the boot logo. I think there is a problem here, it should continue to work because HDMI (head0 is enable) is turned on. I will send and receive logs on Monday for this problem in the developer kit.

2.2 I will try this. What could be the reason tegra side does not detect our HDMI at all.

Do I need to make any changes in the section below? I am giving 5V to HDMI directly from the power converter. Do I have to close the last 3 lines (1V, 1V8 and 5V) here?

&head0 {
status = “okay”;
nvidia,fb-bpp = <32>;
nvidia,fbmem-size = <265420800>;
nvidia,fb-flags = <TEGRA_FB_FLIP_ON_PROBE>;
win-mask = <0x3>;
nvidia,fb-win = <0>;
nvidia,dc-connector = <&sor2>;
nvidia,dc-flags = <TEGRA_DC_FLAG_ENABLED>;
avdd_hdmi-supply = <&p2888_spmic_sd0>; /* 1v0 /
avdd_hdmi_pll-supply = <&p2888_spmic_sd1>; /
1v8 /
vdd_hdmi_5v0-supply = <&p2822_vdd_hdmi_5v0>; /
5v0 */

I guess probably due to the gpio which is responsible for hpd does not match your board schematic.

Actually, you can check your device tree under /proc/device-tree. This will tell you the full device tree property there.
The file “tegra194-p2822-disp” may not include the full dts that are related to display. I cannot give you detail now because out of office.

You can grep some keywords like “hpd-gpio” in your dts files.

Also, please modify the 5v0 supply to match your schematic too. By default, p2822_vdd_hdmi_5v0 is a regulator that leverage another GPIO.

vdd_hdmi_5v0-supply = <&p2822_vdd_hdmi_5v0>; / 5v0 */

I could not try the changes you said. I am having trouble flashing the module. While flashing with SDK manager, we get an error like in the log and the module does not open. What would be the reason?
Untitled Document 1 (31.8 KB)

I made changes to “tegra194-p2822-disp.dtsi” and “tegra194-p2888-0001-p2822-0000-common.dtsi” files for HDMI. Additionally, will I make changes to pinmux as well? Do I need to change the places in the picture like the default HDMI setting? Do I need to convert DP_AUX_CH0/1 parts to I2Cx?

If you move the module to NV devkit carrier board, will you still see that gpu error?

And any reason why those error didn’t appear in your previous log?

It works when I plug in another module that has the original image. However, when I compile the kernel (even without making any changes in the source code) and flashing it, I encounter this error. I do the compilation phase as I always do. I did not see such an error before. At what stage am I making a mistake? I don’t think there was a mistake with the module or the development kit. Because it is working in another module or when pre-compiled original image is load to the module.

After you rebuild the kernel, do you also rebuild the kernel modules?

Please check if this only happens to specific module.

Yes, I am rebuilding the kernel modules as well. I do the kernel customization steps in “Tegra Linux Driver Package Development Guide/Kernel Custommization” sequentially.
It doesn’t just happening in a specific module.It happens in every module I have compiled the kernel and flashed it.

Does that issue even happem to devkit? Want to reproduce that on my device.

Yes, thsi issue is happening to devkit.
While compiling the kernel modules, I get a warning like the following. Could it be related to that?

make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install \ INSTALL_MOD_PATH=/media/ddy/new_version/Nvidia/Jetpack4.4/sdkm_downloads/Linux_for_Tegra/rootfs/
[sudo] password for ddy:
make[1]: Entering directory ‘/media/ddy/new_version/yenibuild’
arch/arm64/Makefile:49: LSE atomics not supported by binutils
INSTALL crypto/authenc.ko
INSTALL crypto/authencesn.ko
INSTALL crypto/deflate.ko

We tried to replace image/dtbs and kernel modules on our side. However, no such error appears.

What is your method to upgrade kernel image? So far I only see you install the kernel modules to rootfs.

I think there is an error while compiling the kernel modules. A similar problem occurs when I skip this step, but this time the module is opening. That’s why, now I continue without compiling the kernel modules. The warning I get while compiling the kernel modules is:

arch/arm64/Makefile:49: LSE atomics not supported by binutils

HDMI_DP2 port worked. The problem was about the hot plug detect. For other nvdisplay ports, I made changes in the &head and &sor parts of the two attached files.

tegra194-p2888-0001-p2822-0000-common.dtsi (8.3 KB)
tegra194-p2822-disp.dtsi (3.5 KB)

However, it didn’t work. Then I applied the changes in the pinmux.

I created a cfg file from tegra19x-jetson_agx_devkit-pinmux.dtsi and tegra19x-jetson_agx_devkit-gpio-default.dtsi files.

$ python pinmux-dts2cfg.py --pinmux addr_info.txt gpio_addr_info.txt por_val.txt tegra19x-jetson_agx_devkit-pinmux.dtsi tegra19x-jetson_agx_devkit-gpio-default.dtsi 1.0 > tegra19x-mb1-pinmux-p2888-0000-a04-p2822-0000-b01.cfg

I replaced this cfg file with the tegra19x-mb1-pinmux-p2888-0000-a04-p2822-0000-b01.cfg file in the $OUT/Linux_for_Tegra/bootloader/t186ref/BCT/ directory. However, as a result of these, other nvdisplay ports still did not work.
Am I doing something wrong? Or is there something missing?

There are some obvious errors.

  1. In sor2 (HDMI_DP2), the device tree has “nvidia,active-panel = <&sor2_hdmi_display>;”. But you didn’t write similar things for DP1.
    Those sor2_hdmi_display is just nickname in device tree. You could grep the name and there would be sor0 and sor1 hdmi case.

  2. SOR1(DP1) is linked to head2. But you disabled head2.

&head2 {
status = “disable”;
nvidia,dc-connector = <&sor1>;