All of lore.kernel.org
 help / color / mirror / Atom feed
From: William Lee Irwin III <wli@holomorphy.com>
To: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: linux-kernel@vger.kernel.org, Martin.Bligh@us.ibm.com,
	akpm@zip.com.au, greg@kroah.com
Subject: Re: pci_child_fixup()
Date: Mon, 20 Jan 2003 04:53:09 -0800	[thread overview]
Message-ID: <20030120125309.GB15315@holomorphy.com> (raw)
In-Reply-To: <20030120145754.A912@jurassic.park.msu.ru>

On Sun, Jan 19, 2003 at 07:52:17PM -0800, William Lee Irwin III wrote:
>>  		child = pci_add_new_bus(bus, dev, 0);
>> -		child->primary = buses & 0xFF;
>> -		child->secondary = (buses >> 8) & 0xFF;
>> -		child->subordinate = (buses >> 16) & 0xFF;
>> -		child->number = child->secondary;
>> +		pci_child_fixup(bus, child, buses);

On Mon, Jan 20, 2003 at 02:57:54PM +0300, Ivan Kokshaysky wrote:
> The "bus" argument seems to be redundant. Why not use "child->parent"
> just filled in by pci_add_new_bus() instead?
> Ivan.

Good point. Here's an adjusted patch. I added gregkh to the cc: list
in case he's interested (he generally seems to be wrt. PCI).


Thanks,
Bill


The NUMA-Q BIOS reports bus numbers different from the physical ones
programmed into PCI-PCI bridges etc. PCI config cycles (and almost
everything else) are meant to use translation tables handed to us by
the BIOS. No other extant i386 port has such a beast, and there's
currently no way to override bus numbers gotten from bus number
registers in a meaningful way; bus number conflicts error out prior to
any call into arch code. All of the IRQ routing, interrupt assignment,
IO-APIC, PCI bus, etc. etc. MP table entries use these numbers, so we're
stuck with them.

This provides a fixup hook so it's possible to override the standard
interpretation of the bus number registers in PCI-PCI bridges.

 arch/i386/pci/numa.c   |    9 +++++++++
 drivers/pci/probe.c    |    5 +----
 include/asm-i386/pci.h |   11 +++++++++++
 3 files changed, 21 insertions(+), 4 deletions(-)


diff -urpN mpc-2.5.59-1/arch/i386/pci/numa.c mpc-2.5.59-2/arch/i386/pci/numa.c
--- mpc-2.5.59-1/arch/i386/pci/numa.c	2003-01-19 19:01:38.000000000 -0800
+++ mpc-2.5.59-2/arch/i386/pci/numa.c	2003-01-20 04:37:02.000000000 -0800
@@ -88,6 +88,15 @@ static struct pci_ops pci_direct_conf1_m
 	.write	= pci_conf1_mq_write
 };
 
+void pci_child_fixup(struct pci_bus *child, int buses)
+{
+	int quad = BUS2QUAD(child->parent->number);
+	child->primary		= QUADLOCAL2BUS(quad, buses         & 0xFF);
+	child->secondary	= QUADLOCAL2BUS(quad, (buses >> 8)  & 0xFF);
+	child->subordinate	= QUADLOCAL2BUS(quad, (buses >> 16) & 0xFF);
+	child->number		= child->secondary;
+}
+
 
 static void __devinit pci_fixup_i450nx(struct pci_dev *d)
 {
diff -urpN mpc-2.5.59-1/drivers/pci/probe.c mpc-2.5.59-2/drivers/pci/probe.c
--- mpc-2.5.59-1/drivers/pci/probe.c	2003-01-16 18:22:24.000000000 -0800
+++ mpc-2.5.59-2/drivers/pci/probe.c	2003-01-20 04:37:32.000000000 -0800
@@ -271,10 +271,7 @@ int __devinit pci_scan_bridge(struct pci
 		if (pass)
 			return max;
 		child = pci_add_new_bus(bus, dev, 0);
-		child->primary = buses & 0xFF;
-		child->secondary = (buses >> 8) & 0xFF;
-		child->subordinate = (buses >> 16) & 0xFF;
-		child->number = child->secondary;
+		pci_child_fixup(child, buses);
 		cmax = pci_do_scan_bus(child);
 		if (cmax > max) max = cmax;
 	} else {
diff -urpN mpc-2.5.59-1/include/asm-i386/pci.h mpc-2.5.59-2/include/asm-i386/pci.h
--- mpc-2.5.59-1/include/asm-i386/pci.h	2003-01-16 18:22:04.000000000 -0800
+++ mpc-2.5.59-2/include/asm-i386/pci.h	2003-01-20 04:39:12.000000000 -0800
@@ -100,6 +100,17 @@ static inline int pci_controller_num(str
 extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
 			       enum pci_mmap_state mmap_state, int write_combine);
 
+#ifdef CONFIG_X86_NUMAQ
+void pci_child_fixup(struct pci_bus *, int);
+#else
+static inline void pci_child_fixup(struct pci_bus *child, int buses)
+{
+	child->primary		= buses & 0xFF;
+	child->secondary	= (buses >> 8) & 0xFF;
+	child->subordinate	= (buses >> 16) & 0xFF;
+	child->number		= child->secondary;
+}
+#endif
 #endif /* __KERNEL__ */
 
 /* implement the pci_ DMA API in terms of the generic device dma_ one */

      reply	other threads:[~2003-01-20 12:44 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-01-20  3:52 pci_child_fixup() William Lee Irwin III
2003-01-20 11:57 ` pci_child_fixup() Ivan Kokshaysky
2003-01-20 12:53   ` William Lee Irwin III [this message]

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=20030120125309.GB15315@holomorphy.com \
    --to=wli@holomorphy.com \
    --cc=Martin.Bligh@us.ibm.com \
    --cc=akpm@zip.com.au \
    --cc=greg@kroah.com \
    --cc=ink@jurassic.park.msu.ru \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.