From: Russell King <rmk+lkml@arm.linux.org.uk>
To: Grant Grundler <grundler@parisc-linux.org>
Cc: "John W. Linville" <linville@tuxdriver.com>,
linux-pci@atrey.karlin.mff.cuni.cz,
linux-pm <linux-pm@lists.osdl.org>,
linux-kernel@vger.kernel.org, Greg KH <greg@kroah.com>,
Adam Belay <ambx1@neo.rr.com>
Subject: Re: [patch 2.6.12 (repost w/ corrected subject)] pci: restore BAR values in pci_enable_device_bars
Date: Sat, 2 Jul 2005 09:09:13 +0100 [thread overview]
Message-ID: <20050702090913.B1506@flint.arm.linux.org.uk> (raw)
In-Reply-To: <20050702072954.GA14091@colo.lackof.org>; from grundler@parisc-linux.org on Sat, Jul 02, 2005 at 01:29:54AM -0600
On Sat, Jul 02, 2005 at 01:29:54AM -0600, Grant Grundler wrote:
> 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.
That's contary to the assumptions made by setup-res.c. BAR0 is
dev->resource[0]. If that resource is 64-bit, dev->resource[1]
is unused and the next resource is dev->resource[2].
> > + 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;
Are you sure you mean >> 4 ? Don't you mean >> 32 ? Note again that
setup-res.c writes zero unconditionally here.
The PCI subsystem is incomplete for 64-bit BAR support. What it does
do though is ensure that 64-bit BARs will work correctly in a 32-bit
system. Therefore, I think that folk who want 64-bit BAR support to
work need to do some code reviews on the PCI subsystem to resolve the
remaining issues.
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 Serial core
next prev parent reply other threads:[~2005-07-02 8:10 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 [this message]
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
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=20050702090913.B1506@flint.arm.linux.org.uk \
--to=rmk+lkml@arm.linux.org.uk \
--cc=ambx1@neo.rr.com \
--cc=greg@kroah.com \
--cc=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 \
/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;
as well as URLs for NNTP newsgroup(s).