ARM: PMU: fix runtime PM enable
Subsystems (6)
PATCH v2 1/1 ARM: PMU: fix runtime PM enable
Commit 7be2958 (ARM: PMU: Add runtime PM Support) updated the ARM PMU code to use runtime PM which was prototyped and validated on the OMAP devices. In this commit, there is no call pm_runtime_enable() and for OMAP devices pm_runtime_enable() is currently being called from the OMAP PMU code when the PMU device is created. However, there are two problems with this:
1. For any other ARM device wishing to use runtime PM for PMU they will need to call pm_runtime_enable() for runtime PM to work.
2. When booting with device-tree and using device-tree to create the PMU device, pm_runtime_enable() needs to be called from within the ARM PERF driver as we are no longer calling any device specific code to create the device. Hence, PMU does not work on OMAP devices that use the runtime PM callbacks when using device-tree to create the PMU device.
Therefore, call pm_runtime_enable() directly from the ARM PMU driver when registering the device. For platforms that do not use runtime PM, pm_runtime_enable() does nothing and for platforms that do use runtime PM but may not require it specifically for PMU, this will just add a little overhead when initialising and uninitialising the PMU device.
Tested with PERF on OMAP2420, OMAP3430 and OMAP4460.
V2 changes:
- Call pm_runtime_enable() unconditionally on registering the PMU device.
--- arch/arm/kernel/perf_event.c | 1 + arch/arm/mach-omap2/pmu.c | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-)
arch/arm/kernel/perf_event.c +1 -0
@@ -510,6 +510,7 @@ static void __init armpmu_init(struct arm_pmu *armpmu)int armpmu_register (struct arm_pmu *armpmu,int type) {armpmu_init (armpmu); +pm_runtime_enable (&armpmu->plat_device->dev);pr_info ("enabled with %s PMU driver, %d counters available\n" , armpmu->name, armpmu->num_events);return perf_pmu_register (&armpmu->pmu, armpmu->name, type);
arch/arm/mach-omap2/pmu.c +0 -2
@@ -57,8 +57,6 @@ static int __init omap2_init_pmu(unsigned oh_num, char *oh_names[])if (IS_ERR (omap_pmu_dev))return PTR_ERR (omap_pmu_dev); -pm_runtime_enable (&omap_pmu_dev->dev); -return 0 ; }
Signature · 1 line
1.7.9.5
PATCH v2 1/1 ARM: PMU: fix runtime PM enable
Quoted 20 lines · Jon Hunter
Commit 7be2958 (ARM: PMU: Add runtime PM Support) updated the ARM PMU code to use runtime PM which was prototyped and validated on the OMAP devices. In this commit, there is no call
pm_runtime_enable()and for OMAP devicespm_runtime_enable()is currently being called from the OMAP PMU code when the PMU device is created. However, there are two problems with this:1. For any other ARM device wishing to use runtime PM for PMU they will need to call
pm_runtime_enable()for runtime PM to work.
2. When booting with device-tree and using device-tree to create the PMU device,pm_runtime_enable()needs to be called from within the ARM PERF driver as we are no longer calling any device specific code to create the device. Hence, PMU does not work on OMAP devices that use the runtime PM callbacks when using device-tree to create the PMU device.Therefore, call
pm_runtime_enable()directly from the ARM PMU driver when registering the device. For platforms that do not use runtime PM,pm_runtime_enable()does nothing and for platforms that do use runtime PM but may not require it specifically for PMU, this will just add a little overhead when initialising and uninitialising the PMU device.
Quoted 6 lines
Tested with PERF on OMAP2420, OMAP3430 and OMAP4460.
V2 changes:
- Callpm_runtime_enable()unconditionally on registering the PMU device.Signed-off-by Jon Hunter <[email protected]>
PATCH v2 1/1 ARM: PMU: fix runtime PM enable
In reply to Jon HunterQuoted 20 lines · Jon Hunter
Commit 7be2958 (ARM: PMU: Add runtime PM Support) updated the ARM PMU code to use runtime PM which was prototyped and validated on the OMAP devices. In this commit, there is no call
pm_runtime_enable()and for OMAP devicespm_runtime_enable()is currently being called from the OMAP PMU code when the PMU device is created. However, there are two problems with this:1. For any other ARM device wishing to use runtime PM for PMU they will need to call
pm_runtime_enable()for runtime PM to work.
2. When booting with device-tree and using device-tree to create the PMU device,pm_runtime_enable()needs to be called from within the ARM PERF driver as we are no longer calling any device specific code to create the device. Hence, PMU does not work on OMAP devices that use the runtime PM callbacks when using device-tree to create the PMU device.Therefore, call
pm_runtime_enable()directly from the ARM PMU driver when registering the device. For platforms that do not use runtime PM,pm_runtime_enable()does nothing and for platforms that do use runtime PM but may not require it specifically for PMU, this will just add a little overhead when initialising and uninitialising the PMU device.
Quoted 7 lines
Tested with PERF on OMAP2420, OMAP3430 and OMAP4460.
V2 changes:
- Callpm_runtime_enable()unconditionally on registering the PMU device.Signed-off-by Jon Hunter <[email protected]>---
Cheers Jon! Looks a bit weird without the matching pm_runtime_disable, but we don't really have anywhere to put that since the PMU is not deregistered.
Can we split this patch into two (even smaller!) patches so that I can take the perf part and the omap bit can go to Tony?
Will
Tony Lindgren
maintainerPATCH v2 1/1 ARM: PMU: fix runtime PM enable
Quoted 26 lines · Will Deacon
Quoted 25 lines · Jon Hunter
Commit 7be2958 (ARM: PMU: Add runtime PM Support) updated the ARM PMU code to use runtime PM which was prototyped and validated on the OMAP devices. In this commit, there is no call
pm_runtime_enable()and for OMAP devicespm_runtime_enable()is currently being called from the OMAP PMU code when the PMU device is created. However, there are two problems with this:1. For any other ARM device wishing to use runtime PM for PMU they will need to call
pm_runtime_enable()for runtime PM to work.
2. When booting with device-tree and using device-tree to create the PMU device,pm_runtime_enable()needs to be called from within the ARM PERF driver as we are no longer calling any device specific code to create the device. Hence, PMU does not work on OMAP devices that use the runtime PM callbacks when using device-tree to create the PMU device.Therefore, call
pm_runtime_enable()directly from the ARM PMU driver when registering the device. For platforms that do not use runtime PM,pm_runtime_enable()does nothing and for platforms that do use runtime PM but may not require it specifically for PMU, this will just add a little overhead when initialising and uninitialising the PMU device.Tested with PERF on OMAP2420, OMAP3430 and OMAP4460.
V2 changes:
- Callpm_runtime_enable()unconditionally on registering the PMU device.
Quoted 8 lines
Quoted 2 lines
Signed-off-by Jon Hunter <[email protected]>---
Cheers Jon! Looks a bit weird without the matching
pm_runtime_disable, but we don't really have anywhere to put that since the PMU is not deregistered.Can we split this patch into two (even smaller!) patches so that I can take the perf part and the omap bit can go to Tony?
The omap bit looks OK for me to queue via perf: