Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | |
| 2 | Video issues with S3 resume |
| 3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 4 | 2003-2005, Pavel Machek |
| 5 | |
| 6 | During S3 resume, hardware needs to be reinitialized. For most |
| 7 | devices, this is easy, and kernel driver knows how to do |
| 8 | it. Unfortunately there's one exception: video card. Those are usually |
| 9 | initialized by BIOS, and kernel does not have enough information to |
| 10 | boot video card. (Kernel usually does not even contain video card |
| 11 | driver -- vesafb and vgacon are widely used). |
| 12 | |
| 13 | This is not problem for swsusp, because during swsusp resume, BIOS is |
Pavel Machek | 36fabc2 | 2005-11-07 00:58:39 -0800 | [diff] [blame] | 14 | run normally so video card is normally initialized. It should not be |
| 15 | problem for S1 standby, because hardware should retain its state over |
| 16 | that. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 17 | |
| 18 | There are a few types of systems where video works after S3 resume: |
| 19 | |
| 20 | (1) systems where video state is preserved over S3. |
| 21 | |
| 22 | (2) systems where it is possible to call the video BIOS during S3 |
| 23 | resume. Unfortunately, it is not correct to call the video BIOS at |
| 24 | that point, but it happens to work on some machines. Use |
| 25 | acpi_sleep=s3_bios. |
| 26 | |
| 27 | (3) systems that initialize video card into vga text mode and where |
| 28 | the BIOS works well enough to be able to set video mode. Use |
| 29 | acpi_sleep=s3_mode on these. |
| 30 | |
| 31 | (4) on some systems s3_bios kicks video into text mode, and |
| 32 | acpi_sleep=s3_bios,s3_mode is needed. |
| 33 | |
| 34 | (5) radeon systems, where X can soft-boot your video card. You'll need |
Pavel Machek | a4ffad5 | 2005-04-16 15:25:34 -0700 | [diff] [blame] | 35 | a new enough X, and a plain text console (no vesafb or radeonfb). See |
| 36 | http://www.doesi.gmxhome.de/linux/tm800s3/s3.html for more information. |
| 37 | Alternatively, you should use vbetool (6) instead. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 38 | |
| 39 | (6) other radeon systems, where vbetool is enough to bring system back |
| 40 | to life. It needs text console to be working. Do vbetool vbestate |
| 41 | save > /tmp/delme; echo 3 > /proc/acpi/sleep; vbetool post; vbetool |
| 42 | vbestate restore < /tmp/delme; setfont <whatever>, and your video |
| 43 | should work. |
| 44 | |
| 45 | (7) on some systems, it is possible to boot most of kernel, and then |
| 46 | POSTing bios works. Ole Rohne has patch to do just that at |
| 47 | http://dev.gentoo.org/~marineam/patch-radeonfb-2.6.11-rc2-mm2. |
| 48 | |
Pavel Machek | 7e95888 | 2005-09-03 15:56:56 -0700 | [diff] [blame] | 49 | (8) on some systems, you can use the video_post utility mentioned here: |
| 50 | http://bugzilla.kernel.org/show_bug.cgi?id=3670. Do echo 3 > /sys/power/state |
| 51 | && /usr/sbin/video_post - which will initialize the display in console mode. |
| 52 | If you are in X, you can switch to a virtual terminal and back to X using |
| 53 | CTRL+ALT+F1 - CTRL+ALT+F7 to get the display working in graphical mode again. |
| 54 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 55 | Now, if you pass acpi_sleep=something, and it does not work with your |
| 56 | bios, you'll get a hard crash during resume. Be careful. Also it is |
| 57 | safest to do your experiments with plain old VGA console. The vesafb |
| 58 | and radeonfb (etc) drivers have a tendency to crash the machine during |
| 59 | resume. |
| 60 | |
| 61 | You may have a system where none of above works. At that point you |
| 62 | either invent another ugly hack that works, or write proper driver for |
| 63 | your video card (good luck getting docs :-(). Maybe suspending from X |
| 64 | (proper X, knowing your hardware, not XF68_FBcon) might have better |
| 65 | chance of working. |
| 66 | |
Pavel Machek | 36fabc2 | 2005-11-07 00:58:39 -0800 | [diff] [blame] | 67 | Table of known working notebooks: |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 68 | |
| 69 | Model hack (or "how to do it") |
| 70 | ------------------------------------------------------------------------------ |
| 71 | Acer Aspire 1406LC ole's late BIOS init (7), turn off DRI |
| 72 | Acer TM 242FX vbetool (6) |
Pavel Machek | 7e95888 | 2005-09-03 15:56:56 -0700 | [diff] [blame] | 73 | Acer TM C110 video_post (8) |
| 74 | Acer TM C300 vga=normal (only suspend on console, not in X), vbetool (6) or video_post (8) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 75 | Acer TM 4052LCi s3_bios (2) |
Pavel Machek | 36fabc2 | 2005-11-07 00:58:39 -0800 | [diff] [blame] | 76 | Acer TM 636Lci s3_bios,s3_mode (4) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 77 | Acer TM 650 (Radeon M7) vga=normal plus boot-radeon (5) gets text console back |
| 78 | Acer TM 660 ??? (*) |
| 79 | Acer TM 800 vga=normal, X patches, see webpage (5) or vbetool (6) |
| 80 | Acer TM 803 vga=normal, X patches, see webpage (5) or vbetool (6) |
| 81 | Acer TM 803LCi vga=normal, vbetool (6) |
| 82 | Arima W730a vbetool needed (6) |
| 83 | Asus L2400D s3_mode (3)(***) (S1 also works OK) |
Pavel Machek | a4ffad5 | 2005-04-16 15:25:34 -0700 | [diff] [blame] | 84 | Asus L3350M (SiS 740) (6) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 85 | Asus L3800C (Radeon M7) s3_bios (2) (S1 also works OK) |
Pavel Machek | a4ffad5 | 2005-04-16 15:25:34 -0700 | [diff] [blame] | 86 | Asus M6887Ne vga=normal, s3_bios (2), use radeon driver instead of fglrx in x.org |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 87 | Athlon64 desktop prototype s3_bios (2) |
| 88 | Compal CL-50 ??? (*) |
| 89 | Compaq Armada E500 - P3-700 none (1) (S1 also works OK) |
| 90 | Compaq Evo N620c vga=normal, s3_bios (2) |
| 91 | Dell 600m, ATI R250 Lf none (1), but needs xorg-x11-6.8.1.902-1 |
| 92 | Dell D600, ATI RV250 vga=normal and X, or try vbestate (6) |
Pavel Machek | 2a96206 | 2005-06-25 14:55:18 -0700 | [diff] [blame] | 93 | Dell D610 vga=normal and X (possibly vbestate (6) too, but not tested) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 94 | Dell Inspiron 4000 ??? (*) |
| 95 | Dell Inspiron 500m ??? (*) |
Pavel Machek | 2a96206 | 2005-06-25 14:55:18 -0700 | [diff] [blame] | 96 | Dell Inspiron 510m ??? |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 97 | Dell Inspiron 600m ??? (*) |
| 98 | Dell Inspiron 8200 ??? (*) |
| 99 | Dell Inspiron 8500 ??? (*) |
| 100 | Dell Inspiron 8600 ??? (*) |
| 101 | eMachines athlon64 machines vbetool needed (6) (someone please get me model #s) |
| 102 | HP NC6000 s3_bios, may not use radeonfb (2); or vbetool (6) |
| 103 | HP NX7000 ??? (*) |
| 104 | HP Pavilion ZD7000 vbetool post needed, need open-source nv driver for X |
| 105 | HP Omnibook XE3 athlon version none (1) |
| 106 | HP Omnibook XE3GC none (1), video is S3 Savage/IX-MV |
| 107 | IBM TP T20, model 2647-44G none (1), video is S3 Inc. 86C270-294 Savage/IX-MV, vesafb gets "interesting" but X work. |
| 108 | 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 :-(] |
| 109 | IBM TP R32 / Type 2658-MMG none (1) |
| 110 | IBM TP R40 2722B3G ??? (*) |
| 111 | IBM TP R50p / Type 1832-22U s3_bios (2) |
Pavel Machek | a4ffad5 | 2005-04-16 15:25:34 -0700 | [diff] [blame] | 112 | IBM TP R51 none (1) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 113 | IBM TP T30 236681A ??? (*) |
| 114 | IBM TP T40 / Type 2373-MU4 none (1) |
| 115 | IBM TP T40p none (1) |
| 116 | IBM TP R40p s3_bios (2) |
| 117 | IBM TP T41p s3_bios (2), switch to X after resume |
Pavel Machek | a4ffad5 | 2005-04-16 15:25:34 -0700 | [diff] [blame] | 118 | IBM TP T42 s3_bios (2) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 119 | IBM ThinkPad T42p (2373-GTG) s3_bios (2) |
| 120 | IBM TP X20 ??? (*) |
Pavel Machek | a4ffad5 | 2005-04-16 15:25:34 -0700 | [diff] [blame] | 121 | IBM TP X30 s3_bios (2) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 122 | IBM TP X31 / Type 2672-XXH none (1), use radeontool (http://fdd.com/software/radeon/) to turn off backlight. |
Pavel Machek | d7ae79c | 2005-09-06 15:16:21 -0700 | [diff] [blame] | 123 | IBM TP X32 none (1), but backlight is on and video is trashed after long suspend |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 124 | IBM Thinkpad X40 Type 2371-7JG s3_bios,s3_mode (4) |
| 125 | Medion MD4220 ??? (*) |
| 126 | Samsung P35 vbetool needed (6) |
| 127 | Sharp PC-AR10 (ATI rage) none (1) |
Pavel Machek | 374a6cf | 2005-07-07 17:59:33 -0700 | [diff] [blame] | 128 | Sony Vaio PCG-C1VRX/K s3_bios (2) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 129 | Sony Vaio PCG-F403 ??? (*) |
| 130 | Sony Vaio PCG-N505SN ??? (*) |
| 131 | Sony Vaio vgn-s260 X or boot-radeon can init it (5) |
| 132 | Toshiba Libretto L5 none (1) |
| 133 | Toshiba Satellite 4030CDT s3_mode (3) |
| 134 | Toshiba Satellite 4080XCDT s3_mode (3) |
| 135 | Toshiba Satellite 4090XCDT ??? (*) |
| 136 | Toshiba Satellite P10-554 s3_bios,s3_mode (4)(****) |
Pavel Machek | 2a96206 | 2005-06-25 14:55:18 -0700 | [diff] [blame] | 137 | Toshiba M30 (2) xor X with nvidia driver using internal AGP |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 138 | Uniwill 244IIO ??? (*) |
| 139 | |
Pavel Machek | 36fabc2 | 2005-11-07 00:58:39 -0800 | [diff] [blame] | 140 | Known working desktop systems |
| 141 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 142 | |
| 143 | Mainboard Graphics card hack (or "how to do it") |
| 144 | ------------------------------------------------------------------------------ |
| 145 | Asus A7V8X nVidia RIVA TNT2 model 64 s3_bios,s3_mode (4) |
| 146 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 147 | |
| 148 | (*) from http://www.ubuntulinux.org/wiki/HoaryPMResults, not sure |
| 149 | which options to use. If you know, please tell me. |
| 150 | |
| 151 | (***) To be tested with a newer kernel. |
| 152 | |
| 153 | (****) Not with SMP kernel, UP only. |
| 154 | |
| 155 | VBEtool details |
| 156 | ~~~~~~~~~~~~~~~ |
| 157 | (with thanks to Carl-Daniel Hailfinger) |
| 158 | |
| 159 | First, boot into X and run the following script ONCE: |
| 160 | #!/bin/bash |
| 161 | statedir=/root/s3/state |
| 162 | mkdir -p $statedir |
| 163 | chvt 2 |
| 164 | sleep 1 |
| 165 | vbetool vbestate save >$statedir/vbe |
| 166 | |
| 167 | |
| 168 | To suspend and resume properly, call the following script as root: |
| 169 | #!/bin/bash |
| 170 | statedir=/root/s3/state |
| 171 | curcons=`fgconsole` |
| 172 | fuser /dev/tty$curcons 2>/dev/null|xargs ps -o comm= -p|grep -q X && chvt 2 |
| 173 | cat /dev/vcsa >$statedir/vcsa |
| 174 | sync |
| 175 | echo 3 >/proc/acpi/sleep |
| 176 | sync |
| 177 | vbetool post |
| 178 | vbetool vbestate restore <$statedir/vbe |
| 179 | cat $statedir/vcsa >/dev/vcsa |
| 180 | rckbd restart |
| 181 | chvt $[curcons%6+1] |
| 182 | chvt $curcons |
| 183 | |
| 184 | |
| 185 | Unless you change your graphics card or other hardware configuration, |
| 186 | the state once saved will be OK for every resume afterwards. |
| 187 | NOTE: The "rckbd restart" command may be different for your |
| 188 | distribution. Simply replace it with the command you would use to |
| 189 | set the fonts on screen. |