From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759225AbYHON3Z (ORCPT ); Fri, 15 Aug 2008 09:29:25 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758768AbYHON27 (ORCPT ); Fri, 15 Aug 2008 09:28:59 -0400 Received: from ogre.sisk.pl ([217.79.144.158]:59681 "EHLO ogre.sisk.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758899AbYHON25 (ORCPT ); Fri, 15 Aug 2008 09:28:57 -0400 From: "Rafael J. Wysocki" To: Stephen Hemminger Subject: Re: [PATCH 2/3] Adapt the sky2 driver to the reworked PCI PM Date: Fri, 15 Aug 2008 15:32:13 +0200 User-Agent: KMail/1.9.6 (enterprise 20070904.708012) Cc: netdev@vger.kernel.org, Andrew Morton , Jeff Garzik , Jesse Barnes , LKML , pm list , "Brandeburg, Jesse" , Stephen Hemminger References: <200808142335.56644.rjw@sisk.pl> <20080814152318.625f8609@extreme> <200808151501.58315.rjw@sisk.pl> In-Reply-To: <200808151501.58315.rjw@sisk.pl> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200808151532.14327.rjw@sisk.pl> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Friday, 15 of August 2008, Rafael J. Wysocki wrote: > On Friday, 15 of August 2008, Stephen Hemminger wrote: > > On Thu, 14 Aug 2008 23:38:17 +0200 > > "Rafael J. Wysocki" wrote: > > > > > Adapt the sky2 driver to the reworked PCI PM > > > > > > * Use device_set_wakeup_enable() and friends as needed > > > * Remove an open-coded reference to the standard PCI PM registers > > > * Use pci_prepare_to_sleep() and pci_back_from_sleep() in the > > > ->suspend() and ->resume() callbacks > > > * Use the observation that it is sufficient to call pci_enable_wake() > > > once, unless it fails > > > > > > Tested on Asus M3A32-MVP (Yukon-2 EC Ultra rev 3). > > > > > > Signed-off-by: Rafael J. Wysocki > > > --- > > > drivers/net/sky2.c | 34 ++++++++++------------------------ > > > 1 file changed, 10 insertions(+), 24 deletions(-) > > > > > > Index: linux-2.6/drivers/net/sky2.c > > > =================================================================== > > > --- linux-2.6.orig/drivers/net/sky2.c > > > +++ linux-2.6/drivers/net/sky2.c > > > @@ -3035,7 +3035,8 @@ static int sky2_set_wol(struct net_devic > > > struct sky2_port *sky2 = netdev_priv(dev); > > > struct sky2_hw *hw = sky2->hw; > > > > > > - if (wol->wolopts & ~sky2_wol_supported(sky2->hw)) > > > + if ((wol->wolopts & ~sky2_wol_supported(sky2->hw)) > > > + || !device_can_wakeup(&hw->pdev->dev)) > > > return -EOPNOTSUPP; > > > > > > > There was a regression in earlier releases caused because some BIOS's > > are wrong, and device can wakeup. > > device_can_wakeup() returns 'true' if the device is capable of generating PME# > from at least one low power state (this is determined on the basis of the > contents of the device's PCI PM registers - please have a look at > drivers/pci/pci_pm_init() for details) or if ACPI tells us it can wake up. > IOW, the BIOSes opinion doesn't matter if we find that the device is capable of > generating PME#, so the regression must have been related to something else. > I'm very interested in the details, if available. > > Of course, since we rely on the ability of the device to generate PME# and > device_can_wakeup() returning 'false' means that the device cannot generate > PME# from any state, it's reasonable to check it IMO. BTW, if device_can_wakeup(&pdev->dev) returns 'false', pci_enable_wake(pdev, state, true) will fail for any 'state', so the wake-up won't work regardless of the change above. Thanks, Rafael