From: Stephen Rothwell <sfr@canb.auug.org.au>
To: paulus@samba.org
Cc: ppc-dev <linuxppc-dev@ozlabs.org>
Subject: [PATCH 08/14] powerpc: clean up iSeries PCI probe
Date: Fri, 19 May 2006 16:54:42 +1000 [thread overview]
Message-ID: <20060519165442.75e40d7c.sfr@canb.auug.org.au> (raw)
In-Reply-To: <20060519164249.2dc43bc4.sfr@canb.auug.org.au>
Only scan the host bridges and then use the existing pci_devs_phb_init()
routine.
Also fix typo in setup of reg property.
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
arch/powerpc/kernel/pci_dn.c | 6 +++++
arch/powerpc/platforms/iseries/pci.c | 42 +++++++++++---------------------
arch/powerpc/platforms/iseries/setup.c | 2 +-
3 files changed, 21 insertions(+), 29 deletions(-)
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
979e33e7df3519bb4bbc550ad7e52b5ad2b30221
diff --git a/arch/powerpc/kernel/pci_dn.c b/arch/powerpc/kernel/pci_dn.c
index 12c4c9e..1c18953 100644
--- a/arch/powerpc/kernel/pci_dn.c
+++ b/arch/powerpc/kernel/pci_dn.c
@@ -31,6 +31,7 @@ #include <asm/prom.h>
#include <asm/pci-bridge.h>
#include <asm/pSeries_reconfig.h>
#include <asm/ppc-pci.h>
+#include <asm/firmware.h>
/*
* Traverse_func that inits the PCI fields of the device node.
@@ -59,6 +60,11 @@ static void * __devinit update_dn_pci_in
pdn->busno = (regs[0] >> 16) & 0xff;
pdn->devfn = (regs[0] >> 8) & 0xff;
}
+ if (firmware_has_feature(FW_FEATURE_ISERIES)) {
+ u32 *busp = (u32 *)get_property(dn, "linux,subbus", NULL);
+ if (busp)
+ pdn->bussubno = *busp;
+ }
pdn->pci_ext_config_space = (type && *type == 1);
return NULL;
diff --git a/arch/powerpc/platforms/iseries/pci.c b/arch/powerpc/platforms/iseries/pci.c
index 86a8698..35bcc98 100644
--- a/arch/powerpc/platforms/iseries/pci.c
+++ b/arch/powerpc/platforms/iseries/pci.c
@@ -166,13 +166,21 @@ static void pci_Log_Error(char *Error_Te
void iSeries_pcibios_init(void)
{
struct pci_controller *phb;
- struct device_node *node;
- struct device_node *dn;
+ struct device_node *root = of_find_node_by_path("/");
+ struct device_node *node = NULL;
- for_each_node_by_type(node, "pci") {
+ if (root == NULL) {
+ printk(KERN_CRIT "iSeries_pcibios_init: can't find root "
+ "of device tree\n");
+ return;
+ }
+ while ((node = of_get_next_child(root, node)) != NULL) {
HvBusNumber bus;
u32 *busp;
+ if ((node->type == NULL) || (strcmp(node->type, "pci") != 0))
+ continue;
+
busp = (u32 *)get_property(node, "bus-range", NULL);
if (busp == NULL)
continue;
@@ -186,33 +194,11 @@ void iSeries_pcibios_init(void)
phb->first_busno = bus;
phb->last_busno = bus;
phb->ops = &iSeries_pci_ops;
+ }
- /* Find and connect the devices. */
- for (dn = NULL; (dn = of_get_next_child(node, dn)) != NULL;) {
- struct pci_dn *pdn;
- u32 *reg;
-
- reg = (u32 *)get_property(dn, "reg", NULL);
- if (reg == NULL) {
- printk(KERN_DEBUG "no reg property!\n");
- continue;
- }
- busp = (u32 *)get_property(dn, "linux,subbus", NULL);
- if (busp == NULL) {
- printk(KERN_DEBUG "no subbus property!\n");
- continue;
- }
+ of_node_put(root);
- pdn = kzalloc(sizeof(*pdn), GFP_KERNEL);
- if (pdn == NULL)
- return;
- dn->data = pdn;
- pdn->node = dn;
- pdn->busno = bus;
- pdn->devfn = (reg[0] >> 8) & 0xff;
- pdn->bussubno = *busp;
- }
- }
+ pci_devs_phb_init();
}
/*
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c
index d83f5ed..0f49412 100644
--- a/arch/powerpc/platforms/iseries/setup.c
+++ b/arch/powerpc/platforms/iseries/setup.c
@@ -1073,7 +1073,7 @@ static void scan_bridge_slot(struct iser
snprintf(buf, sizeof(buf), "pci@%x,%d",
PCI_SLOT(devfn), function);
dt_start_node(dt, buf);
- reg[0] = (bus << 18) | (devfn << 8);
+ reg[0] = (bus << 16) | (devfn << 8);
reg[1] = 0;
reg[2] = 0;
reg[3] = 0;
--
1.3.1.ge923
next prev parent reply other threads:[~2006-05-19 7:10 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-19 6:42 [PATCH 01/14] powerpc: tidy up iseries/pci.c Stephen Rothwell
2006-05-19 6:43 ` [PATCH 02/14] powerpc: reintroduce HvCallPci_configLoad32 Stephen Rothwell
2006-05-19 6:46 ` [PATCH 03/14] powerpc: move iSeries PCI devices to the device tree Stephen Rothwell
2006-05-19 6:48 ` [PATCH 04/14] powerpc: remove iSeries_Global_Device_List Stephen Rothwell
2006-05-19 6:50 ` [PATCH 05/14] powerpc: remove Irq from pci_dn Stephen Rothwell
2006-05-19 6:51 ` [PATCH 06/14] powerpc: remove LogicalSlot " Stephen Rothwell
2006-05-19 6:53 ` [PATCH 07/14] powerpc: iSeries PCI devices can now have a devpsec attribute Stephen Rothwell
2006-05-19 6:54 ` Stephen Rothwell [this message]
2006-05-19 6:55 ` [PATCH 09/14] powerpc: make iSeries flat device tree stuff static Stephen Rothwell
2006-05-19 6:58 ` [PATCH 10/14] powerpc: give iSeries device tree nodes better names Stephen Rothwell
2006-05-19 7:00 ` [PATCH 11/14] powerpc: split device tree stuff out of iseries/setup.c Stephen Rothwell
2006-05-19 7:04 ` [PATCH 13/14] powerpc: make iSeries flattened device tree dynamic - part 2 Stephen Rothwell
2006-05-19 7:04 ` [PATCH 12/14] powerpc: make iSeries flattened device tree dynamic Stephen Rothwell
2006-05-19 7:06 ` [PATCH 14/14] powerpc: cleanup of iSeries flat device tree Stephen Rothwell
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=20060519165442.75e40d7c.sfr@canb.auug.org.au \
--to=sfr@canb.auug.org.au \
--cc=linuxppc-dev@ozlabs.org \
--cc=paulus@samba.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;
as well as URLs for NNTP newsgroup(s).