Can't use EDID to set custom ext. display resolution

What a nightmare, please help.

I have an LG external display. If I use VGA cable with all pins, the display sends its ID to the laptop, all screen resolutions are detected. If I use another VGA cable I have that doesn't have the pins for that extra ID communication, the laptop sets some basic default resolutions/modes that don't include the native 1920x1080.

So I tried troubleshooting several ways. I downloaded edid bin file for my ext. display, put it in /boot/firmware/edid/myedid.bin and pointed /boot/loader.conf
Code:
compat.linuxkpi.drm.edid_firmware="VGA-1:edid/myedid.bin"
to no avail, it's not loading. I also tried to use the default compiled in 1920x1080 in drm by doing
Code:
compat.linuxkpi.drm.edid_firmware="VGA-1:edid/1920x1080.bin"
but this didn't work either.

Is there something I'm missing? I feel like this is something simple that will do the trick.

There's no X server, it's Wayland too, just in case that matters. kscreen-doctor -o shows "VGA-1 connected" and all, just no native mode.
 
I did realize I have module_blacklist="linuxkpi_video lindebugfs drm i915kms" in my /boot/loader.conf (I just don't need them loaded at boot). I guess I do have to load all that at boot if I want the custom edid loaded? I commented out that module_blacklist line, and all of a sudden my card wouldn't get identified at all (no /dev/dri/card0). So confused now.
 
Sounds like you are figuring it out for yourself. Yeah, if you cannot query the monitor EDID info then you can usually use a copy of it saved locally to your machine.
 
What a nightmare, please help.

I have an LG external display. If I use VGA cable with all pins, the display sends its ID to the laptop, all screen resolutions are detected. If I use another VGA cable I have that doesn't have the pins for that extra ID communication, the laptop sets some basic default resolutions/modes that don't include the native 1920x1080.

So I tried troubleshooting several ways. I downloaded edid bin file for my ext. display, put it in /boot/firmware/edid/myedid.bin and pointed /boot/loader.conf
Code:
compat.linuxkpi.drm.edid_firmware="VGA-1:edid/myedid.bin"
to no avail, it's not loading. I also tried to use the default compiled in 1920x1080 in drm by doing
Code:
compat.linuxkpi.drm.edid_firmware="VGA-1:edid/1920x1080.bin"
but this didn't work either.

Is there something I'm missing? I feel like this is something simple that will do the trick.

There's no X server, it's Wayland too, just in case that matters. kscreen-doctor -o shows "VGA-1 connected" and all, just no native mode.
What a nightmare, please help.

I have an LG external display. If I use VGA cable with all pins, the display sends its ID to the laptop, all screen resolutions are detected. If I use another VGA cable I have that doesn't have the pins for that extra ID communication, the laptop sets some basic default resolutions/modes that don't include the native 1920x1080.

So I tried troubleshooting several ways. I downloaded edid bin file for my ext. display, put it in /boot/firmware/edid/myedid.bin and pointed /boot/loader.conf
Code:
compat.linuxkpi.drm.edid_firmware="VGA-1:edid/myedid.bin"
to no avail, it's not loading. I also tried to use the default compiled in 1920x1080 in drm by doing
Code:
compat.linuxkpi.drm.edid_firmware="VGA-1:edid/1920x1080.bin"
but this didn't work either.

Is there something I'm missing? I feel like this is something simple that will do the trick.

There's no X server, it's Wayland too, just in case that matters. kscreen-doctor -o shows "VGA-1 connected" and all, just no native mode.
When executing the command sysctl -A|grep compat.linuxkpi.drm, the only kernel variables displayed are:
  • compat.linuxkpi.drm_dp_aux_i2c_transfer_size: 16
  • compat.linuxkpi.drm_dp_aux_i2c_speed_khz: 10
  • compat.linuxkpi.drm_drm_fbdev_overalloc: 100
  • compat.linuxkpi.drm_fbdev_emulation: 1
  • compat.linuxkpi.drm_timestamp_precision_usec: 20
  • compat.linuxkpi.drm_vblankoffdelay: 5000
  • compat.linuxkpi.drm_poll: 1
  • compat.linuxkpi.drm_debug: 0
  • compat.linuxkpi.drm_edid_fixup: 6
Since neither compat.linuxkpi.drm.edid_firmware nor the more logical compat.linuxkpi.drm_edid_firmware are present, it appears that FreeBSD does not yet support this variable and therefore does not allow adding a custom EDID.
 
Since neither compat.linuxkpi.drm.edid_firmware nor the more logical compat.linuxkpi.drm_edid_firmware are present, it appears that FreeBSD does not yet support this variable and therefore does not allow adding a custom EDID.
Caramba! Thank you. What do I do then? Is it possible to set custom resolution on a display that FreeBSD can't identify without using a framebuffer? Can someone from the developers please confirm this? @cracauer SirDice ? This would be really pretty awful. I did set a custom resolution on another computer using a framebuffer, but that means can't use the graphics card?
 
I commented out that module_blacklist line, and all of a sudden my card wouldn't get identified at all (no /dev/dri/card0). So confused now.
Don't you have needed GPU driver kmods as kld_list in your /etc/rc.conf? It's the preferred way to load huge GPU driver kmods that doesn't fit well in /boot/loader.conf, thus, blocked in /boot/defaults/loader.conf.

For example, I have below near the end of my /etc/rc.conf to add GPU materials (for me, NVIDIA ones) to already set kld_list variable.
Code:
kld_list="${kld_list} nvidia-modeset.ko nvidia-drm.ko linux.ko linux64.ko"
 
But they were being pulled during the bootloader stage, so I made sure I only load what I really need at the bootloader stage.
Boot loader stage doesn't have auto-loading mechanism for kmods that automatically recognizes existing devices and determine which module is missing in kernel and/or required modules are not loaded.

So if you want boot loader stage to load any kmods, you need to specify it (them) in your /boot/loader.conf.

Note that any "depended-upon" kmods by specified kmod are automatically loaded using the embedded dependency data in the specified kmod(s), thus, if you haven't specified any *_load line in your /boot/loader.conf, boot loaders would NOT load anything other than kernel and everything others needed should be loaded via init / rc mechanism after boot loader hands over to kernel.
 
If I were you, I'll purchase another "sane" VGA cable. 😁

Putting it aside, on X11 (xorg and maybe xlibre, too), there are several way to override EDID and specify wanted resolution as seen in Chapter 5.5.3 of the Handbook.

But for silly Wayland, there seems nothing to configure independently with used compositor. It seems that these kind of configs are strongly tied to the compositor used, and maybe different per compositor (at worst, by specific commit of the compositor!).

This is clearly too huge a shame of Wayland, if I'm not overlooking something "generic, applicable to FreeBSD implementations".
 
Wayland is good, don't be hating. But this would be a nice thing to have because "sane" VGA cables provide that capability that some people may not want (some people supposedly even clip those two pins that participate in comms that have nothing to do with just outputting video....as in I don't want my external display to be able to send anything to my computer, thank you very much).
 
Back
Top