aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-04-22 12:08:39 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-04-22 12:08:39 -0400
commite6c81cce5699ec6be3a7533b5ad7a062ab3357f2 (patch)
tree4592735bbfb17f163217d0bb80877dcc22a869c0 /arch/arm/include
parentd0440c59f52d31aa7f74ba8e35cc22ee96acea84 (diff)
parenta018bb2ff95868ea592212b6735b35836fda268b (diff)
Merge tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC platform updates from Olof Johansson: "Our SoC branch usually contains expanded support for new SoCs and other core platform code. In this case, that includes: - support for the new Annapurna Labs "Alpine" platform - a rework greatly simplifying adding new platform support to the MCPM subsystem (Multi-cluster power management) - cpuidle and PM improvements for Exynos3250 - misc updates for Renesas, OMAP, Meson, i.MX. Some of these could have gone in other branches but ended up here for various reasons" * tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (53 commits) ARM: alpine: add support for generic pci ARM: Exynos: migrate DCSCB to the new MCPM backend abstraction ARM: vexpress: migrate DCSCB to the new MCPM backend abstraction ARM: vexpress: DCSCB: tighten CPU validity assertion ARM: vexpress: migrate TC2 to the new MCPM backend abstraction ARM: MCPM: move the algorithmic complexity to the core code ARM: EXYNOS: allow cpuidle driver usage on Exynos3250 SoC ARM: EXYNOS: add AFTR mode support for Exynos3250 ARM: EXYNOS: add code for setting/clearing boot flag ARM: EXYNOS: fix CPU1 hotplug on Exynos3250 ARM: S3C64XX: Use fixed IRQ bases to avoid conflicts on Cragganmore ARM: cygnus: fix const declaration bcm_cygnus_dt_compat ARM: DRA7: hwmod: Fix the hwmod class for GPTimer4 ARM: DRA7: hwmod: Add data for GPTimers 13 through 16 ARM: EXYNOS: Remove left over 'extra_save' ARM: EXYNOS: Constify exynos_pm_data array ARM: EXYNOS: use static in suspend.c ARM: EXYNOS: Use platform device name as power domain name ARM: EXYNOS: add support for async-bridge clocks for pm_domains ARM: omap-device: add missed callback for suspend-to-disk ...
Diffstat (limited to 'arch/arm/include')
-rw-r--r--arch/arm/include/asm/mcpm.h65
1 files changed, 63 insertions, 2 deletions
diff --git a/arch/arm/include/asm/mcpm.h b/arch/arm/include/asm/mcpm.h
index 3446f6a1d9fa..50b378f59e08 100644
--- a/arch/arm/include/asm/mcpm.h
+++ b/arch/arm/include/asm/mcpm.h
@@ -171,12 +171,73 @@ void mcpm_cpu_suspend(u64 expected_residency);
171int mcpm_cpu_powered_up(void); 171int mcpm_cpu_powered_up(void);
172 172
173/* 173/*
174 * Platform specific methods used in the implementation of the above API. 174 * Platform specific callbacks used in the implementation of the above API.
175 *
176 * cpu_powerup:
177 * Make given CPU runable. Called with MCPM lock held and IRQs disabled.
178 * The given cluster is assumed to be set up (cluster_powerup would have
179 * been called beforehand). Must return 0 for success or negative error code.
180 *
181 * cluster_powerup:
182 * Set up power for given cluster. Called with MCPM lock held and IRQs
183 * disabled. Called before first cpu_powerup when cluster is down. Must
184 * return 0 for success or negative error code.
185 *
186 * cpu_suspend_prepare:
187 * Special suspend configuration. Called on target CPU with MCPM lock held
188 * and IRQs disabled. This callback is optional. If provided, it is called
189 * before cpu_powerdown_prepare.
190 *
191 * cpu_powerdown_prepare:
192 * Configure given CPU for power down. Called on target CPU with MCPM lock
193 * held and IRQs disabled. Power down must be effective only at the next WFI instruction.
194 *
195 * cluster_powerdown_prepare:
196 * Configure given cluster for power down. Called on one CPU from target
197 * cluster with MCPM lock held and IRQs disabled. A cpu_powerdown_prepare
198 * for each CPU in the cluster has happened when this occurs.
199 *
200 * cpu_cache_disable:
201 * Clean and disable CPU level cache for the calling CPU. Called on with IRQs
202 * disabled only. The CPU is no longer cache coherent with the rest of the
203 * system when this returns.
204 *
205 * cluster_cache_disable:
206 * Clean and disable the cluster wide cache as well as the CPU level cache
207 * for the calling CPU. No call to cpu_cache_disable will happen for this
208 * CPU. Called with IRQs disabled and only when all the other CPUs are done
209 * with their own cpu_cache_disable. The cluster is no longer cache coherent
210 * with the rest of the system when this returns.
211 *
212 * cpu_is_up:
213 * Called on given CPU after it has been powered up or resumed. The MCPM lock
214 * is held and IRQs disabled. This callback is optional.
215 *
216 * cluster_is_up:
217 * Called by the first CPU to be powered up or resumed in given cluster.
218 * The MCPM lock is held and IRQs disabled. This callback is optional. If
219 * provided, it is called before cpu_is_up for that CPU.
220 *
221 * wait_for_powerdown:
222 * Wait until given CPU is powered down. This is called in sleeping context.
223 * Some reasonable timeout must be considered. Must return 0 for success or
224 * negative error code.
175 */ 225 */
176struct mcpm_platform_ops { 226struct mcpm_platform_ops {
227 int (*cpu_powerup)(unsigned int cpu, unsigned int cluster);
228 int (*cluster_powerup)(unsigned int cluster);
229 void (*cpu_suspend_prepare)(unsigned int cpu, unsigned int cluster);
230 void (*cpu_powerdown_prepare)(unsigned int cpu, unsigned int cluster);
231 void (*cluster_powerdown_prepare)(unsigned int cluster);
232 void (*cpu_cache_disable)(void);
233 void (*cluster_cache_disable)(void);
234 void (*cpu_is_up)(unsigned int cpu, unsigned int cluster);
235 void (*cluster_is_up)(unsigned int cluster);
236 int (*wait_for_powerdown)(unsigned int cpu, unsigned int cluster);
237
238 /* deprecated callbacks */
177 int (*power_up)(unsigned int cpu, unsigned int cluster); 239 int (*power_up)(unsigned int cpu, unsigned int cluster);
178 void (*power_down)(void); 240 void (*power_down)(void);
179 int (*wait_for_powerdown)(unsigned int cpu, unsigned int cluster);
180 void (*suspend)(u64); 241 void (*suspend)(u64);
181 void (*powered_up)(void); 242 void (*powered_up)(void);
182}; 243};