From: David S. Miller <davem@sunset.davemloft.net>
Date: Fri, 20 Jul 2007 05:51:07 +0000 (-0700)
Subject: [SPARC64]: Improve VIO device naming further.
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=58fb666643acee28d347de0b59bb938844c22f83;p=GitHub%2Fmt8127%2Fandroid_kernel_alcatel_ttab.git

[SPARC64]: Improve VIO device naming further.

The best scheme to get uniqueness seems to be:

FOO			-- If node lacks "id" property
FOO-$(ID)		-- If node has "id" but parent lacks "cfg-handle"
FOO-$(ID)-$(CFG_HANDLE) -- If node has both

Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/arch/sparc64/kernel/vio.c b/arch/sparc64/kernel/vio.c
index 491223a6628f..3685daf5157f 100644
--- a/arch/sparc64/kernel/vio.c
+++ b/arch/sparc64/kernel/vio.c
@@ -205,7 +205,8 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
 	struct device_node *dp;
 	struct vio_dev *vdev;
 	int err, tlen, clen;
-	const u64 *id;
+	const u64 *id, *cfg_handle;
+	u64 a;
 
 	type = mdesc_get_property(hp, mp, "device-type", &tlen);
 	if (!type) {
@@ -221,26 +222,18 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
 		return NULL;
 	}
 
-	if (!strcmp(type, "vdc-port")) {
-		u64 a;
+	id = mdesc_get_property(hp, mp, "id", NULL);
 
-		id = NULL;
-		mdesc_for_each_arc(a, hp, mp, MDESC_ARC_TYPE_BACK) {
-			u64 target;
+	cfg_handle = NULL;
+	mdesc_for_each_arc(a, hp, mp, MDESC_ARC_TYPE_BACK) {
+		u64 target;
 
-			target = mdesc_arc_target(hp, a);
-			id = mdesc_get_property(hp, target,
+		target = mdesc_arc_target(hp, a);
+		cfg_handle = mdesc_get_property(hp, target,
 						"cfg-handle", NULL);
-			if (id)
-				break;
-		}
-		if (!id) {
-			printk(KERN_ERR "VIO: vdc-port lacks parent "
-			       "cfg-handle.\n");
-			return NULL;
-		}
-	} else
-		id = mdesc_get_property(hp, mp, "id", NULL);
+		if (cfg_handle)
+			break;
+	}
 
 	bus_id_name = type;
 	if (!strcmp(type, "domain-services-port"))
@@ -285,10 +278,14 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
 		snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s",
 			 bus_id_name);
 		vdev->dev_no = ~(u64)0;
-	} else {
+	} else if (!cfg_handle) {
 		snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s-%lu",
 			 bus_id_name, *id);
 		vdev->dev_no = *id;
+	} else {
+		snprintf(vdev->dev.bus_id, BUS_ID_SIZE, "%s-%lu-%lu",
+			 bus_id_name, *cfg_handle, *id);
+		vdev->dev_no = *cfg_handle;
 	}
 
 	vdev->dev.parent = parent;