I have a question regarding the default DP timing during Linux boot on the Thor platform.
Here is the issue I am experiencing: The EDID of my DP sink device contains a 120 Hz resolution, A, while the DisplayID contains a 60 Hz resolution, B. During boot, I can see from the DP sink device that Thor’s default DP output resolution is A. However, I would like Thor to output resolution B by default.
I tried modifying the APPEND line in /boot/extlinux/extlinux.conf by adding the following parameter:
video=DP-1:(B_hactive)x(B_vactive)@60
After rebooting the device, I checked the kernel command line with:
cat /proc/cmdline
The command line contains the B timing parameter I added. However, when I read the DP output from Thor on the sink device, it still shows resolution A.
Could you please advise how to resolve this issue and configure Thor to use resolution B as the default DP output timing during Linux boot?
Currently, there is no desktop environment or X Server running in my development environment. Therefore, running xrandr results in the error “Can’t open display.”
My current objective is to configure the DP output to use Timing B directly after startup. After that, I will use a user-space application to call the DRM APIs to display the image. Since my DRM display operates at 60 Hz, I would like to avoid switching from 120 Hz to 60 Hz. I would therefore like to change the default startup mode to 60 Hz.
On your reference platform, I have confirmed that running:
modetest -c
shows both the 60 Hz and 120 Hz timings, and that the display works normally after switching between them.
Could you please advise me on the next steps? Thank you.
Will there be any display manager running on your side in the end?
If there won’t be xorg or anything else, then I think running DRM to control the mode manually every time after boot is needed. Xorg also did the same method here but it runs in the background so you might not notice.
I may have found a reboot persistent way to make Thor output resolution B by default; with no display manager and no mode switch from userspace after boot. Following just worked on my Thor.
# Capture the real EDID while no override is active (on your Thor, that means after the next reboot):
cp /sys/class/drm/card3-DP-1/edid ~/edid_test/orig.bin
# Generate the modified EDIDs from it:
python3 mkedid.py orig.bin .
# Install only the result you want, for example t3_fixed.bin, under a descriptive name:
sudo install -m 644 t3_fixed.bin /etc/nvidia/nvkms-edid/sink_B_first.bin
# Create these two files:
/etc/modprobe.d/nvkms-edid.conf
options nvidia-modeset config_file=/etc/nvidia/nvkms-edid/nvkms.conf
/etc/nvidia/nvkms-edid/nvkms.conf
override.rm-soc-disp.DP-0=/etc/nvidia/nvkms-edid/sink_B_first.bin
Reboot to apply it.
# After reboot you could test with:
sudo ./verify_boot.sh
# Then review verify_boot.log
My Timing A is placed in the first DTD of the EDID, while Timing B is placed in the DisplayID block. Timing A is a 120 Hz timing, whereas Timing B is a 60 Hz timing. However, the two timings have the same pixel clock, as well as the same Hactive and Vactive values. As a result, the VFP of the 60 Hz timing exceeds 63, which cannot be represented in the EDID format. For this reason, I placed Timing B in the DisplayID block instead.
So, based on the current situation, it seems that I can only switch between the modes through DRM, right?
I removed Timing A from the EDID and kept only Timing B in the DisplayID. After testing, Thor booted successfully and displayed Timing B correctly. For now, keeping only Timing B is sufficient for my needs. Thank you very much for your support!