linux/arch/arm
Joseph Lo 7e8b15dbc3 ARM: tegra114: Reprogram GIC CPU interface to bypass IRQ on CPU PM entry
There is a difference between GICv1 and v2 when CPU in power management
mode (aka CPU power down on Tegra). For GICv1, IRQ/FIQ interrupt lines
going to CPU are same lines which are also used for wake-interrupt.
Therefore, we cannot disable the GIC CPU interface if we need to use same
interrupts for CPU wake purpose. This creates a race condition for CPU
power off entry. Also, in GICv1, disabling GICv1 CPU interface puts GICv1
into bypass mode such that incoming legacy IRQ/FIQ are sent to CPU, which
means disabling GIC CPU interface doesn't really disable IRQ/FIQ to CPU.

GICv2 provides a wake IRQ/FIQ (for wake-event purpose), which are not
disabled by GIC CPU interface. This is done by adding a bypass override
capability when the interrupts are disabled at the CPU interface. To
support this, there are four bits about IRQ/FIQ BypassDisable in CPU
interface Control Register. When the IRQ/FIQ not being driver by the
CPU interface, each interrupt output signal can be deasserted rather
than being driven by the legacy interrupt input.

So the wake-event can be used as wakeup signals to SoC (system power
controller).

To prevent race conditions and ensure proper interrupt routing on
Cortex-A15 CPUs when they are power-gated, add a CPU PM notifier
call-back to reprogram the GIC CPU interface on PM entry. The
GIC CPU interface will be reset back to its normal state by
the common GIC CPU PM exit callback when the CPU wakes up.

Based on the work by: Scott Williams <scwilliams@nvidia.com>

Signed-off-by: Joseph Lo <josephl@nvidia.com>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
2013-07-19 10:07:14 -06:00
..
boot ARM: SoC fixes for 3.11-rc 2013-07-13 15:00:26 -07:00
common Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-07-06 14:09:38 -07:00
configs ARM: SoC fixes for 3.11-rc 2013-07-13 15:00:26 -07:00
crypto ARM: 7723/1: crypto: sha1-armv4-large.S: fix SP handling 2013-05-22 22:01:35 +01:00
include ARM: SoC fixes for 3.11-rc 2013-07-13 15:00:26 -07:00
kernel Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm 2013-07-13 14:58:36 -07:00
kvm KVM fixes for 3.11 2013-07-03 13:21:40 -07:00
lib
mach-at91 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-bcm ARM: bcm281xx: Remove init_irq declaration in machine description 2013-05-14 09:48:40 -07:00
mach-bcm2835 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-clps711x reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-cns3xxx reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-davinci Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2013-07-13 12:09:57 -07:00
mach-dove Watchdog: allow orion_wdt to be built for Dove 2013-07-11 22:17:56 +02:00
mach-ebsa110 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-ep93xx reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-exynos ARM: SoC fixes for 3.11-rc 2013-07-13 15:00:26 -07:00
mach-footbridge reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-gemini ARM: arm-soc cleanup for 3.10 2013-05-02 09:03:55 -07:00
mach-highbank reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-imx Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2013-07-09 18:24:39 -07:00
mach-integrator reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-iop13xx reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-iop32x reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-iop33x
mach-ixp4xx ARM: SoC fixes for 3.11-rc 2013-07-13 15:00:26 -07:00
mach-keystone ARM: keystone: Move CPU bringup code to dedicated asm file 2013-06-24 16:23:36 +02:00
mach-kirkwood Watchdog: allow orion_wdt to be built for Dove 2013-07-11 22:17:56 +02:00
mach-ks8695 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-lpc32xx reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-mmp reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-msm Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-07-06 14:09:38 -07:00
mach-mv78xx0 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-mvebu reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-mxs Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2013-07-09 18:24:39 -07:00
mach-netx reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-nomadik reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-nspire arm: Add Initial TI-Nspire support 2013-06-21 20:06:30 +02:00
mach-omap1 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-omap2 ARM: SoC fixes for 3.11-rc 2013-07-13 15:00:26 -07:00
mach-orion5x Watchdog: allow orion_wdt to be built for Dove 2013-07-11 22:17:56 +02:00
mach-picoxcell reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-prima2 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-pxa reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-realview reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-rockchip arm: add basic support for Rockchip RK3066a boards 2013-06-21 09:21:02 +02:00
mach-rpc reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-s3c24xx reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-s3c64xx reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-s5p64x0 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-s5pc100 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-s5pv210 For the 3.11 merge we only have one new MFD driver for the Kontron PLD. 2013-07-10 11:10:27 -07:00
mach-sa1100 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-shark reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-shmobile ARM: SoC fixes for 3.11-rc 2013-07-13 15:00:26 -07:00
mach-socfpga reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-spear reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-sti ARM: sti: Add STiH416 SOC support 2013-06-25 13:26:58 -07:00
mach-sunxi reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-tegra ARM: tegra114: Reprogram GIC CPU interface to bypass IRQ on CPU PM entry 2013-07-19 10:07:14 -06:00
mach-u300 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-ux500 The common clock framework changes for 3.11 include new clock drivers 2013-07-03 11:54:50 -07:00
mach-versatile reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-vexpress ARM SoC specific changes 2013-07-02 13:43:38 -07:00
mach-virt Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2013-07-03 09:46:29 -07:00
mach-vt8500 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-w90x900 reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
mach-zynq ARM: zynq: use DT_MACHINE_START 2013-07-05 23:07:39 +02:00
mm Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm 2013-07-13 14:58:36 -07:00
net arm: bpf_jit: can call module_free() from any context 2013-05-20 14:03:50 -07:00
nwfpe
oprofile
plat-iop reboot: arm: change reboot_mode to use enum reboot_mode 2013-07-09 10:33:29 -07:00
plat-omap Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-07-06 14:09:38 -07:00
plat-orion Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-07-06 14:09:38 -07:00
plat-pxa
plat-samsung Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-07-06 14:09:38 -07:00
plat-versatile Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-07-06 14:09:38 -07:00
tools
vfp ARM: 7729/1: vfp: ensure VFP_arch is non-zero when VFP is not supported 2013-05-22 22:01:37 +01:00
xen xen/arm and xen/arm64: implement HYPERVISOR_tmem_op 2013-07-04 11:41:12 +00:00
Kconfig Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm 2013-07-13 14:58:36 -07:00
Kconfig-nommu ARM: mpu: Ensure that MPU depends on CPU_V7 2013-06-17 15:13:18 +01:00
Kconfig.debug Omap fixes and minor defconfig updates that would be good to 2013-07-12 10:59:39 -07:00
Makefile Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2013-07-03 09:46:29 -07:00