Commit a9356a04 authored by Mark Rutland's avatar Mark Rutland Committed by Will Deacon

ARM: perf: move platform device to struct arm_pmu

Currently the ARM perf code supports having a single struct
platform_device to supply IRQ numbers, limiting it to supporting a
single PMU.

This patch makes a platform_device instance variable on struct arm_pmu.
This should allow for multiple PMUs to be supported in future.
Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
Reviewed-by: default avatarWill Deacon <will.deacon@arm.com>
Reviewed-by: default avatarJamie Iles <jamie@jamieiles.com>
Reviewed-by: default avatarAshwin Chaugule <ashwinc@codeaurora.org>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 03b7898d
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
#include <asm/pmu.h> #include <asm/pmu.h>
#include <asm/stacktrace.h> #include <asm/stacktrace.h>
static struct platform_device *pmu_device;
/* /*
* Hardware lock to serialize accesses to PMU registers. Needed for the * Hardware lock to serialize accesses to PMU registers. Needed for the
* read/modify/write sequences. * read/modify/write sequences.
...@@ -85,6 +83,7 @@ struct arm_pmu { ...@@ -85,6 +83,7 @@ struct arm_pmu {
atomic_t active_events; atomic_t active_events;
struct mutex reserve_mutex; struct mutex reserve_mutex;
u64 max_period; u64 max_period;
struct platform_device *plat_device;
}; };
/* Set at runtime when we know what CPU type we are. */ /* Set at runtime when we know what CPU type we are. */
...@@ -374,7 +373,8 @@ validate_group(struct perf_event *event) ...@@ -374,7 +373,8 @@ validate_group(struct perf_event *event)
static irqreturn_t armpmu_platform_irq(int irq, void *dev) static irqreturn_t armpmu_platform_irq(int irq, void *dev)
{ {
struct arm_pmu_platdata *plat = dev_get_platdata(&pmu_device->dev); struct platform_device *plat_device = armpmu->plat_device;
struct arm_pmu_platdata *plat = dev_get_platdata(&plat_device->dev);
return plat->handle_irq(irq, dev, armpmu->handle_irq); return plat->handle_irq(irq, dev, armpmu->handle_irq);
} }
...@@ -383,6 +383,7 @@ static void ...@@ -383,6 +383,7 @@ static void
armpmu_release_hardware(void) armpmu_release_hardware(void)
{ {
int i, irq, irqs; int i, irq, irqs;
struct platform_device *pmu_device = armpmu->plat_device;
irqs = min(pmu_device->num_resources, num_possible_cpus()); irqs = min(pmu_device->num_resources, num_possible_cpus());
...@@ -404,6 +405,7 @@ armpmu_reserve_hardware(void) ...@@ -404,6 +405,7 @@ armpmu_reserve_hardware(void)
struct arm_pmu_platdata *plat; struct arm_pmu_platdata *plat;
irq_handler_t handle_irq; irq_handler_t handle_irq;
int i, err, irq, irqs; int i, err, irq, irqs;
struct platform_device *pmu_device = armpmu->plat_device;
err = reserve_pmu(ARM_PMU_DEVICE_CPU); err = reserve_pmu(ARM_PMU_DEVICE_CPU);
if (err) { if (err) {
...@@ -657,7 +659,7 @@ static struct platform_device_id armpmu_plat_device_ids[] = { ...@@ -657,7 +659,7 @@ static struct platform_device_id armpmu_plat_device_ids[] = {
static int __devinit armpmu_device_probe(struct platform_device *pdev) static int __devinit armpmu_device_probe(struct platform_device *pdev)
{ {
pmu_device = pdev; armpmu->plat_device = pdev;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment