Bug 7977
Description
Martin Tuma
2007-02-09 11:26:09 UTC
Could you please try the last 2 patches from bug 7689? Thanks! I have tryed the last 2 patches (2007-02-09 09:01, 2007-02-09 09:02) from bug 7689 and they don't solve the problem. Ok, some more ideas: 1. Try booting with i8042_nopnp 2. Try compiling atkbd as a module and unload it before suspending and reload after resuming 3. Try unbinding i8042 driver from its device before suspending and rebind after resuming (via sysfs) 4. Compile i8042 as a module and unload it before suspending and reload it after resuming. Note: to compile i8042 and atkbd as modules you will need to enable CONFIG_EMBEDDED. P.S. Alessandro, I added you to CC of this bug, I hope you don't mind... Actually Bugzilla gave me a "Mid-air collition error" since I was adding my e- mail to CC when you was... LOL! 1) and 2) had no effect, but 4) worked :-) If i compile the kernel with i8042 as a module and use a suspend script like this: ----------------------------------- #!/bin/sh grep -q open /proc/acpi/button/lid/C238/state && exit # suspend modprobe -r psmouse modprobe -r i8042 echo mem > /sys/power/state # resume sleep 1 modprobe i8042 modprobe psmouse ----------------------------------- then the touchpad works after resume as well as the keyboard. Dmitry I guess it should be solved using the same method you used in bug #7689. With those patches you provided the mouse still worked for me after resume but keyboard didn't (I tried with the first two... I'm going to try with my actual kernel where I applied the first patch and the fourth patch, as you suggested in the other bug). Maybe our laptops need the PS/2 bus to be fully cleaned up either for mouse or for keyboard before shutdown/reboot/suspend. NOTE: I've tried to plug in an USB keyboard after resume and it worked. Martin, Since 4) worked for you I am really interested in comparioson with 3). This will let me know if it is just the difference between i8042_suspend() and i8042_remove() or if I will have to fiddle with PNP layer as well. To unbind i8042 via sysfs you will have to do sometyhing like this: echo -n "i8042" > /sys/bus/platform/drivers/i8042/unbind and to rebind you would need to do echo -n "i8042" > /sys/bus/platform/drivers/i8042/bind Please take the sysfs paths with a grain of salt since I am away from a Linux box at the moment. Created attachment 10418 [details]
Leave AT keyboard enabled when suspending
OK guys, coudl you please try this patch? It attempts to leave the keyboard
enabled when suspending/shutting down, like we do for mouse in the other bug.
The patch should be applied with 2 other patches from 7689 (for psmouse and
i8042) taht I am going to attach in a moment.
Created attachment 10419 [details]
Properly reset psmouse at suspend
Created attachment 10420 [details]
Let serio bus handle suspending/resuming of i8042 ports
Good news! Unbinding and rebinding of the i8042 via sysfs also "fixes" the problem, so there is no need compiling i8042 as a module. Dmitry, what behaviour exactly do you want to test with those new patches? Should they work without the need to bind/unbind the i8042 driver, or even unload/load the psmouse module? And the second question - should the sources be also patched with the patches you mentioned in your first comment here (2007-02-09 09:01, 2007-02-09 09:02 from bug 7689)? I also don't understand, why to patch the at keyboard driver - the bug seems to be in the i8042 driver. M. Martin, I want you to apply only 3 patches from this bug (I "moved" 2 of these from the other issue so they all can be seen in context of this problem) and tell me if your box has functioning keyboard/touchpad without any additional effort such as unbinding i8042 or reloading any modules. As to why I am patching keyboard driver - it may very well be that the origin of problem is there (aside of the fact that BIOS on HP boxes seems to be brain damaged). When you unbind i8042 you are in fact destroying all serio ports registered by it and this causes atkbd (and psmouse) to run their disconnect routines which restore hardware state to the BIOS liking. The patches try to do the same cleanup at suspend state without destroying serio ports. Thanks! I get errors trying to apply the the patches from id=10419 and id=10420. The first patch (id=10420) works fine. The kernel is a "clean" 2.6.20. Any seggestions? -------------------------------------- [tumic@HP linux-2.6.20]$ patch -p1 < p10420.patch patching file drivers/input/serio/i8042.c Hunk #1 succeeded at 788 (offset -3 lines). Hunk #2 succeeded at 836 (offset -1 lines). Hunk #3 succeeded at 856 (offset -3 lines). Hunk #4 succeeded at 876 (offset -1 lines). Hunk #5 succeeded at 907 (offset -3 lines). patching file drivers/input/serio/serio.c Hunk #2 succeeded at 921 (offset -2 lines). patching file include/linux/serio.h Reversed (or previously applied) patch detected! Assume -R? [n] n Apply anyway? [n] n Skipping patch. 1 out of 1 hunk ignored -- saving rejects to file include/linux/serio.h.rej ... [tumic@HP linux-2.6.20]$ patch -p1 < p10419.patch patching file drivers/input/mouse/psmouse-base.c Hunk #1 FAILED at 987. 1 out of 1 hunk FAILED -- saving rejects to file drivers/input/mouse/psmouse-base.c.rej patching file drivers/input/mouse/psmouse.h Reversed (or previously applied) patch detected! Assume -R? [n] n Apply anyway? [n] n Skipping patch. 1 out of 1 hunk ignored -- saving rejects to file drivers/input/mouse/psmouse.h.rej patching file drivers/input/mouse/synaptics.c Reversed (or previously applied) patch detected! Assume -R? [n] n Apply anyway? [n] n Skipping patch. 1 out of 1 hunk ignored -- saving rejects to file drivers/input/mouse/synaptics.c.rej Seems to be working fine here. Please check your tree and make sure you apply patches in order: [dtor@anvil kernel]$ mkdir 2.6.20 [dtor@anvil kernel]$ cd 2.6.20/ [dtor@anvil 2.6.20]$ GIT_DIR=../work-new/.git git checkout -q -f v2.6.20 [dtor@anvil 2.6.20]$ curl -# "http://bugzilla.kernel.org/attachment.cgi?id=10418&action=view" | patch -p1 patching file drivers/input/keyboard/atkbd.c [dtor@anvil 2.6.20]$ curl -# "http://bugzilla.kernel.org/attachment.cgi?id=10419&action=view" | patch -p1 ## patching file drivers/input/mouse/psmouse-base.c patching file drivers/input/mouse/psmouse.h patching file drivers/input/mouse/synaptics.c [dtor@anvil 2.6.20]$ curl -# "http://bugzilla.kernel.org/attachment.cgi?id=10420&action=view" | patch -p1 #### patching file drivers/input/serio/i8042.c Hunk #1 succeeded at 788 (offset -3 lines). Hunk #2 succeeded at 836 (offset -1 lines). Hunk #3 succeeded at 856 (offset -3 lines). Hunk #4 succeeded at 876 (offset -1 lines). Hunk #5 succeeded at 907 (offset -3 lines). patching file drivers/input/serio/serio.c Hunk #2 succeeded at 921 (offset -2 lines). patching file include/linux/serio.h Hunk #1 succeeded at 103 (offset -5 lines). I have succesfully applyed the patches (the sources weren't so "clean" as I thought...) but if I don't unload/unbind the modules befor suspend, then the touchped as well as the keyboard stops working after resume. That means, the problem hasn't been fixed by the patches :-( Created attachment 10445 [details]
Let serio bus handle suspending/resuming of i8042 ports
Heh, I completely screwed up suspend-to-ram with the last patch. Please revert
it (patch 10420) and apply this one. Thanks!
Created attachment 10449 [details]
Kernel log - Suspending to RAM
I applied all the three patches and I recompiled my kernel without SMP support
to make "Suspend states" available. I booted into the new kernel and tried to
suspend to RAM.
Suspending works but when I wake up my laptop the screen remains black. The
system seems to work but I have to push the power button to shut down it (I was
in the terminal before suspending so I tried to write "reboot" and press enter
but it didn't execute the command).
I've tried to suspend with hibernate script and from KLaptop (KDE) but both
failed to wake up the system.
OK, I see that your box resumed just fine except that you can't see it ;) I guess intelfb can't handle resume quite right yet. I'd recommend trying s2ram utility (http://suspend.sourceforge.net/) and also maybe disable your framebuffer (graphic) console and use text one while testing suspend-to-ram. Thanks! *** Bug 7367 has been marked as a duplicate of this bug. *** *** Bug 7277 has been marked as a duplicate of this bug. *** I tried to remove the framebuffer support from my kernel but there is no difference. I found these errors in my kernel log (the one I attached here) before suspend: "ACPI Error (utglobal-0125): Unknown exception code: 0xFFFFFFF0 [20060707]" "synaptics reset failed" (many times) and this one when waking up: "psmouse.c: Failed to enable mouse on isa0060/serio4" Can you please explain them? I have just tryed the new patch(patches), but they don't work. I think, it didn't work by Alessandro neither. I have the same problem with resuming from the console (the display won't get "on"), but it works if suspended from X. If only the display wouldn't work, you should be able to execute the reboot command even if you did not see the output. The fact, that this didn't worked means IMHO that the keyboard was out of order. Hm, I missed the part with psmouse not activating properly... Can I get a dmesg of s2ram with i8042 debug enabled? (use echo 1 > /sys/module/i8042/parameters/debug before suspending). Thanks! I have to search s2ram as an ebuild before installing it because gentoo's portage hasn't it (ay least I didn't find it). However, I'll try A.S.A.P. Created attachment 10462 [details]
The keyboard was working in 2.6.19 after STR
HP CPQ nc6320 (T2400, i945GM, latest bios).
The keyboard was working properly after suspend to ram in v2.6.19 (and 2.6.18 i
think). There is a syslog with enabled debugging of i8042.
Created attachment 10463 [details]
The keyboard/touchpad doesn't work after STR in 2.6.20
With 2.6.20 it stopped working after resume from STR.
I've also noticed that there no i8042 interrupts (irq1) generated anymore.
Removing i8042 module and reloading it again helps.
Both 2.6.19 and 2.6.20 syslogs are with i8042 debug enabled. In both cases I've
tried to suspend and resume once. In case of 2.6.20 I've reloaded the i8042
module again.\
Other than dead keyboard/touchpad the laptop after resume appears to work ok.
Almonas, Could you please also provide me with dmesg of the boot process with 2.6.20 (with i8042.debug=1)? Thanks! Created attachment 10473 [details]
The dmesg output from the 2.6.20 kernel with i8042.debug enabled
As requested.
I have applied all 3 patches to the 2.6.20 kernel as well as making i8042, psmouse, atkbd, and evdev modules and unloading before a suspend but the touchpad still does not wake up after a suspend. What information can i provide to you to assist? Zak, Try this suspend script, it should work, even if you don't have i8042 and atkbd as modules. But it is not a real solution - it's more a "workaround" becouse it solves the consequence, not the reason. ---------- begin script ---------- #!/bin/sh # if LID pressed (Display closed) suspend, else exit grep -q open /proc/acpi/button/lid/C238/state && exit # suspend modprobe -r psmouse echo -n "i8042" > /sys/bus/platform/drivers/i8042/unbind echo mem > /sys/power/state # resume sleep 1 echo -n "i8042" > /sys/bus/platform/drivers/i8042/bind modprobe psmouse ---------- end script ---------- Note: you have to modify the lid identifier (C238) to fit your system I used that suspend script that you provided, the laptop suspends then resumes but neither the touchpad or the USB mouse work. Normally i am using the suspend2 patches with the hibernate scripts. With Suspend2 the laptop suspends and resumes except for the touchpad not comming back but an external USB mouse works after resume. again any info that i can provide let me know Created attachment 10610 [details]
Results of bisecting
Just wanted to say, that I did some bisecting, but I am not sure what to make
of all of this since the results don't make any sense to me. It points to the
ibm_acpi stuff which:
1. looks harmless
2. is not used, since it is an hp machine and I have an CONFIG_IBM_ACPI as "not
set".
Or I am doing something absolutely wrong.
Hello, I did some more tests and finally found the offending commit which caused the problems on my laptop. git bisect was close but no cookie. It was an 5d57a6a55ec0bdcb952dbcd3f8ffcde8a3ee9413 ============================================= Author: Alexey Starikovskiy <alexey.y.starikovskiy@intel.com> Date: 12/07/2006 04:42:16 PM ACPI: ec: Enable EC GPE at beginning of transaction Temporary measure until resume sequence is right. Signed-off-by: Len Brown <len.brown@intel.com> ============================================= So, it looks like the ACPI related problem, at least in my case. I've commented that line out and everything is working fine again. As a side efect the resume is taking noticeably more time as before. Ok, I'll add Len and Alexey to CC of the bug so they can take a closer look at EC change. Everyone else with s2ram not working, please try 2.6.21-rc3 and give me dmesgs with "i8042.debug log_buf_len=131072" on the kernel command line. I am interested in initial boot, suspend, resume and then rebinding i8042 via sysfs. You can send logs directly to me if you don;t want to clutter bugzilla. Thanks! Ok, 2.6.21 has just been released. Please verify that touchpad/and keyboard still broken abfter suspend and send me the logs I requested in previous comment. Thanks! I am unable to give you the i8024 debug log when i boot the 2.6.21 kernel i see this message... Kernel command line: root=/dev/sda7 video=vesafb:ywrap,pmipal,1024x768-16@75 resume2=swap:/dev/sda2 i8042.debug=1 log_buf_len=131072 Unknown boot option `i8042.debug=1': ignoring log_buf_len: 131072 Do you have i8042 as a module? Then you need to ad "options i8042 debug=1" to your modprobe.conf Created attachment 11334 [details]
here is the dmesg pre suspend
Created attachment 11335 [details]
here is the dmesg post suspend
Created attachment 11338 [details]
Enable runtime GPEs before calling _WAK method
Dmitry,
The patch you mention is indeed a temporary solution needed until order of
pm_finish/device_resume is done right, what already happened.
I think the attached patch is last peace of the puzzle, and that temporary
patch could be dropped after that.
Almonas, Could you please check that with commented out enable_gpe in ec.c and the patch I just attached, speed of resume becomes normal again? Just tried v2.6.21 without any modification. It suspends and resumes fine,
keyboard and touchpad are working fine. Very strange indeed.
Retested with 2.6.20 (the one which came with Ubuntu 7.04). The problem is still
there, no keyboard/touchpad after resume.
The resume times are somehow strange, both with 2.6.20 and .21. First resume
from STR is about 19 secons. Second one - 10s.
Looking at logs I see a message wich I think was not present before v2.6.21:
...<skip>..
May 14 20:15:36 notebook kernel: [ 87.372000] Back to C!
May 14 20:15:36 notebook kernel: [ 87.372000] Enabling non-boot CPUs ...
May 14 20:15:36 notebook kernel: [ 87.384000] SMP alternatives: switching to
SMP code
May 14 20:15:36 notebook kernel: [ 87.384000] Booting processor 1/1 eip 3000
May 14 20:15:36 notebook kernel: [ 87.392000] Initializing CPU#1
....<skip>........
May 14 20:15:36 notebook kernel: [ 87.472000] CPU1: Intel Genuine Intel(R) CPU
T2400 @ 1.83GHz stepping 08
May 14 20:15:36 notebook kernel: [ 87.472000] kvm: enabling virtualization on CPU1
May 14 20:15:36 notebook kernel: [ 87.472000] CPU1 is up
>>This was not here: >>>>>>>>>>>>>>>>>>
May 14 20:15:36 notebook kernel: [ 87.500000] Clocksource tsc unstable (delta
= 4090230334259 ns)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
May 14 20:15:36 notebook kernel: [ 87.536000] APIC error on CPU0: 00(40)
May 14 20:15:36 notebook kernel: [ 87.536000] APIC error on CPU1: 00(40)
...<skip>....
An APIC error was always there, but the message about unstable TSC is a new one.
Don't know though if it has anything to do with a (now vanished) problem.
Should I still try the said patch?
The laptop is HP Compaq nc6320, T2400 + 945GM, latest BIOS.
If vanilla 2.6.21 works for you, there is no need to apply any patches. Does this fix work for every one that was having the issue? I am still having the issue. I'm also having the issue. Zak, could you be more specific? What kernel do you use? Do you apply any patches? Hello, I am running 2.6.21.3 (vanilla kernel) with no patches applied. When i STR (echo "mem" > /sys.power/state) the laptop goes to sleep then when i wake it back up the touchpad is dead. I am however able to use all other features of the laptop including an external USB mouse. Here are the modules that i have loaded slacktop ~ # lsmod Module Size Used by fglrx 642272 15 fuse 33556 2 mmc_block 5960 0 tun 7168 0 psmouse 31240 0 atkbd 13456 0 libps2 4608 2 psmouse,atkbd i8042 15332 0 ieee80211_crypt_tkip 9472 3 ieee80211_crypt_ccmp 5824 0 ieee80211_crypt_wep 3776 0 ipw2200 125236 0 ieee80211 25608 1 ipw2200 ieee80211_crypt 3904 4 ieee80211_crypt_tkip,ieee80211_crypt_ccmp,ieee80211_crypt_wep,ieee80211 firmware_class 6592 1 ipw2200 sdhci 12940 0 sr_mod 11108 0 cdrom 29856 1 sr_mod sg 17880 0 evdev 6848 4 slacktop ~ # here is the hardware that i have slacktop ~ # lspci 00:00.0 Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (rev 03) 00:01.0 PCI bridge: Intel Corporation Mobile 915GM/PM Express PCI Express Root Port (rev 03) 00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03) 00:1d.1 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 (rev 03) 00:1d.2 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 (rev 03) 00:1d.3 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 03) 00:1d.7 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 03) 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev d3) 00:1e.2 Multimedia audio controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 03) 00:1f.0 ISA bridge: Intel Corporation 82801FBM (ICH6M) LPC Interface Bridge (rev 03) 00:1f.1 IDE interface: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller (rev 03) 00:1f.3 SMBus: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller (rev 03) 01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility X700 (PCIE) 06:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5705_2 Gigabit Ethernet (rev 03) 06:04.0 Network controller: Intel Corporation PRO/Wireless 2200BG Network Connection (rev 05) 06:09.0 CardBus bridge: Texas Instruments PCIxx21/x515 Cardbus Controller 06:09.2 FireWire (IEEE 1394): Texas Instruments OHCI Compliant IEEE 1394 Host Controller 06:09.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller 06:09.4 Class 0805: Texas Instruments PCI6411/6421/6611/6621/7411/7421/7611/7621 Secure Digital Controller slacktop ~ # slacktop ~ # uname -a Linux slacktop 2.6.21.3 #1 Tue Jun 26 18:04:57 PDT 2007 i686 Intel(R) Pentium(R) M processor 1.73GHz GenuineIntel GNU/Linux slacktop ~ # Let me know what info i can provide to assist in troubleshooting.... I know that this is not the only bug that you are working on but have you had a chance to investigate the problem any more? Could you please check if unloading of psmouse before STR and loading it back after changes the situation? Alexey, Thank you for the quick reply i have tested before removing the psmouse modules and reloading and i still have the problem, but for good measure i tried to remove and reload again and i am still having the same issue. Please let me know if there is anything else that i can provide to you. Created attachment 11985 [details]
Don't enable EC GPE for every transaction.
It was mentioned earlier that commenting out this line helps. Please try.
So i tried to apply the patch that you sent first and it errors out (see below) So i tested applying the first patch (Enable runtime GPEs before calling _WAK method) like this cd /usr/src/linux wget 'http://bugzilla.kernel.org/attachment.cgi?id=11338&action=view' -O GPE1.patch patch -p1 < GPE1.patch then make && make modules modules_install install Then reboot then exho 'mem' > /sys/power/state Then wake up the laptop and everything but the touchpad works. I then tried to apply the patch that you recomended and i receive the following message slacktop linux # patch -p1 < GPE.patch patching file drivers/acpi/ec.c Hunk #1 FAILED at 240. 1 out of 1 hunk FAILED -- saving rejects to file drivers/acpi/ec.c.rej Here is the content of the .rej file *************** *** 240,248 **** } } /* Make sure GPE is enabled before doing transaction */ acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR); - status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, 0, 0); if (status) { printk(KERN_DEBUG PREFIX --- 240,249 ---- } } + #if 0 /* Make sure GPE is enabled before doing transaction */ acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR); + #endif status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, 0, 0); if (status) { printk(KERN_DEBUG PREFIX ~ Am I doing somthing wroing with the patch? Alexey, Any more info that you need from me? i would really love to have STR working on my laptop. 1c55053c21706ccf1fdb26b4bb6d05c4a2782ffe (ACPI: EC: Don't re-enable GPE for each transaction.) shipped in Linux-2.6.24-rc1-git6 Please re-open if still an issue in that release or later. is this supposed to be working with pm-utils? if i suspend-to-ram and come back my synaptics touchpad isn't working any more. nt@defiler $ uname -a Linux defiler 2.6.26-ARCH #1 SMP PREEMPT Tue Sep 9 10:15:21 UTC 2008 i686 AMD Turion(tm) 64 Mobile Technology MT-30 AuthenticAMD GNU/Linux |