From: Jeff Garzik <jgarzik@pobox.com>
To: "John W. Linville" <linville@tuxdriver.com>
Cc: linux-kernel@vger.kernel.org, linux-pci@atrey.karlin.mff.cuni.cz,
linux-pm@lists.osdl.org, torvalds@osdl.org, akpm@osdl.org,
ink@jurassic.park.msu.ru, kaos@sgi.com, greg@kroah.com,
davem@davemloft.net, rmk+lkml@arm.linux.org.uk, matthew@wil.cx,
grundler@parisc-linux.org, ambx1@neo.rr.com
Subject: Re: [patch 2.6.14-rc1] pci: only call pci_restore_bars at boot
Date: Wed, 14 Sep 2005 11:08:12 -0400 [thread overview]
Message-ID: <43283CDC.3070603@pobox.com> (raw)
In-Reply-To: <09142005095242.32027@bilbo.tuxdriver.com>
John W. Linville wrote:
> Certain (SGI?) ia64 boxes object to having their PCI BARs
> restored unless absolutely necessary. This patch restricts calling
> pci_restore_bars from pci_set_power_state unless the current state
> is PCI_UNKNOWN, the actual (i.e. physical) state of the device is
> PCI_D3hot, and the device indicates that it will lose its configuration
> when transitioning to PCI_D0.
>
> Signed-off-by: John W. Linville <linville@tuxdriver.com>
> ---
> Many thanks to Keith Owens <kaos@sgi.com> for a) narrowing-down the
> problem; and, b) quickly testing the fix and reporting the results.
>
> drivers/pci/pci.c | 16 ++++++++++++----
> 1 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -309,17 +309,25 @@ pci_set_power_state(struct pci_dev *dev,
>
> pci_read_config_word(dev, pm + PCI_PM_CTRL, &pmcsr);
>
> - /* If we're in D3, force entire word to 0.
> + /* If we're (effectively) in D3, force entire word to 0.
> * This doesn't affect PME_Status, disables PME_En, and
> * sets PowerState to 0.
> */
> - if (dev->current_state >= PCI_D3hot) {
> - if (!(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET))
> + switch (dev->current_state) {
> + case PCI_UNKNOWN: /* Boot-up */
> + if ((pmcsr & PCI_PM_CTRL_STATE_MASK) == PCI_D3hot
> + && !(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET))
> need_restore = 1;
> + /* Fall-through: force to D0 */
> + case PCI_D3hot:
> + case PCI_D3cold:
> + case PCI_POWER_ERROR:
> pmcsr = 0;
> - } else {
> + break;
> + default:
> pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
> pmcsr |= state;
> + break;
This seems like it will break a lot of stuff that -does- need the BARs
restored when resuming from D3.
Jeff
next prev parent reply other threads:[~2005-09-14 15:08 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-06-23 19:14 [RFC] firmware leaves device in D3hot at boot John W. Linville
2005-06-24 2:28 ` John W. Linville
2005-06-30 17:10 ` Greg KH
2005-07-01 1:41 ` John W. Linville
2005-07-01 2:26 ` [patch 2.6.12] pci: restore BAR values in pci_enable_device John W. Linville
2005-07-01 2:26 ` [patch 2.6.12 (repost w/ corrected subject)] pci: restore BAR values in pci_enable_device_bars John W. Linville
2005-07-02 7:29 ` Grant Grundler
2005-07-02 8:09 ` Russell King
2005-07-05 20:05 ` Matthew Wilcox
2005-07-05 21:46 ` Russell King
2005-07-05 23:34 ` Ivan Kokshaysky
2005-07-06 7:46 ` Russell King
2005-07-08 0:57 ` John W. Linville
2005-07-08 0:59 ` [patch 2.6.13-rc2] pci: restore BAR values in pci_set_power_state for D3hot->D0 John W. Linville
2005-07-08 3:43 ` [linux-pm] " david-b
2005-07-08 12:37 ` John W. Linville
2005-07-08 3:11 ` [patch 2.6.12 (repost w/ corrected subject)] pci: restore BAR values in pci_enable_device_bars David S. Miller
2005-07-08 5:51 ` Ivan Kokshaysky
2005-07-08 6:35 ` David S. Miller
2005-07-08 7:03 ` Ivan Kokshaysky
2005-07-08 7:33 ` David S. Miller
2005-07-08 8:20 ` Ivan Kokshaysky
2005-07-08 18:34 ` [patch 2.6.13-rc2] pci: restore BAR values from pci_set_power_state for D3hot->D0 John W. Linville
2005-07-08 19:08 ` David S. Miller
2005-07-10 17:53 ` Ivan Kokshaysky
2005-07-11 12:48 ` Lennert Buytenhek
2005-07-11 13:15 ` John W. Linville
2005-07-11 13:19 ` [patch 2.6.13-rc2] PCI: Add symbol exports for pci_restore_bars John W. Linville
2005-07-11 17:18 ` Greg KH
2005-07-11 17:36 ` John W. Linville
2005-07-11 17:38 ` [patch 2.6.13-rc2] PCI: Add GPL symbol export " John W. Linville
2005-07-12 2:28 ` [patch 2.6.13-rc2] pci: restore BAR values from pci_set_power_state for D3hot->D0 Adam Belay
2005-07-13 17:34 ` John W. Linville
2005-07-26 23:49 ` Greg KH
2005-07-27 1:36 ` John W. Linville
2005-07-27 14:12 ` John W. Linville
2005-07-27 14:19 ` [patch 2.6.13-rc3] pci: restore BAR values after D3hot->D0 for devices that need it John W. Linville
2005-07-31 19:36 ` Ralf Baechle
2005-08-02 17:31 ` Greg KH
2005-08-02 16:41 ` Jesse Brandeburg
2005-09-14 13:52 ` [patch 2.6.14-rc1] pci: only call pci_restore_bars at boot John W. Linville
2005-09-14 15:08 ` Jeff Garzik [this message]
2005-09-14 16:26 ` David S. Miller
2005-09-14 16:47 ` John W. Linville
2005-09-14 18:22 ` Ivan Kokshaysky
2005-07-05 17:46 ` [patch 2.6.12 (repost w/ corrected subject)] pci: restore BAR values in pci_enable_device_bars John W. Linville
2005-07-18 12:17 ` Grant Grundler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43283CDC.3070603@pobox.com \
--to=jgarzik@pobox.com \
--cc=akpm@osdl.org \
--cc=ambx1@neo.rr.com \
--cc=davem@davemloft.net \
--cc=greg@kroah.com \
--cc=grundler@parisc-linux.org \
--cc=ink@jurassic.park.msu.ru \
--cc=kaos@sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@atrey.karlin.mff.cuni.cz \
--cc=linux-pm@lists.osdl.org \
--cc=linville@tuxdriver.com \
--cc=matthew@wil.cx \
--cc=rmk+lkml@arm.linux.org.uk \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox