svn commit: r326840 - head/sys/dev/dpaa

Justin Hibbits jhibbits at FreeBSD.org
Thu Dec 14 04:41:08 UTC 2017


Author: jhibbits
Date: Thu Dec 14 04:41:07 2017
New Revision: 326840
URL: https://svnweb.freebsd.org/changeset/base/326840

Log:
  Allow bman-portals and qman-portals to attach to simple-bus
  
  Official Linux dts's put the individual portals under a simple-bus, rather
  than under a '*-portals' grouping.  This adds a hack to permit that, which
  gets us closer to using stock device trees for DPAA-based devices.

Modified:
  head/sys/dev/dpaa/bman_fdt.c
  head/sys/dev/dpaa/qman_fdt.c

Modified: head/sys/dev/dpaa/bman_fdt.c
==============================================================================
--- head/sys/dev/dpaa/bman_fdt.c	Thu Dec 14 03:41:12 2017	(r326839)
+++ head/sys/dev/dpaa/bman_fdt.c	Thu Dec 14 04:41:07 2017	(r326840)
@@ -122,8 +122,17 @@ get_addr_props(phandle_t node, uint32_t *addrp, uint32
 static int
 bman_portals_fdt_probe(device_t dev)
 {
+	phandle_t node;
 
-	if (!ofw_bus_is_compatible(dev, "fsl,bman-portals"))
+	if (ofw_bus_is_compatible(dev, "simple-bus")) {
+		node = ofw_bus_get_node(dev);
+		for (node = OF_child(node); node > 0; node = OF_peer(node)) {
+			if (ofw_bus_node_is_compatible(node, "fsl,bman-portal"))
+				break;
+		}
+		if (node <= 0)
+			return (ENXIO);
+	} else if (!ofw_bus_is_compatible(dev, "fsl,bman-portals"))
 		return (ENXIO);
 
 	device_set_desc(dev, BMAN_PORT_DEVSTR);

Modified: head/sys/dev/dpaa/qman_fdt.c
==============================================================================
--- head/sys/dev/dpaa/qman_fdt.c	Thu Dec 14 03:41:12 2017	(r326839)
+++ head/sys/dev/dpaa/qman_fdt.c	Thu Dec 14 04:41:07 2017	(r326840)
@@ -44,7 +44,7 @@ __FBSDID("$FreeBSD$");
 #include "qman.h"
 #include "portals.h"
 
-#define	FBMAN_DEVSTR	"Freescale Queue Manager"
+#define	FQMAN_DEVSTR	"Freescale Queue Manager"
 
 static int qman_fdt_probe(device_t);
 
@@ -77,15 +77,15 @@ qman_fdt_probe(device_t dev)
 	if (!ofw_bus_is_compatible(dev, "fsl,qman"))
 		return (ENXIO);
 
-	device_set_desc(dev, FBMAN_DEVSTR);
+	device_set_desc(dev, FQMAN_DEVSTR);
 
 	return (BUS_PROBE_DEFAULT);
 }
 
 /*
- * BMAN Portals
+ * QMAN Portals
  */
-#define	BMAN_PORT_DEVSTR	"Freescale Queue Manager - Portals"
+#define	QMAN_PORT_DEVSTR	"Freescale Queue Manager - Portals"
 
 static device_probe_t qman_portals_fdt_probe;
 static device_attach_t qman_portals_fdt_attach;
@@ -122,11 +122,20 @@ get_addr_props(phandle_t node, uint32_t *addrp, uint32
 static int
 qman_portals_fdt_probe(device_t dev)
 {
+	phandle_t node;
 
-	if (!ofw_bus_is_compatible(dev, "fsl,qman-portals"))
+	if (ofw_bus_is_compatible(dev, "simple-bus")) {
+		node = ofw_bus_get_node(dev);
+		for (node = OF_child(node); node > 0; node = OF_peer(node)) {
+			if (ofw_bus_node_is_compatible(node, "fsl,qman-portal"))
+				break;
+		}
+		if (node <= 0)
+			return (ENXIO);
+	} else if (!ofw_bus_is_compatible(dev, "fsl,qman-portals"))
 		return (ENXIO);
 
-	device_set_desc(dev, BMAN_PORT_DEVSTR);
+	device_set_desc(dev, QMAN_PORT_DEVSTR);
 
 	return (BUS_PROBE_DEFAULT);
 }


More information about the svn-src-all mailing list