diff mbox series

[v2,20/36] coresight: Make device to CPU mapping generic

Message ID 1555344260-12375-21-git-send-email-suzuki.poulose@arm.com
State Superseded
Headers show
Series coresight: Support for ACPI bindings | expand

Commit Message

Suzuki K Poulose April 15, 2019, 4:04 p.m. UTC
The CoreSight components ETM and CPU-Debug are always associated
with CPUs. Replace the of_coresight_get_cpu() with a platform
agnostic helper, in preparation to add ACPI support.

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>

---
 drivers/hwtracing/coresight/coresight-cpu-debug.c |  3 +--
 drivers/hwtracing/coresight/coresight-platform.c  | 18 +++++++++++++-----
 include/linux/coresight.h                         |  7 +------
 3 files changed, 15 insertions(+), 13 deletions(-)

-- 
2.7.4

Comments

Mathieu Poirier April 18, 2019, 6:14 p.m. UTC | #1
On Mon, Apr 15, 2019 at 05:04:03PM +0100, Suzuki K Poulose wrote:
> The CoreSight components ETM and CPU-Debug are always associated

> with CPUs. Replace the of_coresight_get_cpu() with a platform

> agnostic helper, in preparation to add ACPI support.

> 

> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>

> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>

> ---

>  drivers/hwtracing/coresight/coresight-cpu-debug.c |  3 +--

>  drivers/hwtracing/coresight/coresight-platform.c  | 18 +++++++++++++-----

>  include/linux/coresight.h                         |  7 +------

>  3 files changed, 15 insertions(+), 13 deletions(-)

> 

> diff --git a/drivers/hwtracing/coresight/coresight-cpu-debug.c b/drivers/hwtracing/coresight/coresight-cpu-debug.c

> index e8819d7..07a1367 100644

> --- a/drivers/hwtracing/coresight/coresight-cpu-debug.c

> +++ b/drivers/hwtracing/coresight/coresight-cpu-debug.c

> @@ -572,14 +572,13 @@ static int debug_probe(struct amba_device *adev, const struct amba_id *id)

>  	struct device *dev = &adev->dev;

>  	struct debug_drvdata *drvdata;

>  	struct resource *res = &adev->res;

> -	struct device_node *np = adev->dev.of_node;

>  	int ret;

>  

>  	drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);

>  	if (!drvdata)

>  		return -ENOMEM;

>  

> -	drvdata->cpu = np ? of_coresight_get_cpu(np) : 0;

> +	drvdata->cpu = coresight_get_cpu(dev);

>  	if (per_cpu(debug_drvdata, drvdata->cpu)) {

>  		dev_err(dev, "CPU%d drvdata has already been initialized\n",

>  			drvdata->cpu);

> diff --git a/drivers/hwtracing/coresight/coresight-platform.c b/drivers/hwtracing/coresight/coresight-platform.c

> index 25a1838..8a86ba3 100644

> --- a/drivers/hwtracing/coresight/coresight-platform.c

> +++ b/drivers/hwtracing/coresight/coresight-platform.c

> @@ -151,12 +151,14 @@ static void of_coresight_get_ports(const struct device_node *node,

>  	}

>  }

>  

> -int of_coresight_get_cpu(const struct device_node *node)

> +static int of_coresight_get_cpu(struct device *dev)

>  {

>  	int cpu;

>  	struct device_node *dn;

>  

> -	dn = of_parse_phandle(node, "cpu", 0);

> +	if (!dev->of_node)

> +		return 0;

> +	dn = of_parse_phandle(dev->of_node, "cpu", 0);

>  	/* Affinity defaults to CPU0 */

>  	if (!dn)

>  		return 0;

> @@ -166,7 +168,6 @@ int of_coresight_get_cpu(const struct device_node *node)

>  	/* Affinity to CPU0 if no cpu nodes are found */

>  	return (cpu < 0) ? 0 : cpu;

>  }

> -EXPORT_SYMBOL_GPL(of_coresight_get_cpu);

>  

>  /*

>   * of_coresight_parse_endpoint : Parse the given output endpoint @ep

> @@ -241,8 +242,6 @@ of_get_coresight_platform_data(struct device *dev,

>  	bool legacy_binding = false;

>  	struct device_node *node = dev->of_node;

>  

> -	pdata->cpu = of_coresight_get_cpu(node);

> -

>  	/* Get the number of input and output port for this component */

>  	of_coresight_get_ports(node, &pdata->nr_inport, &pdata->nr_outport);

>  

> @@ -294,6 +293,14 @@ of_get_coresight_platform_data(struct device *dev,

>  }

>  #endif

>  

> +int coresight_get_cpu(struct device *dev)

> +{

> +	if (is_of_node(dev->fwnode))

> +		return of_coresight_get_cpu(dev);

> +	return 0;

> +}

> +EXPORT_SYMBOL_GPL(coresight_get_cpu);

> +

>  struct coresight_platform_data *

>  coresight_get_platform_data(struct device *dev)

>  {

> @@ -309,6 +316,7 @@ coresight_get_platform_data(struct device *dev)

>  

>  	/* Use device name as sysfs handle */

>  	pdata->name = dev_name(dev);

> +	pdata->cpu = coresight_get_cpu(dev);

>  

>  	if (is_of_node(fwnode))

>  		return of_get_coresight_platform_data(dev, pdata);

> diff --git a/include/linux/coresight.h b/include/linux/coresight.h

> index 5b29255..a48cd9b 100644

> --- a/include/linux/coresight.h

> +++ b/include/linux/coresight.h

> @@ -291,12 +291,7 @@ static inline void coresight_disclaim_device_unlocked(void __iomem *base) {}

>  

>  #endif

>  

> -#ifdef CONFIG_OF

> -extern int of_coresight_get_cpu(const struct device_node *node);

> -#else

> -static inline int of_coresight_get_cpu(const struct device_node *node)

> -{ return 0; }

> -#endif

> +extern int coresight_get_cpu(struct device *dev);

>  

>  struct coresight_platform_data *coresight_get_platform_data(struct device *dev);


For patches 12, 13 and 15-20:

Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>


>  

> -- 

> 2.7.4

>
diff mbox series

Patch

diff --git a/drivers/hwtracing/coresight/coresight-cpu-debug.c b/drivers/hwtracing/coresight/coresight-cpu-debug.c
index e8819d7..07a1367 100644
--- a/drivers/hwtracing/coresight/coresight-cpu-debug.c
+++ b/drivers/hwtracing/coresight/coresight-cpu-debug.c
@@ -572,14 +572,13 @@  static int debug_probe(struct amba_device *adev, const struct amba_id *id)
 	struct device *dev = &adev->dev;
 	struct debug_drvdata *drvdata;
 	struct resource *res = &adev->res;
-	struct device_node *np = adev->dev.of_node;
 	int ret;
 
 	drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
 	if (!drvdata)
 		return -ENOMEM;
 
-	drvdata->cpu = np ? of_coresight_get_cpu(np) : 0;
+	drvdata->cpu = coresight_get_cpu(dev);
 	if (per_cpu(debug_drvdata, drvdata->cpu)) {
 		dev_err(dev, "CPU%d drvdata has already been initialized\n",
 			drvdata->cpu);
diff --git a/drivers/hwtracing/coresight/coresight-platform.c b/drivers/hwtracing/coresight/coresight-platform.c
index 25a1838..8a86ba3 100644
--- a/drivers/hwtracing/coresight/coresight-platform.c
+++ b/drivers/hwtracing/coresight/coresight-platform.c
@@ -151,12 +151,14 @@  static void of_coresight_get_ports(const struct device_node *node,
 	}
 }
 
-int of_coresight_get_cpu(const struct device_node *node)
+static int of_coresight_get_cpu(struct device *dev)
 {
 	int cpu;
 	struct device_node *dn;
 
-	dn = of_parse_phandle(node, "cpu", 0);
+	if (!dev->of_node)
+		return 0;
+	dn = of_parse_phandle(dev->of_node, "cpu", 0);
 	/* Affinity defaults to CPU0 */
 	if (!dn)
 		return 0;
@@ -166,7 +168,6 @@  int of_coresight_get_cpu(const struct device_node *node)
 	/* Affinity to CPU0 if no cpu nodes are found */
 	return (cpu < 0) ? 0 : cpu;
 }
-EXPORT_SYMBOL_GPL(of_coresight_get_cpu);
 
 /*
  * of_coresight_parse_endpoint : Parse the given output endpoint @ep
@@ -241,8 +242,6 @@  of_get_coresight_platform_data(struct device *dev,
 	bool legacy_binding = false;
 	struct device_node *node = dev->of_node;
 
-	pdata->cpu = of_coresight_get_cpu(node);
-
 	/* Get the number of input and output port for this component */
 	of_coresight_get_ports(node, &pdata->nr_inport, &pdata->nr_outport);
 
@@ -294,6 +293,14 @@  of_get_coresight_platform_data(struct device *dev,
 }
 #endif
 
+int coresight_get_cpu(struct device *dev)
+{
+	if (is_of_node(dev->fwnode))
+		return of_coresight_get_cpu(dev);
+	return 0;
+}
+EXPORT_SYMBOL_GPL(coresight_get_cpu);
+
 struct coresight_platform_data *
 coresight_get_platform_data(struct device *dev)
 {
@@ -309,6 +316,7 @@  coresight_get_platform_data(struct device *dev)
 
 	/* Use device name as sysfs handle */
 	pdata->name = dev_name(dev);
+	pdata->cpu = coresight_get_cpu(dev);
 
 	if (is_of_node(fwnode))
 		return of_get_coresight_platform_data(dev, pdata);
diff --git a/include/linux/coresight.h b/include/linux/coresight.h
index 5b29255..a48cd9b 100644
--- a/include/linux/coresight.h
+++ b/include/linux/coresight.h
@@ -291,12 +291,7 @@  static inline void coresight_disclaim_device_unlocked(void __iomem *base) {}
 
 #endif
 
-#ifdef CONFIG_OF
-extern int of_coresight_get_cpu(const struct device_node *node);
-#else
-static inline int of_coresight_get_cpu(const struct device_node *node)
-{ return 0; }
-#endif
+extern int coresight_get_cpu(struct device *dev);
 
 struct coresight_platform_data *coresight_get_platform_data(struct device *dev);