kernel-fxtec-pro1x/arch/arm/mach-omap2
Jon Hunter 77da2d910a OMAP3: PM: Prevent hang in prcm_interrupt_handler
There are two scenarios where a race condition could result in a hang
in the prcm_interrupt handler. These are:

1). Waiting for PRM_IRQSTATUS_MPU register to clear.
Bit 0 of the PRM_IRQSTATUS_MPU register indicates that a wake-up event
is pending for the MPU. This bit can only be cleared if the all the
wake-up events latched in the various PM_WKST_x registers have been
cleared. If a wake-up event occurred during the processing of the prcm
interrupt handler, after the corresponding PM_WKST_x register was
checked but before the PRM_IRQSTATUS_MPU was cleared, then the CPU
would be stuck forever waiting for bit 0 in PRM_IRQSTATUS_MPU to be
cleared.

2). Waiting for the PM_WKST_x register to clear.
Some power domains have more than one wake-up source. The PM_WKST_x
registers indicate the source of a wake-up event and need to be cleared
after a wake-up event occurs. When the PM_WKST_x registers are read and
before they are cleared, it is possible that another wake-up event
could occur causing another bit to be set in one of the PM_WKST_x
registers. If this did occur after reading a PM_WKST_x register then
the CPU would miss this event and get stuck forever in a loop waiting
for that PM_WKST_x register to clear.

This patch address the above race conditions that would result in a
hang.

Signed-off-by: Jon Hunter <jon-hunter@ti.com>
Reviewed-by: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
2009-10-05 10:50:59 -07:00
..
board-2430sdp.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
board-3430sdp.c Merge branch '2_6_32_for_next' of git://git.pwsan.com/linux-2.6 into for-next 2009-09-03 10:17:39 -07:00
board-4430sdp.c Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6 2009-09-18 09:19:26 -07:00
board-apollon.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-09-20 05:55:36 -07:00
board-generic.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
board-h4.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
board-ldp.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
board-n8x0.c OMAP2: add board file for Nokia N800 and N810 2009-08-28 10:51:38 -07:00
board-omap3beagle.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
board-omap3evm.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
board-omap3pandora.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
board-overo.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
board-rx51-peripherals.c ARM: OMAP: RX51: set MMC capabilities and power-saving flag 2009-09-23 07:39:36 -07:00
board-rx51.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
board-zoom-debugboard.c OMAP: Zoom2: release debug board detect gpio line 2009-09-02 15:07:56 -07:00
board-zoom2.c OMAP2/3 board-*.c files: read bootloader configuration earlier 2009-09-03 20:14:02 +03:00
clock.c OMAP: PM: Hook into PM counters 2009-09-02 15:08:23 -07:00
clock.h OMAP2/3 clock: split, rename omap2_wait_clock_ready() 2009-07-24 20:10:35 -06:00
clock24xx.c OMAP2 clock: 2430 I2CHS uses non-standard CM_IDLEST register 2009-07-24 20:10:36 -06:00
clock24xx.h OMAP2 clock: 2430 I2CHS uses non-standard CM_IDLEST register 2009-07-24 20:10:36 -06:00
clock34xx.c OMAP3 clock: Fixed processing of bootarg 'mpurate' 2009-09-03 20:13:58 +03:00
clock34xx.h OMAP3 clock: remove superfluous calls to omap2_init_clk_clkdm 2009-09-03 20:14:00 +03:00
clockdomain.c OMAP: PM: Add closures to clkdm_for_each and pwrdm_for_each. 2009-09-02 15:08:23 -07:00
clockdomains.h OMAP3: PM: D2D clockdomain supports SW supervised transitions 2009-05-28 10:59:08 -07:00
cm-regbits-24xx.h
cm-regbits-34xx.h OMAP3: PM: Add D2D clocks and auto-idle setup to PRCM init 2009-05-28 10:59:07 -07:00
cm.c OMAP2/3/4 PRCM: add module IDLEST wait code 2009-09-03 20:14:02 +03:00
cm.h OMAP2/3/4 PRCM: add module IDLEST wait code 2009-09-03 20:14:02 +03:00
cm4xxx.c OMAP2/3/4 PRCM: add module IDLEST wait code 2009-09-03 20:14:02 +03:00
control.c
devices.c spi: McSPI support for OMAP4 2009-09-23 07:39:44 -07:00
gpmc-onenand.c OMAP2/3: gpmc-onenand: correct use of async timings 2009-06-23 13:30:24 +03:00
gpmc-smc91x.c ARM: OMAP2/3: Add generic smc91x support when connected to GPMC 2009-05-28 13:23:52 -07:00
gpmc.c mtd: omap: add support for nand prefetch-read and post-write 2009-09-19 13:20:51 -07:00
id.c OMAP2/3: Add omap_type() for determining GP/EMU/HS 2009-06-23 13:30:23 +03:00
io.c OMAP: omap_hwmod: call omap_hwmod init at boot; create interconnects 2009-09-03 20:14:05 +03:00
iommu2.c OMAP: iommu: add initial debugfs support 2009-08-28 10:54:41 -07:00
irq.c OMAP: Add new function to check wether there is irq pending 2009-05-28 10:59:04 -07:00
Kconfig OMAP2: add board file for Nokia N800 and N810 2009-08-28 10:51:38 -07:00
mailbox.c OMAP2/3: omap mailbox: platform_get_irq() error ignored 2009-06-23 13:30:22 +03:00
Makefile OMAP2/3/4: create omap_hwmod layer 2009-09-03 20:14:03 +03:00
Makefile.boot
mcbsp.c Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2009-09-14 17:48:14 -07:00
mmc-twl4030.c ARM: OMAP: mmc-twl4030: add regulator sleep / wake function 2009-09-23 07:39:35 -07:00
mmc-twl4030.h omap_hsmmc: support for deeper power saving states 2009-09-23 07:39:35 -07:00
mux.c OMAP3: PM: add T2 interrupt line mux setting, and enable on 3430SDP 2009-09-02 15:07:56 -07:00
omap-headsmp.S ARM: OMAP4: SMP: Add OMAP4430 SMP board files 2009-06-09 13:03:50 +05:30
omap-smp.c OMAP: Remove OMAP_IO_ADDRESS, use OMAP1_IO_ADDRESS and OMAP2_IO_ADDRESS instead 2009-08-28 10:50:33 -07:00
omap3-iommu.c
omap_hwmod.c OMAP: omap_hwmod: call omap_hwmod init at boot; create interconnects 2009-09-03 20:14:05 +03:00
omap_hwmod_34xx.h OMAP: omap_hwmod: call omap_hwmod init at boot; create interconnects 2009-09-03 20:14:05 +03:00
omap_hwmod_2420.h OMAP: omap_hwmod: call omap_hwmod init at boot; create interconnects 2009-09-03 20:14:05 +03:00
omap_hwmod_2430.h OMAP: omap_hwmod: call omap_hwmod init at boot; create interconnects 2009-09-03 20:14:05 +03:00
pm-debug.c OMAP: PM: Added suspend target state control to debugfs for OMAP3 2009-09-02 15:08:25 -07:00
pm.h OMAP: PM: Added suspend target state control to debugfs for OMAP3 2009-09-02 15:08:25 -07:00
pm24xx.c OMAP: PM: Add closures to clkdm_for_each and pwrdm_for_each. 2009-09-02 15:08:23 -07:00
pm34xx.c OMAP3: PM: Prevent hang in prcm_interrupt_handler 2009-10-05 10:50:59 -07:00
powerdomain.c Merge branch '2_6_32_for_next' of git://git.pwsan.com/linux-2.6 into for-next 2009-09-03 10:17:39 -07:00
powerdomains.h
powerdomains24xx.h
powerdomains34xx.h
prcm-common.h
prcm.c OMAP2/3 clock: split, rename omap2_wait_clock_ready() 2009-07-24 20:10:35 -06:00
prm-regbits-24xx.h
prm-regbits-34xx.h
prm.h OMAP: Remove OMAP_IO_ADDRESS, use OMAP1_IO_ADDRESS and OMAP2_IO_ADDRESS instead 2009-08-28 10:50:33 -07:00
sdram-micron-mt46h32m32lf-6.h ARM: OMAP3: SDRC: add timing data for Micron MT46H32M32LF-6, v2 2009-05-28 14:03:59 -07:00
sdram-qimonda-hyb18m512160af-6.h ARM: OMAP3: SDRC: add timing data for Qimonda HYB18M512160AF-6 2009-05-28 14:03:59 -07:00
sdrc.c OMAP2/3 SDRC: don't set SDRC_POWER.PWDENA on boot 2009-07-24 19:44:01 -06:00
sdrc.h OMAP: Remove OMAP_IO_ADDRESS, use OMAP1_IO_ADDRESS and OMAP2_IO_ADDRESS instead 2009-08-28 10:50:33 -07:00
sdrc2xxx.c
serial.c Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6 2009-09-18 09:19:26 -07:00
sleep24xx.S
sleep34xx.S
sram34xx.S OMAP3 SDRC: Move the clk stabilization delay to the right place 2009-07-24 20:10:35 -06:00
sram242x.S OMAP: Remove OMAP_IO_ADDRESS, use OMAP1_IO_ADDRESS and OMAP2_IO_ADDRESS instead 2009-08-28 10:50:33 -07:00
sram243x.S OMAP: Remove OMAP_IO_ADDRESS, use OMAP1_IO_ADDRESS and OMAP2_IO_ADDRESS instead 2009-08-28 10:50:33 -07:00
timer-gp.c OMAP: Remove OMAP_IO_ADDRESS, use OMAP1_IO_ADDRESS and OMAP2_IO_ADDRESS instead 2009-08-28 10:50:33 -07:00
timer-mpu.c ARM: OMAP4: SMP: Add mpu timer support for OMAP4430 2009-06-09 13:03:59 +05:30
usb-musb.c MUSB: Remove usb_musb_pm_init() call 2009-09-02 15:07:56 -07:00
usb-tusb6010.c