Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 258216
b: refs/heads/master
c: e73c34c
h: refs/heads/master
v: v3
  • Loading branch information
Mark Rutland authored and Russell King committed Jun 29, 2011
1 parent 7fcdfc7 commit e964e1a
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ae0c3751ab08d3fe039d48935e9ad2c46711b23b
refs/heads/master: e73c34c3d522a60d9f7b38a7683076362bad98f5
21 changes: 21 additions & 0 deletions trunk/Documentation/devicetree/bindings/arm/pmu.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
* ARM Performance Monitor Units

ARM cores often have a PMU for counting cpu and cache events like cache misses
and hits. The interface to the PMU is part of the ARM ARM. The ARM PMU
representation in the device tree should be done as under:-

Required properties:

- compatible : should be one of
"arm,cortex-a9-pmu"
"arm,cortex-a8-pmu"
"arm,arm1176-pmu"
"arm,arm1136-pmu"
- interrupts : 1 combined interrupt or 1 per core.

Example:

pmu {
compatible = "arm,cortex-a9-pmu";
interrupts = <100 101>;
};
34 changes: 33 additions & 1 deletion trunk/arch/arm/kernel/pmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>

#include <asm/pmu.h>
Expand Down Expand Up @@ -45,14 +46,45 @@ static int __devinit pmu_register(struct platform_device *pdev,
return 0;
}

#define OF_MATCH_PMU(_name, _type) { \
.compatible = _name, \
.data = (void *)_type, \
}

#define OF_MATCH_CPU(name) OF_MATCH_PMU(name, ARM_PMU_DEVICE_CPU)

static struct of_device_id armpmu_of_device_ids[] = {
OF_MATCH_CPU("arm,cortex-a9-pmu"),
OF_MATCH_CPU("arm,cortex-a8-pmu"),
OF_MATCH_CPU("arm,arm1136-pmu"),
OF_MATCH_CPU("arm,arm1176-pmu"),
{},
};

enum arm_pmu_type armpmu_device_type(struct platform_device *pdev)
{
const struct of_device_id *of_id;

/* provided by of_device_id table */
if (pdev->dev.of_node) {
of_id = of_match_device(armpmu_of_device_ids, &pdev->dev);
BUG_ON(!of_id);
return (enum arm_pmu_type)of_id->data;
}

/* Provided by a 'legacy' platform_device */
return ARM_PMU_DEVICE_CPU;
}

static int __devinit armpmu_device_probe(struct platform_device *pdev)
{
return pmu_register(pdev, ARM_PMU_DEVICE_CPU);
return pmu_register(pdev, armpmu_device_type(pdev));
}

static struct platform_driver armpmu_driver = {
.driver = {
.name = "arm-pmu",
.of_match_table = armpmu_of_device_ids,
},
.probe = armpmu_device_probe,
};
Expand Down

0 comments on commit e964e1a

Please sign in to comment.