Re: [PATCH 0/4] Fix forcedeth hibernate/wake-on-lan problems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Tobias Diedrich wrote:> Tobias Diedrich wrote:> > Tobias Diedrich wrote:> > > So my BIOS is not as borked as I thought and it should be possible> > > to wake up the machine even with platform.  Further debugging will> > > have to wait until at least next weekend though (maybe longer)...> > > > Or maybe it doesn't have to wait, I was just too curious:> > > > Summary first: I got platform mode to work!> > > > After grepping and reading through kernel/power/disk.c and> > (rather obfuscated) drivers/acpi/.* code, and reading up on> > ACPI _GPE (General Purpose Event?), and having a look at my DSDT I> > noticed two things:> > > > 1) The network controllers are assigned to their own _GPE bits(pins?):> > |[...]> > |    Scope (\_GPE)> > |    {> > |[...]> > |        Method (_L0B, 0, NotSerialized)> > |        {> > |            Notify (\_SB.PCI0.MMAC, 0x02)> > |        }> > |> > |        Method (_L0A, 0, NotSerialized)> > |        {> > |            Notify (\_SB.PCI0.MAC1, 0x02)> > |        }> > |[...]> > > > 2) drivers/acpi/sleep/proc.c registers a 'wakeup' file:> > |        proc_create("wakeup", S_IFREG | S_IRUGO | S_IWUSR,> > |                    acpi_root_dir, &acpi_system_wakeup_device_fops);> > > > And I then remembered that someone said in> > http://bugzilla.kernel.org/show_bug.cgi?id=8381> > it works for him if he writes $MAGICVALUE into a proc file.> > > > And yes, if I write 'MMAC' and 'MAC1' into /proc/acpi/wakeup, then> > wake-on-lan works even in platform mode.> > > > So...> > AFAICS this bit of setup magic should not be required, because:> > > > 1) /proc/acpi/wakeup knows which pci device is associated to each GPE bit> > |ranma@melchior:~$ cat /proc/acpi/wakeup > > |Device	S-state	  Status   Sysfs node> > |HUB0	  S5	 disabled  pci:0000:00:06.0> > |XVR0	  S5	 disabled  > > |XVR1	  S5	 disabled  pci:0000:00:0e.0> > |XVR2	  S5	 disabled  > > |XVR3	  S5	 disabled  > > |XVR4	  S5	 disabled  > > |XVR5	  S5	 disabled  pci:0000:00:0a.0> > |UAR1	  S5	 disabled  pnp:00:09> > |PS2K	  S4	 disabled  pnp:00:0b> > |USB0	  S4	 disabled  pci:0000:00:02.0> > |USB2	  S4	 disabled  pci:0000:00:02.1> > |AZAD	  S5	 disabled  pci:0000:00:06.1> > |MMAC	  S5	 enabled   pci:0000:00:08.0> > |MAC1	  S5	 enabled   pci:0000:00:09.0> > (values after manually enabling MMAC and MAC1)> > > > 2) kernel/power/disk.c calls hibernation_ops->enter(), which is> > acpi_suspend_enter, which calls acpi_enable_wakeup_device, which> > sets up GPE wakup bits.  This _should_ take care of enabling MMAC> > and MAC1 automatically, but apparently does not work correctly at> > some point.> > > > I guess someone more knowledgable in ACPI stuff should have a look> > at this.> > Any reason this patch hasn't made it into the kernel so far?> http://lists.laptop.org/pipermail/devel/2007-April/004691.html> > (Ok, I tried getting it to apply to a current kernel, but it> a splodes (reboots instead of powering off, last message on the> serial console is "ACPI handle has no context!", see below))> > The platform_enable_wakeup() hook is still there, but unused.> AFAICS this patch should solve the "'ethtool -s eth0 wol g' doesn't> suffice, I also have to write magic values into /proc/acpi/wakeup"> issue.
Ok, after another long debugging session I finally found out thereason for the immediate reboot (after finding the place thatsuspends the serial console (drivers/pnp) and disabling that suspendpath):The system is woken up by USB activity! (Optical mouse, anyone?)
Lo and behold:drivers/usb/core/hcd-pci.c tries it's best to activate 'wake onusb', which I didn't know since it apparently also never worked.However, after applying the 'use platform_enable_wakeup'-patch,not only forcedeth wake starts working, also usb wake.If I prevent usb wake:|echo disabled > /sys/devices/pci0000\:00/0000\:00\:02.0/power/wakeup'|echo disabled > /sys/devices/pci0000\:00/0000\:00\:02.1/power/wakeup'And then hibernate in platform mode, the immediate reboot is goneand waking up using magic packets works fine even without setting up/proc/acpi/wakeup first.
Maybe I should try hooking mouse and keyboard onto different usbhost controllers, so I can disable wakeup for the mouse hostcontroller and enable wakeup for the keyboard host controller,then it should be possible to wake the system by pressing a key. :)
-- Tobias						PGP: http://9ac7e0bc.uguu.deこのメールは十割再利用されたビットで作られています。_______________________________________________linux-pm mailing listlinux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx://lists.linux-foundation.org/mailman/listinfo/linux-pm


[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux