From: David Miller <davem@davemloft.net>
To: jesse.barnes@intel.com
Cc: eiichiro.oiwa.nm@hitachi.com, alan@redhat.com, greg@kroah.com,
linux-kernel@vger.kernel.org
Subject: Re: pci_fixup_video change blows up on sparc64
Date: Thu, 19 Oct 2006 15:58:44 -0700 (PDT) [thread overview]
Message-ID: <20061019.155844.18310932.davem@davemloft.net> (raw)
In-Reply-To: <200610191103.16689.jesse.barnes@intel.com>
From: Jesse Barnes <jesse.barnes@intel.com>
Date: Thu, 19 Oct 2006 11:03:11 -0700
> On Thursday, October 19, 2006 3:01 am, eiichiro.oiwa.nm@hitachi.com
> wrote:
> > >> If an expansion ROM exists on ATI Radeon or ATY128 card,
> > >> pci_map_rom returns the expansion ROM base address instead of
> > >> 0xC0000 because fixup_video checks the VGA Enable bit in the
> > >> Bridge Control register.
> > >
> > >It is not valid to expect the bridge control register to return
> > >anything meaningful on PCI "host bridge". The Radeon card here sits
> > >on the root, just under the PCI Host Controller. The code in
> > >fixup_video appears to assume that every bus up to the root from
> > >the VGA device is a PCI-PCI bridge, which is not a valid assumption.
> > >There can be a PCI host bridge at the root.
> >
> > Have you ever read the PCI-to-PCI Bridge Architecture Specification?
> > The default of VGA Enable bit is 0. This mean video ROM doesn't
> > forward system RAM at 0xC0000.
> >
> > There is your VGA card under 0001:00:00.0 Host bridge. The VGA Enable
> > bit in this host bridge will return 0 and IORESOURCE_ROM_SHADOW won't
> > set.
>
> I don't think that applies to host->pci bridges though, all bets are off
> as to how their bits are defined.
Yep, that's exactly what I was trying to say.
This is also why the rest of the kernel PCI code, and even things
like "lspci" from PCI utils do not print out the bridge control
register for host->pci bridges. It's contents are %100 undefined
for host->pci bridges, yet this pci_fixup_video() code is testing
those bits without checking what kind of bridge it is looking at.
> One check that might make this feature a bit more robust is to look
> for a real PCI ROM on the device. If present, we probably don't
> need to bother with the system copy (which probably won't be there
> anyway).
>
> We should probably also check whether the parent bridge of the device to
> be fixed up is a real pci->pci bridge (if possible). That would remove
> some ambiguity that's likely to cause problems with other platforms
> too.
At the core of this is the "definition" that 0xc0000 is a location in
physical RAM that the video ROM might be stored. While this might
be a %100 valid definition on IA64, x86 and x86_64, it simply is not
on other platforms such as sparc64.
In fact even the existence of any RAM at all at that address is
not guarenteed. I have a few systems where physical RAM starts
at some high physical address, such as 0x80000000.
Even if presence were guarenteed, you can't access this memory using
ioremap() and things like readl() and friends, which is exactly what
callers of pci_map_rom() are doing. Accesses using readl() use
non-cacheable transactions which result in bus errors, and furthermore
the first argument to ioremap() is not a physical address, it's an
architecture-defined "address cookie" that must be setup by platforms
specific code.
next prev parent reply other threads:[~2006-10-19 22:58 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-19 6:31 David Miller
2006-10-19 7:54 ` eiichiro.oiwa.nm
2006-10-19 8:37 ` pci_fixup_video " David Miller
2006-10-19 9:22 ` Alan Cox
2006-10-19 9:25 ` David Miller
2006-10-19 10:49 ` eiichiro.oiwa.nm
2006-10-19 22:32 ` David Miller
2006-10-20 2:41 ` Greg KH
2006-10-20 3:21 ` eiichiro.oiwa.nm
2006-10-20 4:03 ` Greg KH
2006-10-20 4:28 ` eiichiro.oiwa.nm
2006-10-20 14:20 ` eiichiro.oiwa.nm
2006-10-20 19:31 ` David Miller
2006-10-23 6:14 ` eiichiro.oiwa.nm
2006-10-23 8:53 ` David Miller
2006-10-23 18:39 ` Greg KH
2006-10-23 21:02 ` David Miller
2006-10-27 18:05 ` patch pci-fix-pci_fixup_video-as-it-blows-up-on-sparc64.patch added to gregkh-2.6 tree gregkh
2006-10-19 10:01 ` Re[2]: pci_fixup_video change blows up on sparc64 eiichiro.oiwa.nm
2006-10-19 11:20 ` Alan Cox
2006-10-19 11:38 ` eiichiro.oiwa.nm
2006-10-19 18:03 ` Jesse Barnes
2006-10-19 22:58 ` David Miller [this message]
2006-10-20 2:57 ` eiichiro.oiwa.nm
2006-10-20 3:21 ` David Miller
2006-10-20 4:25 ` Re[2]: " eiichiro.oiwa.nm
2006-10-19 16:52 ` Jesse Barnes
2006-10-19 22:38 ` David Miller
2006-10-19 22:58 ` Jesse Barnes
2006-10-19 23:17 ` David Miller
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=20061019.155844.18310932.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=alan@redhat.com \
--cc=eiichiro.oiwa.nm@hitachi.com \
--cc=greg@kroah.com \
--cc=jesse.barnes@intel.com \
--cc=linux-kernel@vger.kernel.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
Powered by JetHome