Skip to content

Commit

Permalink
pci: Add a probing code that seeks for an specific bus
Browse files Browse the repository at this point in the history
This patch adds a probing code that seeks for an specific pci bus. It
still needs testing, but it is hoped that this will help to identify the
memory controller with Xeon 55xx series.

Signed-off-by: Aristeu Sergio <arozansk@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Aristeu Rozanski authored and Mauro Carvalho Chehab committed May 10, 2010
1 parent e9bd2e7 commit 5707b24
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 17 deletions.
2 changes: 2 additions & 0 deletions arch/x86/include/asm/pci_x86.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ extern int pcibios_last_bus;
extern struct pci_bus *pci_root_bus;
extern struct pci_ops pci_root_ops;

void pcibios_scan_specific_bus(int busn);

/* pci-irq.c */

struct irq_info {
Expand Down
42 changes: 25 additions & 17 deletions arch/x86/pci/legacy.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,14 @@
*/
static void __devinit pcibios_fixup_peer_bridges(void)
{
int n, devfn;
long node;
int n;

if (pcibios_last_bus <= 0 || pcibios_last_bus > 0xff)
return;
DBG("PCI: Peer bridge fixup\n");

for (n=0; n <= pcibios_last_bus; n++) {
u32 l;
if (pci_find_bus(0, n))
continue;
node = get_mp_bus_to_node(n);
for (devfn = 0; devfn < 256; devfn += 8) {
if (!raw_pci_read(0, n, devfn, PCI_VENDOR_ID, 2, &l) &&
l != 0x0000 && l != 0xffff) {
DBG("Found device at %02x:%02x [%04x]\n", n, devfn, l);
printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n);
pci_scan_bus_on_node(n, &pci_root_ops, node);
break;
}
}
}
for (n=0; n <= pcibios_last_bus; n++)
pcibios_scan_specific_bus(n);
}

int __init pci_legacy_init(void)
Expand All @@ -49,6 +35,28 @@ int __init pci_legacy_init(void)

return 0;
}
EXPORT_SYMBOL_GPL(pci_legacy_init);

void pcibios_scan_specific_bus(int busn)
{
int devfn;
long node;
u32 l;

if (pci_find_bus(0, busn))
return;

node = get_mp_bus_to_node(busn);
for (devfn = 0; devfn < 256; devfn += 8) {
if (!raw_pci_read(0, busn, devfn, PCI_VENDOR_ID, 2, &l) &&
l != 0x0000 && l != 0xffff) {
DBG("Found device at %02x:%02x [%04x]\n", busn, devfn, l);
printk(KERN_INFO "PCI: Discovered peer bus %02x\n", busn);
pci_scan_bus_on_node(busn, &pci_root_ops, node);
return;
}
}
}

int __init pci_subsys_init(void)
{
Expand Down

0 comments on commit 5707b24

Please sign in to comment.