Change the device tree for DisplayPort on DP1?

Hi,

I designed a custom carrier for an Nvidia Jetson Nano module.

→ The custom carrier has a DisplayPort on DP1 Pins but no HDMI, the DP0 is not assigned!

→ The Nvidea JETSON NANO KIT has a HDMI at DP1 pins and at DP0 pins the DisplayPort.

The DisplayPort is connected on DP1 Pins, as describe here:

[Scource: NVIDIA Jetson Nano Product Design Guide 7.3.2 DP on DP1 Pins Figure 7-21 shows the DisplayPort connection.]

Now my question:

How can I change the device tree for DisplayPort and DP1_HPD Pins on DP1?
So that the DisplayPort on DP1 Pins works?

which .dtsi files do i need to change?

I think I need to the tegra210-porg-p3448-common.dtsi File change here:

  • What files do I need to change ?
  • How must change the file ?
  • What about the DP1_HPD connection ?
  • And do I need to turn off HDMI (e.g. i2c) ?

Thank you very much!!!

Greetings Jo

Hello,

Please let me introduce some concepts here and then answer your question.

  1. The sor and sor1 in the device tree represent the dp0 and dp1 pin respectively.
  2. The tegradc means tegra display controller. It is software controller to control each sor.

According to the DT you pasted, you can see that tegradc.0 (54200000) is coupled with sor1 and tegradc.1 is coupled with sor(sor0)

Each sor has its own functionality inside it. So you can see dp-display and hdmi-display there. The default DT matches the NV devkit behavior.

  • What files do I need to change ?

There is no precise answer for your question, because you can change anything within any layers of devicetree.
You can firstly check dts name from command “dmesg |grep dts” on your device. If you are using default jetapck, it will give you something like tegra210-p3448-0002-p3449-0000-b00.dts.

Then, open the file and check the content. You shall see that includes the file tegra210-porg-p3448-common.dtsi. You can either modify tegra210-p3448-0002-p3449-0000-b00.dts or tegra210-porg-p3448-common.dtsi. Only the last one touched those nodes will take effect.

For example, tegra210-p3448-0002-p3449-0000-b00.dts is the final dts file that will be flashed into board, thus if you disable tegradc at tegra210-p3448-0002-p3449-0000-b00.dts, then even though you enable tegradc in tegra210-porg-p3448-common.dtsi, it will get disabled.

How must change the file ?

If you want to enable SOR1 as DP port, then modify sor1 to same configuration as sor. Disable the hdmi-display under sor1 and enable dp-display. Change the “nvidia,xbar-ctrl” to match the hardware design.

  • What about the DP1_HPD connection ?

I think the default setting shall work.

And do I need to turn off HDMI (e.g. i2c) ?

Disable corresponding tegradc and sor.

Thank you very much for the answers.
Now some things have become clearer to me.

I have now adjusted the file: tegra210-porg-p3448-common.dtsi as follows:

But I need some help with xbra-ctrl:

  • How do I set xbra-ctrl to my hardware?
  • Where can I find information about nvidia, xbra-ctrl?

Then I still have one question:

I use for the sd-blob.img L4T (Sample Root Filesystem, L4T Driver Package (BSP) Sources etc.)
with the information from:

Jetson Nano Platform Adaptation and Bring-Up Flashing and Booting the Target Device

Flashing and Booting the Target Device

Because the displayport on DP1 is not working yet I have connected the custom carrier board to UART2 to Debugging.

The kernel starts and the login appears:

Ubuntu 18.04.5 LTS localhost.localdomain ttyS0
localhost login:

  • Which login applies to the Sample Root Filesystem ? nothing works: root, root or ubuntu, ubuntu?
  • Do i have to set a user and password in the sources resp. passwd?

Thanks a lot!

Hello,

nvidia,xbar-ctrl is the data lane mapping of your connector. If you follow the design guide of our document, you should use <0 1 2 3 4> for DP.
Hdmi case and dp case are different because the lane2 and lane0 are different for HDMI & DP.

  • Which login applies to the Sample Root Filesystem ? nothing works: root, root or ubuntu, ubuntu?
  • Do i have to set a user and password in the sources resp. passwd?

There is no default password from us. You have to use the OEM-config to confiigure the user account through your flash port.

→ Headless Mode Flow in oem-config
https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.html#wwpID0E0DC0HA

Hello,

i have run the system with the modified file: tegra210-porg-p3448-common.dtsi (see above)

Then I get the following messages:

I then switched off the i2c interface 7000c700.i2c as a test.

Then I get the following messages:

output_2021-04-06_11-25-30.log (29.6 KB)

If I then plug in the DisplayPort connector,
comes the following nvidea picture:

@ OEM-config:
I will have a look at the oem-config
Thank you!

It looks like tegradc.0 is now as hdmi-display. This does not match the DT you pasted.

[ 1.111073] tegradc tegradc.0: hdmi: tmds rate:25174K prod-setting:prod_c_hdmi_0m_54m
[ 1.111570] tegradc tegradc.0: hdmi: get RGB quant from REG programmed by BL.
[ 1.111583] tegradc tegradc.0: hdmi: BL set VIC 0
[ 1.111587] tegradc tegradc.0: hdmi: get YCC quant from REG programmed by BL.

@ This does not match the DT you pasted.

This is of course true

But what am I doing wrong?

I have done the following:

  1. Changed the file tegra210-porg-p3448-common.dtsi (see above)

  2. Rebuild the device tree image:
    cd <src_path>/kernel/kernel-4.9/
    make ARCH=arm64 tegra_defconfig
    make ARCH=arm64 dtbs

  3. And after that I copy the updated device tree image to the L4T release tree:
    arch/arm64/boot/dts/tegra210-p3448--p3449-0000-*.dtb → path-to-L4T-release/kernel/dtb/

  4. then I create the image
    sudo ./jetson-disk-image-creator.sh -o sd-blob.img -b jetson-nano -r 300

  5. And then I flash and boot the target device.

With me also does not start the oem-config mode:

→ When the target device boots for the first time after flashing and finds no display device, it runs oem-config in headless mode. Use the following procedure to reconfigure the target device.

Source: https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.html#wwpID0E0DC0HA

Do I need to activate this ?

→ Reconfiguring a Jetson Device with oem-config?

Source: https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.html#wwpID0E0TJ0HA

Thank you very much :-)

  1. Could you tell me the full name of your device tree?

  2. If you already has Linux_for_Tegra, please directly use flash.sh to do the work. I don’t really check where does jetson-disk-image-creator.sh get their dtb file.

  3. For oem-config, connect the jetson micro usb port to your ubuntu host, use minicom with baud rate 115200 to open /dev/ttyACM0 node on your host in the first boot time of jetson nano.

@ Could you tell me the full name of your device tree?

→ /jetson-nano/Sources/Linux_for_Tegra/source/public/kernel/kernel-4.9/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-b00.dtb

@ If you already has Linux_for_Tegra, please directly use flash.sh to do the work. I don’t really check where does jetson-disk-image-creator.sh get their dtb file.

okay that is an idea. i have the tegra210-p3448-0000-p3449-0000-b00.dtb file copied into the Linux_for_Tegra kernel .dtb

→ /jetson-nano/kernel/Jetson-210_Linux_R32.5.1_aarch64/Linux_for_Tegra/kernel/dtb/tegra210-p3448-0000-p3449-0000-b00.dtb

@ For oem-config, connect the jetson micro usb port to your ubuntu host, use minicom with baud rate 115200 to open /dev/ttyACM0 node on your host in the first boot time of jetson nano

Okay, not via UART2

For the prototype I currently use this assembly:

Isn’t that B01?

Sorry for my comment. It is just a mistake. Please ignore them and working on the oem-config first.

We can check the dtb on device after it is booting up.

I will do that. I am very grateful for your help!!!

Okay, I do not get oem-config displayed.
It must have something to do with my Linux_for_Tegra???

But the Jetson Micro-USB port works:

30234.707622] usb 3-6: new high-speed USB device number 5 using xhci_hcd
[30234.856278] usb 3-6: New USB device found, idVendor=0955, idProduct=7f21, bcdDevice= 1.02
[30234.856283] usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[30234.856287] usb 3-6: Product: APX

May I review the command you are using here?

Also, does your host linux have cdc_acm driver in lsmod?

with sudo dmesg -c

30234.707622] usb 3-6: new high-speed USB device number 5 using xhci_hcd
[30234.856278] usb 3-6: New USB device found, idVendor=0955, idProduct=7f21, bcdDevice= 1.02
[30234.856283] usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[30234.856287] usb 3-6: Product: APX
Manufacturer: NVIDIA Corp.

I mean what is your command to open ttyACM0…?

@ I mean what is your command to open ttyACM0…?

with: sudo minicon -s

→ No serial interface ttyACM0 is set up:

see /dev directory:

Ok,

  1. Since your kernel has some panic log, I am not sure if this affects the oem-config or not, maybe you can convert the dtb file back to dts file first and attach it here.

You can use dtc command to do the convert.

dtc -I dts -O dtb _your_input_dtb > output.txt

  1. You can also check if your linux host has cdc_acm driver with command “lsmod”.

BTW, I just reviewed your comment and notice there is another point I forgot to mention.

In below comments, you said,

Which login applies to the Sample Root Filesystem ? nothing works: root, root or ubuntu, ubuntu?
Do i have to set a user and password in the sources resp. passwd?

Such comments sound like the oem-config was already be done before. Did you remember configure any user account or pwd before?
Generally, if you are using pure package from jetpack/sdkmanager, during the first boot up on jetson, there would require user to configure their own account and pwd. This account and pwd will be used in both UART and GUI login.

There are two methods to finish such configuration:

  1. Monitor attached method, which will use the ubuntu GUI on monitor.

  2. OEM-CONFIG from ttyACM0 (headless)

If your board already went through that configuration, then ttyACM0 or GUI configuration won’t show up again. That is why it doesn’t show up now. Thus, you need to reflash the board again and see if it would appear.