aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-omap/include/plat/cpu.h
diff options
context:
space:
mode:
authorPaul Walmsley <paul@pwsan.com>2011-10-06 19:18:45 -0400
committerKevin Hilman <khilman@ti.com>2011-10-07 16:41:49 -0400
commitb02b917211d50ad5dc13e49c933ef916b10e0d00 (patch)
tree138707c1aab31b0263cb1bd02ba4678c6a7d80f5 /arch/arm/plat-omap/include/plat/cpu.h
parentff2f8e5ffb23de6e2284f31651447cb80a4c9d1b (diff)
ARM: OMAP3: PM: fix I/O wakeup and I/O chain clock control detection
The way that we detect which OMAP3 chips support I/O wakeup and software I/O chain clock control is broken. Currently, I/O wakeup is marked as present for all OMAP3 SoCs other than the AM3505/3517. The TI81xx family of SoCs are at present considered to be OMAP3 SoCs, but don't support I/O wakeup. To resolve this, convert the existing blacklist approach to an explicit, whitelist support, in which only SoCs which are known to support I/O wakeup are listed. (At present, this only includes OMAP34xx, OMAP3503, OMAP3515, OMAP3525, OMAP3530, and OMAP36xx.) Also, the current code incorrectly detects the presence of a software-controllable I/O chain clock on several chips that don't support it. This results in writes to reserved bitfields, unnecessary delays, and console messages on kernels running on those chips: http://www.spinics.net/lists/linux-omap/msg58735.html Convert this test to a feature test with a chip-by-chip whitelist. Thanks to Dave Hylands <dhylands@gmail.com> for reporting this problem and doing some testing to help isolate the cause. Thanks to Steve Sakoman <sakoman@gmail.com> for catching a bug in the first version of this patch. Thanks to Russell King <linux@arm.linux.org.uk> for comments. Signed-off-by: Paul Walmsley <paul@pwsan.com> Cc: Dave Hylands <dhylands@gmail.com> Cc: Steve Sakoman <sakoman@gmail.com> Tested-by: Steve Sakoman <sakoman@gmail.com> Cc: Russell King - ARM Linux <linux@arm.linux.org.uk> Signed-off-by: Kevin Hilman <khilman@ti.com>
Diffstat (limited to 'arch/arm/plat-omap/include/plat/cpu.h')
-rw-r--r--arch/arm/plat-omap/include/plat/cpu.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
index 67b3d75884cd..3a280aaf9675 100644
--- a/arch/arm/plat-omap/include/plat/cpu.h
+++ b/arch/arm/plat-omap/include/plat/cpu.h
@@ -477,6 +477,13 @@ void omap2_check_revision(void);
477 477
478/* 478/*
479 * Runtime detection of OMAP3 features 479 * Runtime detection of OMAP3 features
480 *
481 * OMAP3_HAS_IO_CHAIN_CTRL: Some later members of the OMAP3 chip
482 * family have OS-level control over the I/O chain clock. This is
483 * to avoid a window during which wakeups could potentially be lost
484 * during powerdomain transitions. If this bit is set, it
485 * indicates that the chip does support OS-level control of this
486 * feature.
480 */ 487 */
481extern u32 omap_features; 488extern u32 omap_features;
482 489
@@ -488,9 +495,10 @@ extern u32 omap_features;
488#define OMAP3_HAS_192MHZ_CLK BIT(5) 495#define OMAP3_HAS_192MHZ_CLK BIT(5)
489#define OMAP3_HAS_IO_WAKEUP BIT(6) 496#define OMAP3_HAS_IO_WAKEUP BIT(6)
490#define OMAP3_HAS_SDRC BIT(7) 497#define OMAP3_HAS_SDRC BIT(7)
491#define OMAP4_HAS_MPU_1GHZ BIT(8) 498#define OMAP3_HAS_IO_CHAIN_CTRL BIT(8)
492#define OMAP4_HAS_MPU_1_2GHZ BIT(9) 499#define OMAP4_HAS_MPU_1GHZ BIT(9)
493#define OMAP4_HAS_MPU_1_5GHZ BIT(10) 500#define OMAP4_HAS_MPU_1_2GHZ BIT(10)
501#define OMAP4_HAS_MPU_1_5GHZ BIT(11)
494 502
495 503
496#define OMAP3_HAS_FEATURE(feat,flag) \ 504#define OMAP3_HAS_FEATURE(feat,flag) \
@@ -507,12 +515,11 @@ OMAP3_HAS_FEATURE(isp, ISP)
507OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK) 515OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK)
508OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP) 516OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP)
509OMAP3_HAS_FEATURE(sdrc, SDRC) 517OMAP3_HAS_FEATURE(sdrc, SDRC)
518OMAP3_HAS_FEATURE(io_chain_ctrl, IO_CHAIN_CTRL)
510 519
511/* 520/*
512 * Runtime detection of OMAP4 features 521 * Runtime detection of OMAP4 features
513 */ 522 */
514extern u32 omap_features;
515
516#define OMAP4_HAS_FEATURE(feat, flag) \ 523#define OMAP4_HAS_FEATURE(feat, flag) \
517static inline unsigned int omap4_has_ ##feat(void) \ 524static inline unsigned int omap4_has_ ##feat(void) \
518{ \ 525{ \