Problem with display remaining black after resume

From ThinkWiki
Revision as of 10:23, 1 October 2005 by 131.130.121.230 (Talk) (Solution for ThinkPads with Intel Extreme Graphics 2 (865G, 865GV, 855GM, 855GME, 852GME chipsets)
Jump to: navigation, search

There has been a problem encountered where the display stays black on resuming from suspend.

The symptom might have you think first that your system hang up, but you will realize that your ThinkPad works and you can even reset it via CtrlAltDel.

Affected Models

Affected Operating Systems

  • Linux (it's a kernel issue)

Solutions

Solution for ThinkPads with ATI graphic chips

This seems to work on x40's/x41's, even with Intel Extreme Graphics and for R52's with Intel Graphics Media Accelerator 900. The Solution is to provide the acpi_sleep=s3_bios kernel parameter in your kernel parameter line.

For grub this can look like this:

title           Linux, kernel 2.6.11-1-686
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.11-1-686 root=/dev/hda1 ro acpi_sleep=s3_bios
initrd          /boot/initrd.img-2.6.11-1-686
savedefault
boot

For lilo this can look like this:

image=/boot/vmlinuz
    append="acpi_sleep=s3_bios"

I needed to enable SAVE_VBE_STATE in /etc/default/acpi-support (Ubuntu (perhaps Debian too?)), in addition to the acpi_sleep=s3_bios parameter. What this does is

  • on sleep:
vbetool vbestate save > $VBESTATE
  • on resume:
vbetool vbestate restore < $VBESTATE

$VBESTATE being /usr/lib/acpi-support/vbestate by default.

Solution for ThinkPads with Intel Extreme Graphics 2 (865G, 865GV, 855GM, 855GME, 852GME chipsets)

  • First of all, do not use the acpi_sleep=s3_bios kernel parameter.
  • Second, completely remove framebuffer support from your kernel. If it's built as modules, it is important that they do not get loaded at all.
  • Before suspending, change to a console and safe the video state with # cat /proc/bus/pci/00/02.0 > /tmp/video_state.
  • On resume, restore the video state with # cat /tmp/video_state > /proc/bus/pci/00/02.0 and change back to X.

The following example /etc/acpi/actions/sleep.sh script shows how to integrate the according lines.

#!/bin/bash

# change to console 1
FGCONSOLE=`fgconsole`
chvt 6

# safe video state
cat /proc/bus/pci/00/02.0 > /tmp/video_state

# sync filesystem
sync

# sync hardware clock with system time
hwclock --systohc

# go to sleep
echo -n 3 > /proc/acpi/sleep

# waking up
# restore system clock
hwclock --hctosys

# restore video state
cat /tmp/video_state > /proc/bus/pci/00/02.0

# change back to X
chvt $FGCONSOLE

# clean up behind us
rm /tmp/video_state

FOOTNOTES [Δ]
  1. If you have this problem with R50e and the above solution doesn't work, try switching to console first. An example sleep script can be found here.