Issues when activating DP1 on Xavier NX

I have a custom carrier board for Orin and Xavier, that uses DP1 as a common Displayport. The port is working ok on Orin NX/nano, however I ran into issues when using it on Xavier NX.

As mentioned here, I need to modify both pinmux and the device tree to enable it, as by default it is configured as HDMI. So according to the post I did the following steps:

  1. From Jetson linux 35.5.0 download page I downloaded: Driver packge (BSP), Sample root filesystem and Driver package (BSP) sources, as well as Bootlin Toolchain gcc 9.3 .
  2. I set up the toolchain and the enviromental variables according to Developer guide.
  3. Using the Pinmux spreadsheet I generated three .dtsi files (I used the default configuration with no changes as all pins seemed to be as they should). I’m not sure whether this step is actually necessary.
  4. I extracted the Driver package into a folder, the extracted the root filesystem into Linux_for_Tegra/rootfs and kernel_src.tbz2 into Linux_for_Tegra/source
  5. In Linux_for_Tegra/source/hardware/nvidia/platform/t19x/jakku/kernel-dts/common I modified the tegra194-p3509-disp.dtsi file to look like:
#include <dt-bindings/display/tegra-dc.h>
#include <dt-bindings/display/tegra-panel.h>
#include <t19x-common-platforms/tegra194-hdmi.dtsi>
#include <t19x-common-platforms/tegra194-dp.dtsi>
#include "tegra194-fixed-regulator-p3509-0000-a00.dtsi"
#include "tegra194-spmic-p3668.dtsi"

&head0 {
	status = "disabled";
	nvidia,fb-bpp = <32>;
	nvidia,fbmem-size = <265420800>; /* 8K (7680*4320) 32bpp double buffered */
	nvidia,fb-flags = <TEGRA_FB_FLIP_ON_PROBE>;
	win-mask = <0x7>;
	nvidia,fb-win = <0>;
	nvidia,dc-connector = <&sor1>;
	nvidia,dc-flags = <TEGRA_DC_FLAG_ENABLED>;
	avdd_hdmi-supply = <&p3668_spmic_sd0>; /* 1v0 */
	avdd_hdmi_pll-supply = <&p3668_spmic_sd1>; /* 1v8 */
	vdd_hdmi_5v0-supply = <&p3509_vdd_hdmi_5v0>; /* 5v0 */
};

&head1 {
	status = "okay";
	nvidia,fb-bpp = <32>;
	nvidia,fbmem-size = <265420800>; /* 8K (7680*4320) 32bpp double buffered */
	nvidia,fb-flags = <TEGRA_FB_FLIP_ON_PROBE>;
	win-mask = <0x38>;
	nvidia,fb-win = <3>;
	nvidia,dc-connector = <&sor0>;
	nvidia,dc-flags = <TEGRA_DC_FLAG_ENABLED>;
	vdd-dp-pwr-supply = <&p3668_spmic_sd0>;
	avdd-dp-pll-supply = <&p3668_spmic_sd1>;
	vdd-edp-sec-mode-supply = <&battery_reg>;
	vdd-dp-pad-supply = <&battery_reg>;
	vdd_hdmi_5v0-supply = <&p3509_vdd_hdmi_5v0>;
};

&sor0 {
	status = "okay";
	nvidia,active-panel = <&sor0_dp_display>;
	nvidia,sor-hdcp-not-supported;
};

&sor0_dp_display {
	status = "okay";
	nvidia,is_ext_dp_panel = <1>;
};

&sor1 {
	status = "okay";
	nvidia,active-panel = <&sor0_dp_display>;
	nvidia,sor-hdcp-not-supported;
};

&sor1_dp_display {
	status = "okay";
	nvidia,is_ext_dp_panel = <1>;
};

&dpaux0 {
	status = "okay";
};

&dpaux1 {
	status = "okay";
};

&tegra_cec {
	status = "okay";
};
  1. I then launched nvbuild.sh, as mentioned in the Developer guide.
  2. Using SDK manager I prepared a default Jetpack 5.1.3 image for Xavier NX (I let the SDK manager install the image and get it ready for flashing and the skipped flashing)
  3. I copied the newly created .dtb files from Linux_for_Tegra/source/kernel_out/arch/arm64/boot/dts/nvidia to JetPack_5.1.3_Linux_JETSON_XAVIER_NX_TARGETS/Linux_for_Tegra/kernel/dtb of the image from SDK manager
  4. As mentioned here, I generated .cfg files from the pinmux .dts files and copied them into JetPack_5.1.3_Linux_JETSON_XAVIER_NX_TARGETS/Linux_for_Tegra/bootloader/t186ref/BCT
  5. I flashed Xavier using SDK manager with the now modified image.

Now when I did this, nothing happened, as if the new device tree did not get applied - HDMI (on another carrier board) was working as normal, and DP was showing blank screen.

I then attempted the following:

  1. I copied the created .dtb files to JetPack_5.1.3_Linux_JETSON_XAVIER_NX_TARGETS/Linux_for_Tegra/rootfs/boot
  2. Added entry to JetPack_5.1.3_Linux_JETSON_XAVIER_NX_TARGETS/Linux_for_Tegra/rootfs/boot/extlinux/extlinux.conf
      FDT /boot/dtb/kernel_tegra194-p3668-0001-p3509-0000.dtb
  1. Reflashed the Xavier NX again using SDK manager

This gave me blank screens on both HDMI board and my DP board.

Could you please tell me what I did wrong and what steps should I do to get the DP working?

Thank you.

DP1 means SOR1.

This setting here is totally wrong… What does that mean your sor1’s active panel is sor0 dp…

&sor1 {
status = “okay”;
nvidia,active-panel = <&sor0_dp_display>;
nvidia,sor-hdcp-not-supported;
};

That means i wasn’t careful enough when doing ctrl+c ctrl+v :).

The file now looks like this:

#include <dt-bindings/display/tegra-dc.h>
#include <dt-bindings/display/tegra-panel.h>
#include <t19x-common-platforms/tegra194-hdmi.dtsi>
#include <t19x-common-platforms/tegra194-dp.dtsi>
#include "tegra194-fixed-regulator-p3509-0000-a00.dtsi"
#include "tegra194-spmic-p3668.dtsi"

&head0 {
	status = "disabled";
	nvidia,fb-bpp = <32>;
	nvidia,fbmem-size = <265420800>; /* 8K (7680*4320) 32bpp double buffered */
	nvidia,fb-flags = <TEGRA_FB_FLIP_ON_PROBE>;
	win-mask = <0x7>;
	nvidia,fb-win = <0>;
	nvidia,dc-connector = <&sor1>;
	nvidia,dc-flags = <TEGRA_DC_FLAG_ENABLED>;
	avdd_hdmi-supply = <&p3668_spmic_sd0>; /* 1v0 */
	avdd_hdmi_pll-supply = <&p3668_spmic_sd1>; /* 1v8 */
	vdd_hdmi_5v0-supply = <&p3509_vdd_hdmi_5v0>; /* 5v0 */
};

&head1 {
	status = "okay";
	nvidia,fb-bpp = <32>;
	nvidia,fbmem-size = <265420800>; /* 8K (7680*4320) 32bpp double buffered */
	nvidia,fb-flags = <TEGRA_FB_FLIP_ON_PROBE>;
	win-mask = <0x38>;
	nvidia,fb-win = <3>;
	nvidia,dc-connector = <&sor0>;
	nvidia,dc-flags = <TEGRA_DC_FLAG_ENABLED>;
	vdd-dp-pwr-supply = <&p3668_spmic_sd0>;
	avdd-dp-pll-supply = <&p3668_spmic_sd1>;
	vdd-edp-sec-mode-supply = <&battery_reg>;
	vdd-dp-pad-supply = <&battery_reg>;
	vdd_hdmi_5v0-supply = <&p3509_vdd_hdmi_5v0>;
};

&sor0 {
	status = "okay";
	nvidia,active-panel = <&sor0_dp_display>;
	nvidia,sor-hdcp-not-supported;
};

&sor0_dp_display {
	status = "okay";
	nvidia,is_ext_dp_panel = <1>;
};

&sor1 {
	status = "okay";
	nvidia,active-panel = <&sor1_dp_display>;
	nvidia,sor-hdcp-not-supported;
};

&sor1_dp_display {
	status = "okay";
	nvidia,is_ext_dp_panel = <1>;
};

&dpaux0 {
	status = "okay";
};

&dpaux1 {
	status = "okay";
};

&tegra_cec {
	status = "okay";
};

I’ve recompiled the kernel, copied files again (as described in the steps above, with copying to rootfs/boot) and reflashed the Jetson, but the screen is still blank. Are the steps I described correct?

Please just be aware that if you want someone to check what happened to your system, the full data to share are the schematic, dmesg and dts file converted back from final dtb…

One more point here… you didn’t enable head at all… how could it run if you don’t enable it…

The original post here had head0 as disabled. Is that an issue given that head1 is enabled?

head0 connected to your sor1.
head1 connected to your sor0.

If you don’t know what I am telling, read your own device tree…

I don’t really care about your DP0/sor0 situation as this seems not the point we should care about there…

I only saw you didn’t enable head0 which is for sor1. That’s all.

I changed which head connected to which sor and it fixed the issue. So thank you for pointing these things out.

I’l post the final .dtsi file next week for anyone else that runs into this and close the topic.

This is the final version of tegra194-p3509-disp.dtsi that solved the issue:

#include <dt-bindings/display/tegra-dc.h>
#include <dt-bindings/display/tegra-panel.h>
#include <t19x-common-platforms/tegra194-hdmi.dtsi>
#include <t19x-common-platforms/tegra194-dp.dtsi>
#include "tegra194-fixed-regulator-p3509-0000-a00.dtsi"
#include "tegra194-spmic-p3668.dtsi"

&head0 {
	status = "disabled";
	nvidia,fb-bpp = <32>;
	nvidia,fbmem-size = <265420800>; /* 8K (7680*4320) 32bpp double buffered */
	nvidia,fb-flags = <TEGRA_FB_FLIP_ON_PROBE>;
	win-mask = <0x7>;
	nvidia,fb-win = <0>;
	nvidia,dc-connector = <&sor0>;
	nvidia,dc-flags = <TEGRA_DC_FLAG_ENABLED>;
	avdd_hdmi-supply = <&p3668_spmic_sd0>; /* 1v0 */
	avdd_hdmi_pll-supply = <&p3668_spmic_sd1>; /* 1v8 */
	vdd_hdmi_5v0-supply = <&p3509_vdd_hdmi_5v0>; /* 5v0 */
};

&head1 {
	status = "okay";
	nvidia,fb-bpp = <32>;
	nvidia,fbmem-size = <265420800>; /* 8K (7680*4320) 32bpp double buffered */
	nvidia,fb-flags = <TEGRA_FB_FLIP_ON_PROBE>;
	win-mask = <0x38>;
	nvidia,fb-win = <3>;
	nvidia,dc-connector = <&sor1>;
	nvidia,dc-flags = <TEGRA_DC_FLAG_ENABLED>;
	vdd-dp-pwr-supply = <&p3668_spmic_sd0>;
	avdd-dp-pll-supply = <&p3668_spmic_sd1>;
	vdd-edp-sec-mode-supply = <&battery_reg>;
	vdd-dp-pad-supply = <&battery_reg>;
	vdd_hdmi_5v0-supply = <&p3509_vdd_hdmi_5v0>;
};

&sor0 {
	status = "okay";
	nvidia,active-panel = <&sor0_dp_display>;
	nvidia,sor-hdcp-not-supported;
};

&sor0_dp_display {
	status = "okay";
	nvidia,is_ext_dp_panel = <1>;
};

&sor1 {
	status = "okay";
	nvidia,active-panel = <&sor1_dp_display>;
	nvidia,sor-hdcp-not-supported;
};

&sor1_dp_display {
	status = "okay";
	nvidia,is_ext_dp_panel = <1>;
};

&dpaux0 {
	status = "okay";
};

&dpaux1 {
	status = "okay";
};

&tegra_cec {
	status = "okay";
};

The extlinux entry and copying device tree to rootfs were not needed. Pinmux .cfg file were needed.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.