coresight: Make device to CPU mapping generic
authorSuzuki K Poulose <suzuki.poulose@arm.com>
Wed, 19 Jun 2019 19:52:55 +0000 (13:52 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Jun 2019 05:56:11 +0000 (07:56 +0200)
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.

Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwtracing/coresight/coresight-cpu-debug.c
drivers/hwtracing/coresight/coresight-platform.c
include/linux/coresight.h

index e8819d7509387a065842f577c20781757e0a94c3..07a1367c733f1b0711c0a217d89ab3e4c90b6f59 100644 (file)
@@ -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);
index 5d78f4fbd97ded9c57afe5c949bb1b284e6b0964..ba8c14635c6b6ea86ee267c7c247b04f1b28ffb5 100644 (file)
@@ -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
@@ -240,8 +241,6 @@ static int 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);
 
@@ -300,6 +299,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)
 {
@@ -318,6 +325,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))
                ret = of_get_coresight_platform_data(dev, pdata);
index e2b95e05e0be59f21d405b0b6e62e5e2203b0d96..98a4440dea3eedb7033dd1e395ce2f7f6742e314 100644 (file)
@@ -292,12 +292,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);