From: Grant Grundler <grundler@parisc-linux.org>
To: "John W. Linville" <linville@tuxdriver.com>
Cc: linux-pm <linux-pm@lists.osdl.org>,
linux-pci@atrey.karlin.mff.cuni.cz,
Russell King <rmk@arm.linux.org.uk>,
linux-kernel@vger.kernel.org
Subject: Re: [patch 2.6.12 (repost w/ corrected subject)] pci: restore BAR values in pci_enable_device_bars
Date: Sat, 2 Jul 2005 01:29:54 -0600 [thread overview]
Message-ID: <20050702072954.GA14091@colo.lackof.org> (raw)
In-Reply-To: <20050701022634.GA5629.1@tuxdriver.com>
[-- Attachment #1: Type: text/plain, Size: 2224 bytes --]
On Thu, Jun 30, 2005 at 10:26:37PM -0400, John W. Linville wrote:
...
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -378,9 +378,56 @@ pci_restore_state(struct pci_dev *dev)
> int
> pci_enable_device_bars(struct pci_dev *dev, int bars)
> {
> - int err;
> + int i, numres, err;
>
> pci_set_power_state(dev, PCI_D0);
> +
> + /* Some devices lose PCI config header data during D3hot->D0
Can you name some of those devices here?
I just want to know what sort of devices need to be tested
if this code changes in the future.
> + transition. Since some firmware leaves devices in D3hot
> + state at boot, this information needs to be restored.
Again, which firmware?
Examples are good since it makes it possible to track down
the offending devices for testing.
The following chunk looks like it will have issues with 64-bit BARs:
...
> + for (i = 0; i < numres; i ++) {
> + struct pci_bus_region region;
> + u32 val;
> + int reg;
...
> + val = region.start
> + | (dev->resource[i].flags & PCI_REGION_FLAG_MASK);
> +
> + reg = PCI_BASE_ADDRESS_0 + (i * 4);
ISTR dev->resource[i] doesn't necessarily correspond directly BAR[i].
If BAR0 is a 64-bit BAR, then dev->resource[1] will point at BAR2.
I'm not sure how to fix this since I'm not quite sure where
state is being saved off from.
> + pci_write_config_dword(dev, reg, val);
> +
> + if ((val & (PCI_BASE_ADDRESS_SPACE
> + | PCI_BASE_ADDRESS_MEM_TYPE_MASK))
> + == (PCI_BASE_ADDRESS_SPACE_MEMORY
> + | PCI_BASE_ADDRESS_MEM_TYPE_64)) {
> + pci_write_config_dword(dev, reg + 4, 0);
64-bit BARs need the upper half of dev->resource[] written.
I expect something like:
val = region.start >> 4;
pci_write_config_dword(dev, reg + 4, val);
This should put zero in the upper 32-bit if it's only a 32-bit value.
I suspect "i" needs to be split into two indices: one for dev->resource[]
and another for offset into PCI config space (BARs).
But it really depends on how dev->resource[] maps to the BARs.
hth,
grant
> + }
> + }
> +
> if ((err = pcibios_enable_device(dev, bars)) < 0)
> return err;
> return 0;
> --
> John W. Linville
> linville@tuxdriver.com
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
next prev parent reply other threads:[~2005-07-02 7:29 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 (repost w/ corrected subject)] pci: restore BAR values in pci_enable_device_bars John W. Linville
2005-07-02 7:29 ` Grant Grundler [this message]
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
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
2005-07-01 2:26 ` [patch 2.6.12] pci: restore BAR values in pci_enable_device John W. Linville
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=20050702072954.GA14091@colo.lackof.org \
--to=grundler@parisc-linux.org \
--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=rmk@arm.linux.org.uk \
/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