Sleep and Hibernate fix for Thinkpad T61p with an NVIDIA FX570 video card
When I ordered my Thinkpad laptop I specified the best video card that they had available thinking that it would be the best choice with SLED or OpenSuSE. That turned out to be a bad idea until now.
I found out after the fact that NVIDIA drivers can be a problem in certain situations. Especially when it comes to using your laptop’s sleep and hibernate functions. They seem to go to sleep just fine. The problem occurs when you try to wake them up again. Everything seems to start up but then when the system tries to load the X11 driver and switch to the desktop, it goes to a black screen and then you are stuck. The only option you have is to power-off and reboot. That is not good for your filesystem integrity even with journaling filesystems such as EXT3 or ReiserFS.
I dug through many forums, discussion threads, and sites like thinkwiki.org for a solution and found nothing that worked for my laptop. However, I have to give them all credit for helping me discover the final solution. I can’t guarantee that this will work for your computer but it could help.
It all seems to revolve around which driver is trying to control the AGP features on your computer. In case you are not familiar with the term. AGP is the power management capability that is built into any modern computer. It seems that all power management has been delegated to the video system driver in Linux and Windows.
Many system boards come with integrated video controllers but when you add a different video card it complicates things. It seems like the linux distributions have a problem configuring AGP settings when there are two video adapters on a system. Laptops and desktops might come with an enhanced video card using ATI or nVideo chipsets but the integrated video on the motherboard is still there lurking in the background.
I also think that you need to match the AGP capability of the computer to that in the driver. Read the information below and you will see what I mean by that.
Check to see which AGP driver is enabled on your system by running:
lsmod | grep agp
Mine came back with intel_agp but yours might show sis_agp or via_agp depending on your motherboard. It will also show agppart but that is OK. Make note of which agp module is installed because you will need that information in the next step.
Edit /etc/modprobe.conf.local and add the following line:
Yours should look like this:
# # please add local extensions to this file # blacklist intel_agp
Now you need to look in the driver registry to see which features are enabled. Run the following:
Look for NvAGP: 3. This number is the supported AGP state.
You need to modify the X system configuration so it knows about your video card’s AGP feature. Edit /etc/X11/xorg.conf and look for the [Device] section. Mine originally looked like this:
Section "Device" BoardName "Quadro FX 570M" Driver "nvidia" Identifier "Device" VendorName "NVidia" EndSection
Add a new entry: Option “NvAGP” “3” into this section. After I made this change mine looks like this:
Section "Device" BoardName "Quadro FX 570M" Driver "nvidia" Identifier "Device" VendorName "NVidia" Option "NvAGP" "3" EndSection
It seems as if the settings are working as soon as you save the file but you should probably reboot your system before trying your new settings. I noticed that if I now check the current agp driver by running lsmod | grep agp it comes back with:
agpgart 32308 1 nvidia
My system now goes to sleep and wakes up properly. The hibernate feature works but, when waking up, it sits for 2 minutes at a black screen with a blinking cursor in the upper left corner. It will beep once and then after another minute it will beep again. After another minute, it will resume the system and you should see a desktop. I rarely use hibernate so this doesn’t bother me. At least I know it works if I need it.