diff options
Diffstat (limited to 'drivers/perf/arm_pmu_platform.c')
| -rw-r--r-- | drivers/perf/arm_pmu_platform.c | 54 | 
1 files changed, 25 insertions, 29 deletions
| diff --git a/drivers/perf/arm_pmu_platform.c b/drivers/perf/arm_pmu_platform.c index 933bd8410fc2..513de1f54e2d 100644 --- a/drivers/perf/arm_pmu_platform.c +++ b/drivers/perf/arm_pmu_platform.c @@ -6,6 +6,7 @@   * Copyright (C) 2010 ARM Ltd., Will Deacon <will.deacon@arm.com>   */  #define pr_fmt(fmt) "hw perfevents: " fmt +#define dev_fmt pr_fmt  #include <linux/bug.h>  #include <linux/cpumask.h> @@ -62,7 +63,7 @@ static bool pmu_has_irq_affinity(struct device_node *node)  	return !!of_find_property(node, "interrupt-affinity", NULL);  } -static int pmu_parse_irq_affinity(struct device_node *node, int i) +static int pmu_parse_irq_affinity(struct device *dev, int i)  {  	struct device_node *dn;  	int cpu; @@ -72,19 +73,18 @@ static int pmu_parse_irq_affinity(struct device_node *node, int i)  	 * affinity matches our logical CPU order, as we used to assume.  	 * This is fragile, so we'll warn in pmu_parse_irqs().  	 */ -	if (!pmu_has_irq_affinity(node)) +	if (!pmu_has_irq_affinity(dev->of_node))  		return i; -	dn = of_parse_phandle(node, "interrupt-affinity", i); +	dn = of_parse_phandle(dev->of_node, "interrupt-affinity", i);  	if (!dn) { -		pr_warn("failed to parse interrupt-affinity[%d] for %pOFn\n", -			i, node); +		dev_warn(dev, "failed to parse interrupt-affinity[%d]\n", i);  		return -EINVAL;  	}  	cpu = of_cpu_node_to_id(dn);  	if (cpu < 0) { -		pr_warn("failed to find logical CPU for %pOFn\n", dn); +		dev_warn(dev, "failed to find logical CPU for %pOFn\n", dn);  		cpu = nr_cpu_ids;  	} @@ -98,19 +98,18 @@ static int pmu_parse_irqs(struct arm_pmu *pmu)  	int i = 0, num_irqs;  	struct platform_device *pdev = pmu->plat_device;  	struct pmu_hw_events __percpu *hw_events = pmu->hw_events; +	struct device *dev = &pdev->dev;  	num_irqs = platform_irq_count(pdev); -	if (num_irqs < 0) { -		pr_err("unable to count PMU IRQs\n"); -		return num_irqs; -	} +	if (num_irqs < 0) +		return dev_err_probe(dev, num_irqs, "unable to count PMU IRQs\n");  	/*  	 * In this case we have no idea which CPUs are covered by the PMU.  	 * To match our prior behaviour, we assume all CPUs in this case.  	 */  	if (num_irqs == 0) { -		pr_warn("no irqs for PMU, sampling events not supported\n"); +		dev_warn(dev, "no irqs for PMU, sampling events not supported\n");  		pmu->pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;  		cpumask_setall(&pmu->supported_cpus);  		return 0; @@ -122,10 +121,8 @@ static int pmu_parse_irqs(struct arm_pmu *pmu)  			return pmu_parse_percpu_irq(pmu, irq);  	} -	if (nr_cpu_ids != 1 && !pmu_has_irq_affinity(pdev->dev.of_node)) { -		pr_warn("no interrupt-affinity property for %pOF, guessing.\n", -			pdev->dev.of_node); -	} +	if (nr_cpu_ids != 1 && !pmu_has_irq_affinity(dev->of_node)) +		dev_warn(dev, "no interrupt-affinity property, guessing.\n");  	for (i = 0; i < num_irqs; i++) {  		int cpu, irq; @@ -135,18 +132,18 @@ static int pmu_parse_irqs(struct arm_pmu *pmu)  			continue;  		if (irq_is_percpu_devid(irq)) { -			pr_warn("multiple PPIs or mismatched SPI/PPI detected\n"); +			dev_warn(dev, "multiple PPIs or mismatched SPI/PPI detected\n");  			return -EINVAL;  		} -		cpu = pmu_parse_irq_affinity(pdev->dev.of_node, i); +		cpu = pmu_parse_irq_affinity(dev, i);  		if (cpu < 0)  			return cpu;  		if (cpu >= nr_cpu_ids)  			continue;  		if (per_cpu(hw_events->irq, cpu)) { -			pr_warn("multiple PMU IRQs for the same CPU detected\n"); +			dev_warn(dev, "multiple PMU IRQs for the same CPU detected\n");  			return -EINVAL;  		} @@ -191,9 +188,8 @@ int arm_pmu_device_probe(struct platform_device *pdev,  			 const struct of_device_id *of_table,  			 const struct pmu_probe_info *probe_table)  { -	const struct of_device_id *of_id;  	armpmu_init_fn init_fn; -	struct device_node *node = pdev->dev.of_node; +	struct device *dev = &pdev->dev;  	struct arm_pmu *pmu;  	int ret = -ENODEV; @@ -207,15 +203,14 @@ int arm_pmu_device_probe(struct platform_device *pdev,  	if (ret)  		goto out_free; -	if (node && (of_id = of_match_node(of_table, pdev->dev.of_node))) { -		init_fn = of_id->data; - -		pmu->secure_access = of_property_read_bool(pdev->dev.of_node, +	init_fn = of_device_get_match_data(dev); +	if (init_fn) { +		pmu->secure_access = of_property_read_bool(dev->of_node,  							   "secure-reg-access");  		/* arm64 systems boot only as non-secure */  		if (IS_ENABLED(CONFIG_ARM64) && pmu->secure_access) { -			pr_warn("ignoring \"secure-reg-access\" property for arm64\n"); +			dev_warn(dev, "ignoring \"secure-reg-access\" property for arm64\n");  			pmu->secure_access = false;  		} @@ -226,7 +221,7 @@ int arm_pmu_device_probe(struct platform_device *pdev,  	}  	if (ret) { -		pr_info("%pOF: failed to probe PMU!\n", node); +		dev_err(dev, "failed to probe PMU!\n");  		goto out_free;  	} @@ -235,15 +230,16 @@ int arm_pmu_device_probe(struct platform_device *pdev,  		goto out_free_irqs;  	ret = armpmu_register(pmu); -	if (ret) -		goto out_free; +	if (ret) { +		dev_err(dev, "failed to register PMU devices!\n"); +		goto out_free_irqs; +	}  	return 0;  out_free_irqs:  	armpmu_free_irqs(pmu);  out_free: -	pr_info("%pOF: failed to register PMU devices!\n", node);  	armpmu_free(pmu);  	return ret;  } | 
