diff mbox

[v5,15/18] cxl: Parse device tree and create cxl device(s) at boot

Message ID 1456244519-18934-16-git-send-email-fbarrat@linux.vnet.ibm.com (mailing list archive)
State Superseded
Headers show

Commit Message

Frederic Barrat Feb. 23, 2016, 4:21 p.m. UTC
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>
Acked-by: Ian Munsie <imunsie@au1.ibm.com>
---
 drivers/misc/cxl/base.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

Comments

Manoj Kumar Feb. 24, 2016, 8:15 p.m. UTC | #1
Fred, Christophe: See comment below.

---
Manoj Kumar

On 2/23/2016 10:21 AM, Frederic Barrat wrote:
> +module_init(cxl_base_init);

Is this a remnant from when there were two modules?
Do you really need two module_init() calls (can't one be called from the
other)?
What is the tear-down portion of this (module_exit)?
Frederic Barrat Feb. 25, 2016, 1:19 p.m. UTC | #2
Le 24/02/2016 21:15, Manoj Kumar a écrit :
> On 2/23/2016 10:21 AM, Frederic Barrat wrote:
>> +module_init(cxl_base_init);
>
> Is this a remnant from when there were two modules?
> Do you really need two module_init() calls (can't one be called from the
> other)?
> What is the tear-down portion of this (module_exit)?

No, this is not a left-over from the previous 2-module implementation of 
the cxl driver.
The file base.c is not part of the "normal" cxl driver. It is either 
part of the kernel if the cxl driver is a module or configured in the 
kernel. Or it is discarded if cxl is not even a module. So code in that 
file is either in the kernel or it's not even compiled. That was already 
the case on bare-metal.
Code in module_init() is executed when the kernel boots and it is not 
going away.

   Fred
Manoj Kumar Feb. 25, 2016, 4:44 p.m. UTC | #3
Fred: Thanks for the clarification.

Reviewed-by: Manoj Kumar <manoj@linux.vnet.ibm.com>

---
Manoj Kumar


On 2/25/2016 7:19 AM, Frederic Barrat wrote:
>
>
> Le 24/02/2016 21:15, Manoj Kumar a écrit :
>> On 2/23/2016 10:21 AM, Frederic Barrat wrote:
>>> +module_init(cxl_base_init);
>>
>> Is this a remnant from when there were two modules?
>> Do you really need two module_init() calls (can't one be called from the
>> other)?
>> What is the tear-down portion of this (module_exit)?
>
> No, this is not a left-over from the previous 2-module implementation of
> the cxl driver.
> The file base.c is not part of the "normal" cxl driver. It is either
> part of the kernel if the cxl driver is a module or configured in the
> kernel. Or it is discarded if cxl is not even a module. So code in that
> file is either in the kernel or it's not even compiled. That was already
> the case on bare-metal.
> Code in module_init() is executed when the kernel boots and it is not
> going away.
>
>    Fred
diff mbox

Patch

diff --git a/drivers/misc/cxl/base.c b/drivers/misc/cxl/base.c
index 957f4dd..9b90ec6 100644
--- a/drivers/misc/cxl/base.c
+++ b/drivers/misc/cxl/base.c
@@ -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);