cxl: Parse device tree and create cxl device(s) at boot
authorFrederic Barrat <fbarrat@linux.vnet.ibm.com>
Fri, 4 Mar 2016 11:26:39 +0000 (12:26 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 9 Mar 2016 12:39:59 +0000 (23:39 +1100)
Add new entry point to scan the device tree at boot in a guest,
looking for cxl devices.

Co-authored-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
Signed-off-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
Reviewed-by: Manoj Kumar <manoj@linux.vnet.ibm.com>
Acked-by: Ian Munsie <imunsie@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
drivers/misc/cxl/base.c

index 957f4dd..9b90ec6 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/rcupdate.h>
 #include <asm/errno.h>
 #include <misc/cxl-base.h>
+#include <linux/of_platform.h>
 #include "cxl.h"
 
 /* protected by rcu */
@@ -91,3 +92,27 @@ int cxl_update_properties(struct device_node *dn,
        return of_update_property(dn, new_prop);
 }
 EXPORT_SYMBOL_GPL(cxl_update_properties);
+
+static int __init cxl_base_init(void)
+{
+       struct device_node *np = NULL;
+       struct platform_device *dev;
+       int count = 0;
+
+       /*
+        * Scan for compatible devices in guest only
+        */
+       if (cpu_has_feature(CPU_FTR_HVMODE))
+               return 0;
+
+       while ((np = of_find_compatible_node(np, NULL,
+                                    "ibm,coherent-platform-facility"))) {
+               dev = of_platform_device_create(np, NULL, NULL);
+               if (dev)
+                       count++;
+       }
+       pr_devel("Found %d cxl device(s)\n", count);
+       return 0;
+}
+
+module_init(cxl_base_init);