2002-06-29 14:53:05

by Sanjoy Mahajan

[permalink] [raw]
Subject: Thinkpad 560 suspend/hibernate requires floppy

[Sending again since I sent it to the wrong linux-kernel addr before.]

I almost always run into trouble suspending or hibernating my Thinkpad
560. On some boots, it works once only. On others it works many
times and then stops (it always stops working if I put in a Zoom modem
card). I've tried many different kernels, all with the same problem.

Now I follow a mix of advice that I got when I mentioned this problem
before on linux-kernel, and I can now suspend/hibernate whenever I
want. Why does the procedure below fix the problem? Let me know if
there are diagnostics that I can run to help track down this problem.

First, the advice:

>From Alfred Ganz --

In addition to the proper APM driver configuration, the critical
element is that the Floppy Disk drive MUST BE configured as a module!

>From Andrew Mitchell --

attach the floppy disk drive
Remove any floppies from the floppy drive.
mount /mnt/floppy
(it gives an error)
bingo, you can now suspend!

I have the floppy driver as a module. I don't follow Andrew
Mitchell's advice exactly (since I just dug it out), but instead
insert a random DOS-formatted floppy into the drive and do "cat <
/dev/fd0 > /dev/null" and interrupt it soon. Then I'm golden.

System: IBM Thinkpad 560, bios v1.11, kernel 2.4.18 (RH's 2.4.18-4
kernel without the unneeded modules).

Relevant .config lines:

CONFIG_BLK_DEV_FD=m

CONFIG_PM=y
# CONFIG_ACPI is not set
CONFIG_APM=y
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
CONFIG_APM_DO_ENABLE=y
CONFIG_APM_CPU_IDLE=y
CONFIG_APM_DISPLAY_BLANK=y
CONFIG_APM_RTC_IS_GMT=y
# CONFIG_APM_ALLOW_INTS is not set
# CONFIG_APM_REAL_MODE_POWER_OFF is not set

-Sanjoy


2002-06-30 17:52:59

by Jan Harkes

[permalink] [raw]
Subject: Re: Thinkpad 560 suspend/hibernate requires floppy

On Sat, Jun 29, 2002 at 03:55:24PM +0100, Sanjoy Mahajan wrote:
> I almost always run into trouble suspending or hibernating my Thinkpad
> 560. On some boots, it works once only. On others it works many
> times and then stops (it always stops working if I put in a Zoom modem
> card). I've tried many different kernels, all with the same problem.

I have a 560X, and successful suspending depends on a few things. If you
are on the battery it typically works, but if you are on wall-power, the
BIOS refuses to suspend whenever a communication related pccard is
inserted (i.e. any modem/serial/network card).

I typically need to reload the cs4236 sound driver to avoid DMA timeouts
when the machine comes back.


> CONFIG_APM_DO_ENABLE=y

This one doesn't seem to be needed, APM is already active.

> CONFIG_APM_CPU_IDLE=y

This one seems to _reduce_ my battery life with some kernels (the ones
where kapmd is simply calling apm_idle in a loop without halting the
CPU). Disable this and I can often run for more than 3 hours on a battery,
enabled it is typically less than 2 hours.

> # CONFIG_APM_ALLOW_INTS is not set

Enable this, the bios seems to want interrupts enabled, especially when
suspending to disk.

Jan

2002-06-30 18:09:14

by Jan Harkes

[permalink] [raw]
Subject: Re: Thinkpad 560 suspend/hibernate requires floppy

On Sun, Jun 30, 2002 at 01:55:22PM -0400, Jan Harkes wrote:
> I typically need to reload the cs4236 sound driver to avoid DMA timeouts

ehh, that should be cs4231

Jan

2002-07-05 19:00:35

by Sanjoy Mahajan

[permalink] [raw]
Subject: Re: Thinkpad 560 suspend/hibernate requires floppy

>> # CONFIG_APM_ALLOW_INTS is not set

> Enable this, the bios seems to want interrupts enabled, especially when
> suspending to disk.

I'll try that. Though I'm running bios v1.11 on the TP560, not v1.20
(which apparently requires CONFIG_APM_ALLOW_INTS to be set).

For now, I've found that to get hibernate/suspend working again, I
don't even need to have a floppy drive attached or even use
mount/umount. All I have to do is:

% modprobe -r floppy
% modprobe floppy

then I can suspend or hibernate with no problem.

-Sanjoy