linux/arch/arm/mach-omap2
Paul Walmsley dc6d1cda04 OMAP2+: hwmod: upgrade per-hwmod mutex to a spinlock
Change the per-hwmod mutex to a spinlock.  (The per-hwmod lock
serializes most post-initialization hwmod operations such as enable,
idle, and shutdown.)  Spinlocks are needed, because in some cases,
hwmods must be enabled from timer interrupt disabled-context, such as
an ISR.  The current use-case that is driving this is the OMAP GPIO
block ISR: it can trigger interrupts even with its clocks disabled,
but these clocks are needed for register accesses in the ISR to succeed.

This patch also effectively reverts commit
848240223c - this patch makes
_omap_hwmod_enable() and _omap_hwmod_init() static, renames them back
to _enable() and _idle(), and changes their callers to call the
spinlocking versions.  Previously, since omap_hwmod_{enable,init}()
attempted to take mutexes, these functions could not be called while
the timer interrupt was disabled; but now that the functions use
spinlocks and save and restore the IRQ state, it is appropriate to
call them directly.

Kevin Hilman <khilman@deeprootsystems.com> originally proposed this
patch - thanks Kevin.

Signed-off-by: Paul Walmsley <paul@pwsan.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>
Cc: Benoît Cousson <b-cousson@ti.com>
2010-12-21 19:55:12 -07:00
..
include/mach omap2+: Initialize omap_irq_base for entry-macro.S from platform code 2010-12-10 09:42:51 -08:00
board-2430sdp.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-3430sdp.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-3630sdp.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-4430sdp.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-am3517crane.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-am3517evm.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-apollon.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-cm-t35.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-cm-t3517.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-devkit8000.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-flash.c OMAP2plus: Fix static function warnings 2010-10-08 10:02:49 -07:00
board-flash.h OMAP2plus: Fix static function warnings 2010-10-08 10:02:49 -07:00
board-generic.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-h4.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-igep0020.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-igep0030.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-ldp.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-n8x0.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-omap3beagle.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-omap3evm.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-omap3logic.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-omap3pandora.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-omap3stalker.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-omap3touchbook.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-omap4panda.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-overo.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-rm680.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-rx51-peripherals.c omap: rx51: Switch rx51_tpa6130a2_data __initdata to__initdata_or_module 2010-12-20 18:48:16 -08:00
board-rx51-video.c Added video data to support tvout on rx51 2010-12-20 18:48:16 -08:00
board-rx51.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
board-zoom-debugboard.c OMAP2plus: Fix static function warnings 2010-10-08 10:02:49 -07:00
board-zoom-peripherals.c omap: kill all section mismatch warning for omap2plus_defconfig 2010-12-17 17:25:26 -08:00
board-zoom.c OMAP2+: io: split omap2_init_common_hw() 2010-12-21 19:55:11 -07:00
clkt2xxx_apll.c OMAP2 PRCM: convert OMAP2 PRCM macros to the _SHIFT/_MASK suffixes 2010-05-20 12:31:04 -06:00
clkt2xxx_dpllcore.c OMAP2xxx clock: move the DPLL+CORE composite clock code into mach-omap2/clkt2xxx_dpllcore.c 2010-01-26 20:13:06 -07:00
clkt2xxx_osc.c OMAP2xxx clock: move osc_clk code into mach-omap2/clkt2xxx_osc.c 2010-01-28 18:13:49 -07:00
clkt2xxx_sys.c OMAP2xxx clock: move sys_clk code into mach-omap2/clkt2xxx_sys.c 2010-01-28 18:13:49 -07:00
clkt2xxx_virt_prcm_set.c OMAP2 clock: fix recursive spinlock attempt when CONFIG_CPU_FREQ=y 2010-05-20 12:31:14 -06:00
clkt34xx_dpll3m2.c OMAP3/4 clock: split into per-chip family files 2010-02-24 12:16:15 -07:00
clkt_clksel.c OMAP2+ clock: clean up clkt_clksel.c 2010-05-20 12:31:06 -06:00
clkt_dpll.c OMAP2/3/4 clock: fix DPLL multiplier value errors; also copyrights, includes, documentation 2010-02-24 12:15:03 -07:00
clock2xxx.c OMAP2/3 clock: combine OMAP2 & 3 boot-time MPU rate change code 2010-02-24 17:45:15 -07:00
clock2xxx.h OMAP2 clock: split OMAP2420, OMAP2430 clock data into their own files 2010-02-24 12:29:42 -07:00
clock3xxx_data.c I2C: i2c-omap: Change device name: i2c_omap -> omap_i2c 2010-12-20 17:53:04 -08:00
clock3xxx.c OMAP2/3 clock: combine OMAP2 & 3 boot-time MPU rate change code 2010-02-24 17:45:15 -07:00
clock3xxx.h OMAP3/4 clock: split into per-chip family files 2010-02-24 12:16:15 -07:00
clock34xx.c OMAP3/4 clock: split into per-chip family files 2010-02-24 12:16:15 -07:00
clock34xx.h OMAP3/4 clock: split into per-chip family files 2010-02-24 12:16:15 -07:00
clock36xx.c OMAP3/4 clock: split into per-chip family files 2010-02-24 12:16:15 -07:00
clock36xx.h OMAP3/4 clock: split into per-chip family files 2010-02-24 12:16:15 -07:00
clock44xx_data.c I2C: i2c-omap: Change device name: i2c_omap -> omap_i2c 2010-12-20 17:53:04 -08:00
clock44xx.h OMAP3/4 clock: split into per-chip family files 2010-02-24 12:16:15 -07:00
clock2420_data.c I2C: i2c-omap: Change device name: i2c_omap -> omap_i2c 2010-12-20 17:53:04 -08:00
clock2430_data.c I2C: i2c-omap: Change device name: i2c_omap -> omap_i2c 2010-12-20 17:53:04 -08:00
clock2430.c OMAP2 clock: split OMAP2420, OMAP2430 clock data into their own files 2010-02-24 12:29:42 -07:00
clock3517.c OMAP3/4 clock: split into per-chip family files 2010-02-24 12:16:15 -07:00
clock3517.h OMAP3/4 clock: split into per-chip family files 2010-02-24 12:16:15 -07:00
clock_common_data.c OMAP3 clock: rename RATE_IN_343X, RATE_IN_3430ES2 to match reality 2010-05-20 12:31:07 -06:00
clock.c OMAP2+: clock: reduce the amount of standard debugging while disabling unused clocks 2010-10-08 11:40:20 -06:00
clock.h OMAP2+ clock: clean up clkt_clksel.c 2010-05-20 12:31:06 -06:00
clockdomain.c OMAP clockdomain: initialize clockdomain registers when the clockdomain layer starts 2010-09-23 17:14:12 -07:00
clockdomains44xx.h OMAP4: PRM: Remove MPU internal code name and apply PRCM naming convention 2010-05-20 12:31:11 -06:00
clockdomains.h omap2: Convert ARCH_OMAP24XX to ARCH_OMAP2 2010-02-15 09:27:01 -08:00
cm4xxx.c OMAP4: PM: Declare idle modules as functional too 2010-09-24 10:23:18 -06:00
cm44xx.h OMAP4: PM: Define additional registers for ES2 2010-09-27 14:02:56 -06:00
cm-regbits-24xx.h OMAP2xxx: hwmod: add I2C hwmods for OMAP2420, 2430 2010-11-09 09:26:08 -08:00
cm-regbits-34xx.h OMAP3: PRCM: Consider UART4 for 3630 chip in prcm_setup_regs 2010-09-29 12:43:00 -07:00
cm-regbits-44xx.h OMAP4: CM & PRM: Update PRCM register bitshifts and masks for ES2 2010-09-27 14:02:55 -06:00
cm.c OMAP24xx: CM: fix mask used for checking IDLEST status 2010-07-26 16:34:28 -06:00
cm.h OMAP4: hwmod & CM: Implement the omap4_cm_wait_module_ready function 2010-05-20 12:31:08 -06:00
common.c OMAP: control: move plat-omap/control.h to mach-omap2/control.h 2010-10-08 11:40:20 -06:00
control.c OMAP3: rework of the ASM sleep code execution paths 2010-12-21 14:45:58 -08:00
control.h OMAP3: remove hardcoded values from the ASM sleep code 2010-12-21 14:45:57 -08:00
cpuidle34xx.c OMAP3630: PM: Erratum i583: disable coreoff if < ES1.2 2010-12-21 14:45:53 -08:00
devices.c arm: mach-omap2: hsmmc_reset: fix clk_get() error handling 2010-12-20 18:48:15 -08:00
dma.c OMAP: DMA: Convert DMA library into platform driver 2010-12-20 18:38:31 -08:00
dpll3xxx.c fix typos concerning "hierarchy" 2010-06-16 18:03:14 +02:00
dsp.c omap: add dsp platform device 2010-10-05 12:05:11 -07:00
emu.c omap2/3: Fix initcalls for multi-omap 2010-02-15 09:27:05 -08:00
gpio.c OMAP2+: GPIO: device registration 2010-12-07 16:26:57 -08:00
gpmc-nand.c omap3 nand: cleanup virtual address usages 2010-08-02 15:30:38 +03:00
gpmc-onenand.c omap: headers: Move remaining headers from include/mach to include/plat 2009-10-20 09:40:47 -07:00
gpmc-smc91x.c omap: use smc91x_platdata to setup smc91x 2009-12-11 16:16:33 -08:00
gpmc-smsc911x.c ARM: OMAP3LOGIC: Add generic smsc911x support when connected to GPMC 2010-09-28 11:39:18 -07:00
gpmc.c omap3 nand: cleanup virtual address usages 2010-08-02 15:30:38 +03:00
hsmmc.c OMAP: control: move plat-omap/control.h to mach-omap2/control.h 2010-10-08 11:40:20 -06:00
hsmmc.h Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6 2010-10-25 13:46:56 -07:00
i2c.c omap: mux: Convert 2420 platform init code to use new mux code 2010-07-05 16:31:40 +03:00
id.c OMAP: control: move plat-omap/control.h to mach-omap2/control.h 2010-10-08 11:40:20 -06:00
io.c OMAP2+: hwmod: add postsetup state 2010-12-21 19:55:12 -07:00
io.h OMAP: plat-omap: Fix static function warnings 2010-10-08 10:12:38 -07:00
iommu2.c omap iommu: move iommu_disable at fault to the above layer 2010-06-29 07:55:07 +03:00
irq.c OMAP3: add comments for erratas i540 and i478 workarounds 2010-12-17 16:48:20 -08:00
Kconfig omap4: opp: add OPP table data 2010-12-21 14:30:40 -08:00
mailbox.c OMAP: mailbox: fix detection for previously supported chips 2010-12-02 05:43:16 -06:00
Makefile Merge branch 'pm-opp' of ssh://master.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm into omap-for-linus 2010-12-21 17:05:57 -08:00
Makefile.boot
mcbsp.c OMAP: McBSP: Remove null omap44xx ops comment 2010-10-08 11:40:21 -06:00
mux34xx.c OMAP: mux: Add __func__ macro to pr_xxx macros 2010-11-17 12:01:54 +01:00
mux34xx.h omap: mux: Add 36xx CBP package support 2009-12-11 16:16:33 -08:00
mux44xx.c OMAP: mux: Add __func__ macro to pr_xxx macros 2010-11-17 12:01:54 +01:00
mux44xx.h OMAP4: mux: Add CBS package data for OMAP4430 ES2 2010-11-17 12:01:52 +01:00
mux2420.c OMAP: mux: Add __func__ macro to pr_xxx macros 2010-11-17 12:01:54 +01:00
mux2420.h omap: mux: Add data for 2420 2010-07-05 16:31:36 +03:00
mux2430.c OMAP: mux: Add __func__ macro to pr_xxx macros 2010-11-17 12:01:54 +01:00
mux2430.h omap: mux: Add data for 2430 2010-07-05 16:31:36 +03:00
mux.c OMAP: mux: Add __func__ macro to pr_xxx macros 2010-11-17 12:01:54 +01:00
mux.h arm: mach-omap2: remove NULL board_mux from board files 2010-12-02 17:03:41 -08:00
omap4-common.c omap4: l2x0: Enable early BRESP bit 2010-12-18 09:33:01 -08:00
omap44xx-smc.S omap4: Add smc API to read AuxCoreBoot0 register 2010-08-02 13:18:18 +03:00
omap_hwmod_3xxx_data.c OMAP3: hwmod data: add system DMA 2010-12-20 18:38:29 -08:00
omap_hwmod_44xx_data.c OMAP4: hwmod data: add system DMA 2010-12-20 18:38:30 -08:00
omap_hwmod_2420_data.c OMAP2420: hwmod data: add system DMA 2010-12-20 18:38:29 -08:00
omap_hwmod_2430_data.c Merge branch 'devel-dma' into omap-for-linus 2010-12-21 16:48:20 -08:00
omap_hwmod_common_data.c OMAP: hwmod data: add class for IVA hwmods 2010-07-26 16:34:31 -06:00
omap_hwmod_common_data.h OMAP: hwmod data: add class for IVA hwmods 2010-07-26 16:34:31 -06:00
omap_hwmod.c OMAP2+: hwmod: upgrade per-hwmod mutex to a spinlock 2010-12-21 19:55:12 -07:00
omap_opp_data.h omap: opp: add OMAP3 OPP table data and common init 2010-12-21 14:30:40 -08:00
omap-headsmp.S omap4: Add smc API to read AuxCoreBoot0 register 2010-08-02 13:18:18 +03:00
omap-hotplug.c omap4: hotplug: Add basic CPU hotplug support 2010-08-02 13:18:19 +03:00
omap-iommu.c OMAP: iommu: make iva2 iommu selectable 2010-12-15 11:33:31 -06:00
omap-smp.c omap: Fix sev instruction usage for multi-omap 2010-08-16 09:22:04 +03:00
opp2xxx.h omap2/3: Multiboot compile fixes to compile in omap2 and omap3 2010-02-15 09:26:55 -08:00
opp3xxx_data.c omap: opp: add OMAP3 OPP table data and common init 2010-12-21 14:30:40 -08:00
opp4xxx_data.c omap4: opp: add OPP table data 2010-12-21 14:30:40 -08:00
opp2420_data.c OMAP2xxx OPP: clean up comments in OPP data 2010-01-08 15:23:15 -07:00
opp2430_data.c OMAP2xxx OPP: clean up comments in OPP data 2010-01-08 15:23:15 -07:00
opp.c omap: opp: add OMAP3 OPP table data and common init 2010-12-21 14:30:40 -08:00
pm24xx.c OMAP2+: disable idle early in the suspend sequence 2010-12-21 14:29:34 -08:00
pm34xx.c OMAP3: add comments for low power code errata 2010-12-21 14:45:59 -08:00
pm44xx.c OMAP2+: disable idle early in the suspend sequence 2010-12-21 14:29:34 -08:00
pm_bus.c OMAP2+: PM: initial runtime PM core support 2010-09-21 11:51:23 -07:00
pm-debug.c omap: PM debug: fix wake-on-timer debugfs dependency 2010-12-02 17:08:48 -08:00
pm.c OMAP: pm.c correct the initcall for an early init. 2010-12-21 14:29:34 -08:00
pm.h Merge branch 'pm-opp' of ssh://master.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm into omap-for-linus 2010-12-21 17:05:57 -08:00
powerdomain.c OMAP2: powerdomain: Add break in switch statement 2010-08-03 10:21:07 +03:00
powerdomains24xx.h omap2: Convert ARCH_OMAP24XX to ARCH_OMAP2 2010-02-15 09:27:01 -08:00
powerdomains34xx.h OMAP3: add comments for erratas i540 and i478 workarounds 2010-12-17 16:48:20 -08:00
powerdomains44xx.h OMAP4: powerdomain: Update DSS logic state for ES2 2010-09-27 14:02:56 -06:00
powerdomains.h OMAP2+ powerdomains/clockdomains: prepare for multi-OMAP configs 2010-01-29 10:14:23 -07:00
prcm-common.h OMAP2: PRCM: fix some SHIFT macros that were actually bitmasks 2010-12-10 18:04:43 -08:00
prcm.c OMAP: control: move plat-omap/control.h to mach-omap2/control.h 2010-10-08 11:40:20 -06:00
prm2xxx_3xxx.c OMAP2/3: PRM: add module hard reset support 2010-09-21 15:12:40 -06:00
prm44xx.c OMAP4: PRM: add module hard reset support 2010-09-21 15:12:21 -06:00
prm44xx.h OMAP4: PM: Define additional registers for ES2 2010-09-27 14:02:56 -06:00
prm-regbits-24xx.h OMAP2 PRCM: convert OMAP2 PRCM macros to the _SHIFT/_MASK suffixes 2010-05-20 12:31:04 -06:00
prm-regbits-34xx.h OMAP3: hwmod: add I2C hwmods for OMAP3430 2010-11-09 09:29:13 -08:00
prm-regbits-44xx.h OMAP4: CM & PRM: Update PRCM register bitshifts and masks for ES2 2010-09-27 14:02:55 -06:00
prm.h OMAP2/3: PRM: add module hard reset support 2010-09-21 15:12:40 -06:00
sdram-hynix-h8mbx00u0mer-0em.h omap3: zoom: Introduce zoom3 board support 2009-11-22 10:24:33 -08:00
sdram-micron-mt46h32m32lf-6.h omap: headers: Move remaining headers from include/mach to include/plat 2009-10-20 09:40:47 -07:00
sdram-nokia.c arm: omap: sdram-nokia: add 97.6/195.2 MHz timing data 2010-12-17 15:13:46 -08:00
sdram-nokia.h arm: omap: add sdram-nokia.h 2010-12-17 15:13:44 -08:00
sdram-numonyx-m65kxxxxam.h omap3: SDRC: add timing data for Numonyx M65KxxxxAM 2010-02-17 17:23:20 -08:00
sdram-qimonda-hyb18m512160af-6.h omap: headers: Move remaining headers from include/mach to include/plat 2009-10-20 09:40:47 -07:00
sdrc2xxx.c omap: headers: Move remaining headers from include/mach to include/plat 2009-10-20 09:40:47 -07:00
sdrc.c omap2/3/4: ioremap omap_globals module 2010-02-23 10:57:40 -08:00
sdrc.h OMAP2+: use global values for the SRAM PA addresses 2010-12-21 14:45:56 -08:00
serial.c OMAP2+: hwmod: upgrade per-hwmod mutex to a spinlock 2010-12-21 19:55:12 -07:00
sleep24xx.S omap: headers: Move remaining headers from include/mach to include/plat 2009-10-20 09:40:47 -07:00
sleep34xx.S OMAP3: ASM sleep code format rework 2010-12-21 14:45:59 -08:00
sram34xx.S omap3: Prevent SDRC deadlock when L3 is changing frequency 2010-09-27 14:02:59 -06:00
sram242x.S omap: Split OMAP2_IO_ADDRESS to L3 and L4 2009-10-19 15:25:31 -07:00
sram243x.S omap: Split OMAP2_IO_ADDRESS to L3 and L4 2009-10-19 15:25:31 -07:00
timer-gp.c arm: omap2: timer-gp: delete unused variable 2010-11-24 16:49:42 -08:00
timer-gp.h OMAP2plus: Fix static function warnings 2010-10-08 10:02:49 -07:00
timer-mpu.c omap4: Use irq line defines from irq-44xx.h 2010-02-23 15:29:08 -08:00
usb-ehci.c omap: mux: Remove old mux code 2010-07-05 16:31:40 +03:00
usb-fs.c OMAP: control: move plat-omap/control.h to mach-omap2/control.h 2010-10-08 11:40:20 -06:00
usb-musb.c USB: AM35x: Add musb support 2010-10-22 10:22:16 -07:00
usb-tusb6010.c omap: mux: Convert 2420 platform init code to use new mux code 2010-07-05 16:31:40 +03:00