Thread (32 messages) 32 messages, 5 authors, 2017-04-17

Re: [PATCH v6 02/11] powerpc/powernv: Autoload IMC device driver module

From: Madhavan Srinivasan <hidden>
Date: 2017-04-05 06:37:51
Also in: lkml


On Tuesday 04 April 2017 07:18 AM, Daniel Axtens wrote:
Hi,
quoted
+		do {
+			pages = PAGE_SIZE * i;
+			pcni->vbase[i++] = (u64)phys_to_virt(pcni->pbase +
+							     pages);
+		} while (i < (pcni->size / PAGE_SIZE));
I also just noticed that there's no check here against
IMC_NEST_MAX_PAGES: should that be inserted? (If for no other reason
than to stop every static analysis tool complaining!)
Yes make sense. Can add that in the next version.

Thanks for review
Maddy

Daniel
quoted
+	}
+
+	return 0;
+err:
+	return -ENODEV;
+}
+
+static const struct of_device_id opal_imc_match[] = {
+	{ .compatible = IMC_DTB_COMPAT },
+	{},
+};
+
+static struct platform_driver opal_imc_driver = {
+	.driver = {
+		.name = "opal-imc-counters",
+		.of_match_table = opal_imc_match,
+	},
+	.probe = opal_imc_counters_probe,
+};
+
+MODULE_DEVICE_TABLE(of, opal_imc_match);
+module_platform_driver(opal_imc_driver);
+MODULE_DESCRIPTION("PowerNV OPAL IMC driver");
+MODULE_LICENSE("GPL");
diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
index e0f856bfbfe8..85ea1296f030 100644
--- a/arch/powerpc/platforms/powernv/opal.c
+++ b/arch/powerpc/platforms/powernv/opal.c
@@ -14,6 +14,7 @@
  #include <linux/printk.h>
  #include <linux/types.h>
  #include <linux/of.h>
+#include <linux/of_address.h>
  #include <linux/of_fdt.h>
  #include <linux/of_platform.h>
  #include <linux/interrupt.h>
@@ -30,6 +31,7 @@
  #include <asm/opal.h>
  #include <asm/firmware.h>
  #include <asm/mce.h>
+#include <asm/imc-pmu.h>
  
  #include "powernv.h"
  
@@ -631,6 +633,15 @@ static void opal_pdev_init(const char *compatible)
  		of_platform_device_create(np, NULL, NULL);
  }
  
+static void opal_imc_init_dev(void)
+{
+	struct device_node *np;
+
+	np = of_find_compatible_node(NULL, NULL, IMC_DTB_COMPAT);
+	if (np)
+		of_platform_device_create(np, NULL, NULL);
+}
+
  static int kopald(void *unused)
  {
  	unsigned long timeout = msecs_to_jiffies(opal_heartbeat) + 1;
@@ -704,6 +715,9 @@ static int __init opal_init(void)
  	/* Setup a heatbeat thread if requested by OPAL */
  	opal_init_heartbeat();
  
+	/* Detect IMC pmu counters support and create PMUs */
+	opal_imc_init_dev();
+
  	/* Create leds platform devices */
  	leds = of_find_node_by_path("/ibm,opal/leds");
  	if (leds) {
-- 
2.7.4
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help