How to use custom EDID with X Server?

Hi all,

I've just installed FreeBSD (+ X Window System & GNOME) on a HP Prodesk 400 G1. It's an old minipc connected to an external monitor (with 1920x1080 resolution) via a VGA-HDMI converter. The converter works only in one direction, from the pc to the monitor, so the X Server cannot read the EDID of the monitor and the screen is blocked to low resolution (1024x768).

On Linux I was able to use a custom EDID file by hard-coding its path into the boot parameters (e.g. "linux /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw [...] drm.edid_firmware=VGA-1:edid/1920x1080.bin").

I went through FreeBSD handbook and forums, Xorg documentation and other stuff on the web but I couldn't find a similar (or alternative) way to fix the problem. Do you know how can I tell Xorg to use such file?

I've already tried the option "CustomEDID" (suggested on various forums, but it seems not mentioned in Xorg docs) in the Device Section, but it didn't worked:
Code:
Section "Device"
        Identifier "Card0"
        Driver "scfb"

        Option "CustomEDID" "/etc/X11/edid.bin"
EndSection


I also tried to explicitly set the desired resolution:

Code:
cvt 1920 1080 60
xrandr --newmode "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
xrandr --addmode default "1920x1080_60.00"
xrandr --output default --mode "1920x1080_60.00"
This second attempt failed too.

Please, find below some command outputs useful to debug:

Code:
$ pciconf -vl | grep -B4 display
    subclass   = HOST-PCI
vgapci0@pci0:0:2:0:    class=0x030000 rev=0x06 hdr=0x00 vendor=0x8086 device=0x0412 subvendor=0x103c subdevice=0x8076
    vendor     = 'Intel Corporation'
    device     = 'Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller'
    class      = display

$ xrandr
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 1024 x 768, current 1024 x 768, maximum 1920 x 1080
default connected primary 1024x768+0+0 0mm x 0mm
   1024x768       0.00*
   1920x1080_60.00  59.96
 
You can tweak HorizSync and VertRefresh in the Monitor section.
Insert values depending to the resolution you want.
For example, for 1440x900 use HS 28-55 and VR 50-60.
For FHD you need higher values, iirc 63kHz and maybe somewhat more VR too.
You'll want to take the lowest working values, because this kind of tweaking can cause Xserver to segfault if values are too high. I suppose there is some other stuff that needs initialization too, to avoid this behavior.
BTW this works too for the Freedesktop drivers, which otherwise stay at very low resolutions.
 
Thanks skunk but manually inserting the values is a long procedure and I'm not sure it's the right thing to do since I already have a correct EDID file to help Xorg setting the right params.

Actually, I understood I was using the wrong driver, 'scfb' instead of 'intel'.
I missed 'xf86-video-intel' for the intel module to work correctly (although it's no more required on newer hardware).

I added the option "CustomEDID" "VGA-1:/etc/X11/edid.bin" to the /usr/local/etc/X11/xorg.conf.d/20-intel.conf file as said in intel(4), but it didn't work.
 
Back
Top