Incorrect screen resolution detected on opensuse 13.1

I have a Toshiba Satellite C660-10T that isn’t displaying the image on screen correctly. It should have a resolution of 1366x768@58hz but Xorg has detected the max resolution as 1280x800 so the bottom of the image is off the screen and I have about 2cm of blank space on the right of the screen. I know the problem is caused but the EDID being detected incorrectly and this is compounded by the resolution not being divisible by 8. It also seems from looking at the xorg logs that the intel driver is setting the physical screen size too small.

When I try and set the correct resolution with xrandr I get a screen size is too small error. So to fix it I need to create a custom screen and monitor configs in xorg but so far I’ve had no luck in achieving this.

Would anyone be willing to help me out?

Xorg log
SUSE Paste

Monitor config (commented out because it didn’t work)
SUSE Paste

Screen config
SUSE Paste

Hmm seems i can;t edit the OP.

I did a bit more digging and i found the following in dmesg.


    0.560304] vesafb: mode is 1280x800x32, linelength=5120, pages=0
    0.560305] vesafb: scrolling: redraw
    0.560308] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0
    0.560997] vesafb: framebuffer at 0xd0000000, mapped to 0xffffc90010400000, using 4032k, total 4032k
    0.592344] Console: switching to colour frame buffer device 160x50
    0.623850] fb0: VESA VGA frame buffer device
    0.623863] intel_idle: does not run on family 6 model 23
    0.623912] GHES: HEST is not enabled!
    0.623973] Serial: 8250/16550 driver, 32 ports, IRQ sharing disabled
    0.625936] Non-volatile memory driver v1.3
    0.625940] Linux agpgart interface v0.103
    0.626046] agpgart-intel 0000:00:00.0: Intel GM45 Chipset
    0.626150] agpgart-intel 0000:00:00.0: detected gtt size: 2097152K total, 262144K mappable
    0.626776] agpgart-intel 0000:00:00.0: detected 131072K stolen memory
    0.626909] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000


    2.041756] Monitor-Mwait will be used to enter C-1 state
    2.042901] [drm] Initialized drm 1.1.0 20060810
    2.045586] Monitor-Mwait will be used to enter C-2 state
    2.045598] tsc: Marking TSC unstable due to TSC halts in idle
    2.045658] ACPI: acpi_idle registered with cpuidle
    2.055099] [drm] Memory usable by graphics device = 2048M
    2.055106] checking generic (d0000000 3f0000) vs hw (d0000000 10000000)
    2.055108] fb: conflicting fb hw usage inteldrmfb vs VESA VGA - removing generic driver
    2.055132] Console: switching to colour dummy device 80x25
    2.055558] i915 0000:00:02.0: setting latency timer to 64
    2.110482] i915 0000:00:02.0: irq 44 for MSI/MSI-X
    2.110497] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
    2.110499] [drm] Driver supports precise vblank timestamp query.
    2.110571] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem
[2.145041] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 130    2.145049] Raw EDID:
    2.145052]          00 ff ff ff ff ff ff 00 ff ff ff ff ff ff ff ff
    2.145055]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.145058]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.145060]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.145063]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.145066]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.145069]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.145071]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.176039] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 130
    2.176044] Raw EDID:
    2.176046]          00 ff ff ff ff ff ff 00 ff ff ff ff ff ff ff ff
    2.176049]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.176051]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.176054]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.176057]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.176059]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.176062]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.176065]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.207037] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 130
    2.207043] Raw EDID:
    2.207046]          00 ff ff ff ff ff ff 00 ff ff ff ff ff ff ff ff
    2.207050]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.207053]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.207057]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.207060]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.207063]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.207066]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.207069]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.238037] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 130
    2.238043] Raw EDID:
    2.238045]          00 ff ff ff ff ff ff 00 ff ff ff ff ff ff ff ff
    2.238048]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.238052]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.238055]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.238058]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.238061]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.238064]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.238067]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    2.238074] i915 0000:00:02.0: LVDS-1: EDID block 0 invalid.
    2.384890] fbcon: inteldrmfb (fb0) is primary device
    3.070088] Console: switching to colour frame buffer device 160x50
    3.073139] i915 0000:00:02.0: fb0: inteldrmfb frame buffer device
    3.073142] i915 0000:00:02.0: registered panic notifier
    3.078530] acpi device:0b: registered as cooling_device2
    3.078612] ACPI: Video Device [GFX0] (multi-head: yes  rom: no  post: no)
    3.078673] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:01/input/input5
    3.078795] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0




I would consider renaming the xorg config file /etc/X11/xorg.conf to /etc/X11/xorg.conf.old and then reboot. The problem you descript can occur on an upgrade and you don’t really need the file at all.

Thank You,

It’s not an upgrade. I did a fresh install and as of right now I don’t have an active xorg.conf, 50-device.conf, 50-monitor.conf or 50-device.conf. I do know this is a common problem with this type of panel and I also know from the google searches I’ve been doing that it is fixable you just need to get the right config. A lot of people that have had this problem seem to just disable the edid detection and then set a custom config for the monitor and screen. I’ve not done that before and i’m not used to this new split way config of configuring X11.

The X-server config files are located in /etc/X11/xorg.conf.d/ directory.

It should have a resolution of 1366x768@58hz but Xorg has detected the max resolution as 1280x800

Your best strategy might be to test a display mode using xrandr first. I note that 1366x768 is an unusual display mode (and I recall threads where drivers could not deal with it because 1366 wasn’t divisible by 8). I wonder if 1368x768 might work for you. The cvt utility can be used to generate modelines eg

cvt 1366 768
# 1368x768 59.88 Hz (CVT) hsync: 47.79 kHz; pclk: 85.25 MHz

and these can be added and tested via xrandr like this

xrandr --newmode “1368x768_60.00″ 85.25 1368 1440 1576 1784 768 771 781 798 -hsync +vsync
xrandr --addmode LVDS1 1368x768_60.00
xrandr --output LVDS1 --mode 1368x768_60.00

Once you have a working display mode, it can be made persistent using the Xorg config files like you mentioned previously. Hope this helps.

I tried the commands and this is the output I got from “xrandr --fb”

xrandr --fb 1368x768
xrandr: specified screen 1368x768 not large enough for output LVDS1 (1280x800+0+0)

but I tired to add the mode anyway and when I tried to add it to the device with “xrandr --addmode” I got


xrandr --addmode LVDS1 1368x768_60.00
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  18 (RRAddOutputMode)
  Serial number of failed request:  34
  Current serial number in output stream:  35

This is where I got stuck before I started messing with the xorg config files and why I posted on the forums. So what’s the next step?

It is very difficult to read between the lines wrt what you tried PRIOR to trying the xrandr command.

Did you first try


cvt 1366 768 58

to generate a mode line ? deano_ferrari knows this subject matter far better than I, so possibly he does not need as much information as I to figure how you were following the recommended advice/approach. I confess maybe I read the thread too fast, but I could not see where it was recommended to try “xrandr --fb 1368x768” to the exclusion of other commands.

I didn’t mention that command

but I tired to add the mode anyway and when I tried to add it to the device with “xrandr --addmode” I got

xrandr --addmode LVDS1 1368x768_60.00
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 18 (RRAddOutputMode)
Serial number of failed request: 34
Current serial number in output stream: 35

That means the driver probably can’t handle that mode. You may need to investigate others. Maybe use google to find other threads with same/similar hardware.

Another suggestion is to try using a Live distro that may use a different kernel/graphics driver version. If you can get something that works with correctly configuring your display, you can record the working mode reported in Xorg.0.log or via

xrandr --verbose

You suggested I should test a display mode. That command tests a display mode and I posted the result of running it.

I did some searching and I have found a couple of threads on different forums that describe this problem and offer a few possible resolutions. One suggested creating a custom xorg.conf that creates virtual screen to load the new screen resolution on to. I tried it and it didn’t work. The result after a reboot was the kernel boot splash and one X started to load I was present with a black screen with a cursor marker on the top left on the screen. So I then tried to lower the resolution to 800x600 as a test and to my surprise it would not change. This would indicate that something is fundamentally wrong here. I would try a live CD but I don’t have any spare discs or USB drives I can use.

I did also run “xrandr --verbose” and it states that the maximum resolution supported is 32767x32767. Obviously that maximum is for multiple monitor setups but it does give me hope that the driver does at least support higher resolutions that those I am being offered.

I do have one question: If I wanted to instruct the video driver/framebuffer to ignore the (apparently invalid) EDID being supplied by the panel where is it best to put the X11 option “IgnoreEDID”?

Also if you have any further thoughts, or pieces of advice I would really appreciate you voicing them.

Not the ‘–fb’ option. The display mode gets set with

xrandr --output <name of display output>  --mode <display mode name>

I do have one question: If I wanted to instruct the video driver/framebuffer to ignore the (apparently invalid) EDID being supplied by the panel where is it best to put the X11 option “IgnoreEDID”?

Also if you have any further thoughts, or pieces of advice I would really appreciate you voicing them.

I don’t think that option is valid for the intel driver.

Refer

man intel

You’ll see there is an option for DDC (disabling), but IMHO you’d be better off trying to get a working modeline (via xrandr) first.

BTW, this may well be a driver issue that needs to be addressed, either by upgrading, or perhaps a bug report.

In recent versions, it is possible to supply a custom EDID file to the kernel, though. Also X uses this then, just like as if the monitor would have sent it.

See here: https://wiki.archlinux.org/index.php/Kernel_Mode_Setting#Forcing_modes_and_EDID

Of course this could be a bug in either the driver or the framebuffer. If that is the case i’ll have to look at updating the kernel and/or X to see if that fixes it.

As for supplying a custom EDID, that is an interesting idea and something I will have to look into.

I am currently building a custom kernel based on the sources supplied with the distro with the mode setting/mode detection disabled to see if that makes any difference. I would have ended up building one anyway as I have a nasty addiction to building kernels so all the unnecessary **** is removed and I have a more system specific, possibly slightly faster kernel.

Also, as it is Friday, once the kernel is built and tested I won’t be looking at this again till tomorrow.

Thanks guys, I’ll keep you posted

Hey guys,

I had a look at making custom xorg.conf.d configs for my screen after building the Kernel and that just lead to X server start failures. So, I had a go at creating a custom EDID and so far so good. I’ve got the stage where I need to test it to make sure it works and the documentation for it in the kernel sources says I need to use edid-decode, which should be included with the tools in X11 it seems openSUSE has omitted it. Does anyone know where I can get it from? I did a quick search in YaST and on google and can’t seem to find it.

Thanks again for all your help.

I found it. Gonna do some testing now :slight_smile:

I manage to get the EDID file written and I’m now building another kernel with the command to load it for LVDS1 only hard coded therein. I’m really hoping it works.

Again, thanks for all the help and advice guys, I really couldn’t have done it without you.

Now for another question (and this probably in the wrong place): If this EDID firmware works and I wanted to have it included or placed somewhere that other users could just download it and install it or even have it placed, say, in the hardware compatibility DB on the wiki, what would I need to do?

You don’t have to build a new kernel for that.
Just specify the option (“drm_kms_helper.edid_firmware=LVDS-1:edid/your_edid.bin”) in your boot loader entry.

Or did you custom compile your kernel without support for this? :wink:

You are right, I didn’t have to but instead of supplying the option to load the firmware at boot time you can use the kernel command line to build the option into the kernel itself - which is much tidier - but I had disabled this feature in the previous build.

Now on to something I wasn’t expecting…

The kernel booted fine but for some reason wasn’t able to find the EDID file I had placed in /lib/firmware/edid/ and produced the error “[drm:edid_load] ERROR Requesting EDID firmware “edid/1368x768.bin” failed (err=-2)”. I have googled it but all I could find was a google group on the subject and the fix was never posted and a thread on the ubuntu forums that just doesn’t make any sense.

Anyone got any ideas?

Have you recreated the initrd?
I think it has to be in there, because at the time this is loaded the / partition may not be mounted yet.