
		Video issues with S3 resume
		~~~~~~~~~~~~~~~~~~~~~~~~~~~
		  2003-2005, Pavel Machek

During S3 resume, hardware needs to be reinitialized. For most
devices, this is easy, and kernel driver knows how to do
it. Unfortunately there's one exception: video card. Those are usually
initialized by BIOS, and kernel does not have enough information to
boot video card. (Kernel usually does not even contain video card
driver -- vesafb and vgacon are widely used).

This is not problem for swsusp, because during swsusp resume, BIOS is
run normally so video card is normally initialized. It should not be
problem for S1 standby, because hardware should retain its state over
that.

There are a few types of systems where video works after S3 resume:

(1) systems where video state is preserved over S3.

(2) systems where it is possible to call the video BIOS during S3
  resume. Unfortunately, it is not correct to call the video BIOS at
  that point, but it happens to work on some machines. Use
  acpi_sleep=s3_bios.

(3) systems that initialize video card into vga text mode and where
  the BIOS works well enough to be able to set video mode. Use
  acpi_sleep=s3_mode on these.

(4) on some systems s3_bios kicks video into text mode, and
  acpi_sleep=s3_bios,s3_mode is needed.

(5) radeon systems, where X can soft-boot your video card. You'll need
  a new enough X, and a plain text console (no vesafb or radeonfb). See
  http://www.doesi.gmxhome.de/linux/tm800s3/s3.html for more information.
  Alternatively, you should use vbetool (6) instead.

(6) other radeon systems, where vbetool is enough to bring system back
  to life. It needs text console to be working. Do vbetool vbestate
  save > /tmp/delme; echo 3 > /proc/acpi/sleep; vbetool post; vbetool
  vbestate restore < /tmp/delme; setfont <whatever>, and your video
  should work.

(7) on some systems, it is possible to boot most of kernel, and then
  POSTing bios works. Ole Rohne has patch to do just that at
  http://dev.gentoo.org/~marineam/patch-radeonfb-2.6.11-rc2-mm2.

(8) on some systems, you can use the video_post utility mentioned here:
  http://bugzilla.kernel.org/show_bug.cgi?id=3670. Do echo 3 > /sys/power/state
  && /usr/sbin/video_post - which will initialize the display in console mode.
  If  you are in X, you can switch to a virtual terminal and back to X using
  CTRL+ALT+F1 - CTRL+ALT+F7 to get the display working in graphical mode again.

Now, if you pass acpi_sleep=something, and it does not work with your
bios, you'll get a hard crash during resume. Be careful. Also it is
safest to do your experiments with plain old VGA console. The vesafb
and radeonfb (etc) drivers have a tendency to crash the machine during
resume.

You may have a system where none of above works. At that point you
either invent another ugly hack that works, or write proper driver for
your video card (good luck getting docs :-(). Maybe suspending from X
(proper X, knowing your hardware, not XF68_FBcon) might have better
chance of working.

Table of known working notebooks:

Model                           hack (or "how to do it")
------------------------------------------------------------------------------
Acer Aspire 1406LC		ole's late BIOS init (7), turn off DRI
Acer TM 242FX			vbetool (6)
Acer TM C110			video_post (8)
Acer TM C300                    vga=normal (only suspend on console, not in X), vbetool (6) or video_post (8)
Acer TM 4052LCi		        s3_bios (2)
Acer TM 636Lci			s3_bios,s3_mode (4)
Acer TM 650 (Radeon M7)		vga=normal plus boot-radeon (5) gets text console back
Acer TM 660			??? (*)
Acer TM 800			vga=normal, X patches, see webpage (5) or vbetool (6)
Acer TM 803			vga=normal, X patches, see webpage (5) or vbetool (6)
Acer TM 803LCi			vga=normal, vbetool (6)
Arima W730a			vbetool needed (6)
Asus L2400D                     s3_mode (3)(***) (S1 also works OK)
Asus L3350M (SiS 740)           (6)
Asus L3800C (Radeon M7)		s3_bios (2) (S1 also works OK)
Asus M6887Ne			vga=normal, s3_bios (2), use radeon driver instead of fglrx in x.org
Athlon64 desktop prototype	s3_bios (2)
Compal CL-50			??? (*)
Compaq Armada E500 - P3-700     none (1) (S1 also works OK)
Compaq Evo N620c		vga=normal, s3_bios (2)
Dell 600m, ATI R250 Lf		none (1), but needs xorg-x11-6.8.1.902-1
Dell D600, ATI RV250            vga=normal and X, or try vbestate (6)
Dell D610			vga=normal and X (possibly vbestate (6) too, but not tested)
Dell Inspiron 4000		??? (*)
Dell Inspiron 500m		??? (*)
Dell Inspiron 510m		???
Dell Inspiron 600m		??? (*)
Dell Inspiron 8200		??? (*)
Dell Inspiron 8500		??? (*)
Dell Inspiron 8600		??? (*)
eMachines athlon64 machines	vbetool needed (6) (someone please get me model #s)
HP NC6000			s3_bios, may not use radeonfb (2); or vbetool (6)
HP NX7000			??? (*)
HP Pavilion ZD7000		vbetool post needed, need open-source nv driver for X
HP Omnibook XE3	athlon version	none (1)
HP Omnibook XE3GC		none (1), video is S3 Savage/IX-MV
IBM TP T20, model 2647-44G	none (1), video is S3 Inc. 86C270-294 Savage/IX-MV, vesafb gets "interesting" but X work.
IBM TP A31 / Type 2652-M5G      s3_mode (3) [works ok with BIOS 1.04 2002-08-23, but not at all with BIOS 1.11 2004-11-05 :-(]
IBM TP R32 / Type 2658-MMG      none (1)
IBM TP R40 2722B3G		??? (*)
IBM TP R50p / Type 1832-22U     s3_bios (2)
IBM TP R51			none (1)
IBM TP T30	236681A		??? (*)
IBM TP T40 / Type 2373-MU4      none (1)
IBM TP T40p			none (1)
IBM TP R40p			s3_bios (2)
IBM TP T41p			s3_bios (2), switch to X after resume
IBM TP T42			s3_bios (2)
IBM ThinkPad T42p (2373-GTG)	s3_bios (2)
IBM TP X20			??? (*)
IBM TP X30			s3_bios (2)
IBM TP X31 / Type 2672-XXH      none (1), use radeontool (http://fdd.com/software/radeon/) to turn off backlight.
IBM TP X32			none (1), but backlight is on and video is trashed after long suspend
IBM Thinkpad X40 Type 2371-7JG  s3_bios,s3_mode (4)
Medion MD4220			??? (*)
Samsung P35			vbetool needed (6)
Sharp PC-AR10 (ATI rage)	none (1)
Sony Vaio PCG-C1VRX/K		s3_bios (2)
Sony Vaio PCG-F403		??? (*)
Sony Vaio PCG-N505SN		??? (*)
Sony Vaio vgn-s260		X or boot-radeon can init it (5)
Toshiba Libretto L5		none (1)
Toshiba Satellite 4030CDT	s3_mode (3)
Toshiba Satellite 4080XCDT      s3_mode (3)
Toshiba Satellite 4090XCDT      ??? (*)
Toshiba Satellite P10-554       s3_bios,s3_mode (4)(****)
Toshiba M30                     (2) xor X with nvidia driver using internal AGP
Uniwill 244IIO			??? (*)

Known working desktop systems
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Mainboard	    Graphics card                 hack (or "how to do it")
------------------------------------------------------------------------------
Asus A7V8X	    nVidia RIVA TNT2 model 64	  s3_bios,s3_mode (4)


(*) from http://www.ubuntulinux.org/wiki/HoaryPMResults, not sure
    which options to use. If you know, please tell me.

(***) To be tested with a newer kernel.

(****) Not with SMP kernel, UP only.

VBEtool details
~~~~~~~~~~~~~~~
(with thanks to Carl-Daniel Hailfinger)

First, boot into X and run the following script ONCE:
#!/bin/bash
statedir=/root/s3/state
mkdir -p $statedir
chvt 2
sleep 1
vbetool vbestate save >$statedir/vbe


To suspend and resume properly, call the following script as root:
#!/bin/bash
statedir=/root/s3/state
curcons=`fgconsole`
fuser /dev/tty$curcons 2>/dev/null|xargs ps -o comm= -p|grep -q X && chvt 2
cat /dev/vcsa >$statedir/vcsa
sync
echo 3 >/proc/acpi/sleep
sync
vbetool post
vbetool vbestate restore <$statedir/vbe
cat $statedir/vcsa >/dev/vcsa
rckbd restart
chvt $[curcons%6+1]
chvt $curcons


Unless you change your graphics card or other hardware configuration,
the state once saved will be OK for every resume afterwards.
NOTE: The "rckbd restart" command may be different for your
distribution. Simply replace it with the command you would use to
set the fonts on screen.
