summaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/vio.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-05 08:08:08 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-05 08:08:08 -0700
commitaf299901efac5ede381e01448a31a560a4eca853 (patch)
tree529da49b494996ad45930b7ff513612ed8847e8d /arch/sparc64/kernel/vio.c
parent4ecbca8554d0f643351ee07d3284138a5e85ba81 (diff)
parentb2b27757b6f0e88e30f10c431c763523dd7858ca (diff)
downloadop-kernel-dev-af299901efac5ede381e01448a31a560a4eca853.zip
op-kernel-dev-af299901efac5ede381e01448a31a560a4eca853.tar.gz
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6: [SPARC64]: Fix 'niu' complex IRQ probing. [SPARC64]: check fork_idle() error [SPARC64]: Temporary workaround for PCI-E slot on T1000. [SPARC64]: VIO device addition log message level is too high. [SPARC64]: Fix domain-services port probing. [SPARC64]: Don't use in/local regs for ldx/stx data in N1 memcpy.
Diffstat (limited to 'arch/sparc64/kernel/vio.c')
-rw-r--r--arch/sparc64/kernel/vio.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/arch/sparc64/kernel/vio.c b/arch/sparc64/kernel/vio.c
index 1550ac5..0c1ee61 100644
--- a/arch/sparc64/kernel/vio.c
+++ b/arch/sparc64/kernel/vio.c
@@ -292,7 +292,7 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
}
vdev->dp = dp;
- printk(KERN_ERR "VIO: Adding device %s\n", vdev->dev.bus_id);
+ printk(KERN_INFO "VIO: Adding device %s\n", vdev->dev.bus_id);
err = device_register(&vdev->dev);
if (err) {
@@ -342,8 +342,33 @@ static struct mdesc_notifier_client vio_device_notifier = {
.node_name = "virtual-device-port",
};
+/* We are only interested in domain service ports under the
+ * "domain-services" node. On control nodes there is another port
+ * under "openboot" that we should not mess with as aparently that is
+ * reserved exclusively for OBP use.
+ */
+static void vio_add_ds(struct mdesc_handle *hp, u64 node)
+{
+ int found;
+ u64 a;
+
+ found = 0;
+ mdesc_for_each_arc(a, hp, node, MDESC_ARC_TYPE_BACK) {
+ u64 target = mdesc_arc_target(hp, a);
+ const char *name = mdesc_node_name(hp, target);
+
+ if (!strcmp(name, "domain-services")) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (found)
+ (void) vio_create_one(hp, node, &root_vdev->dev);
+}
+
static struct mdesc_notifier_client vio_ds_notifier = {
- .add = vio_add,
+ .add = vio_add_ds,
.remove = vio_remove,
.node_name = "domain-services-port",
};
OpenPOWER on IntegriCloud