diff options
author | Nicolas Pitre <nicolas.pitre@linaro.org> | 2012-04-12 01:40:31 -0400 |
---|---|---|
committer | Nicolas Pitre <nicolas.pitre@linaro.org> | 2013-07-30 09:02:12 -0400 |
commit | 1a6b69b6548cd0dd82549393f30dd982ceeb79d2 (patch) | |
tree | 97758dd77421bcacb3191c5347194d3d48940a3b /include/linux/irqchip | |
parent | 71a8986d7e4845b6fca1298fe6e3233ce6fde0b7 (diff) |
ARM: gic: add CPU migration support
This is required by the big.LITTLE switcher code.
The gic_migrate_target() changes the CPU interface mapping for the
current CPU to redirect SGIs to the specified interface, and it also
updates the target CPU for each interrupts to that CPU interface
if they were targeting the current interface. Finally, pending
SGIs for the current CPU are forwarded to the new interface.
Because Linux does not use it, the SGI source information for the
forwarded SGIs is not preserved. Neither is the source information
for the SGIs sent by the current CPU to other CPUs adjusted to match
the new CPU interface mapping. The required registers are banked so
only the target CPU could do it.
Signed-off-by: Nicolas Pitre <nico@linaro.org>
Diffstat (limited to 'include/linux/irqchip')
-rw-r--r-- | include/linux/irqchip/arm-gic.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h index 3e203eb23cc7..40bfcac95940 100644 --- a/include/linux/irqchip/arm-gic.h +++ b/include/linux/irqchip/arm-gic.h | |||
@@ -31,6 +31,8 @@ | |||
31 | #define GIC_DIST_TARGET 0x800 | 31 | #define GIC_DIST_TARGET 0x800 |
32 | #define GIC_DIST_CONFIG 0xc00 | 32 | #define GIC_DIST_CONFIG 0xc00 |
33 | #define GIC_DIST_SOFTINT 0xf00 | 33 | #define GIC_DIST_SOFTINT 0xf00 |
34 | #define GIC_DIST_SGI_PENDING_CLEAR 0xf10 | ||
35 | #define GIC_DIST_SGI_PENDING_SET 0xf20 | ||
34 | 36 | ||
35 | #define GICH_HCR 0x0 | 37 | #define GICH_HCR 0x0 |
36 | #define GICH_VTR 0x4 | 38 | #define GICH_VTR 0x4 |
@@ -73,6 +75,8 @@ static inline void gic_init(unsigned int nr, int start, | |||
73 | gic_init_bases(nr, start, dist, cpu, 0, NULL); | 75 | gic_init_bases(nr, start, dist, cpu, 0, NULL); |
74 | } | 76 | } |
75 | 77 | ||
78 | void gic_migrate_target(unsigned int new_cpu_id); | ||
79 | |||
76 | #endif /* __ASSEMBLY */ | 80 | #endif /* __ASSEMBLY */ |
77 | 81 | ||
78 | #endif | 82 | #endif |